[PR]
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
- Newer : Opera と ウィルスバスター 2011 の狭間で part 2
- Older : ウィルスバスター 2011 と Opera の相性が悪いので
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
PCで、まあ、XPでもVistaでも7でもいんですが、サスペンドやらハイバーネートやらをタスクから実行したいことがあります。自動的になんらかの処理を繰り返し実行したい場合等ですな。
ここで大事なのは繰り返しという部分です。つまり、サスペンド(スタンバイ・スリープ)や、ハイバーネート(休止状態)であると、タスクマネージャからの自動的な復帰が効くわけです。
そんで、ネットでは以下のようなコマンドを実行せよ! という文章が大量に見つかります。
C:\WINDOWS\system32\rundll32.exe PowrProf.dll,SetSuspendState
電源管理にて休止状態を有効にしていると休止状態に、無効にしているとスタンバイとして動作する。
が、こんなことをするのは誤りです。SetSuspendStateの引数はBOOL型が3個であり、rundll32.exe による API 呼び出しが対応している形式(文字列型1つ)ではありません。たしかに何かしら動作してしまうのですが、ただしく API 呼び出しを行わなければいけません。そして、この誤った呼び出しをするとタスクによる自動復帰が出来ません(確実にできないかはちょっと不明ですができるという話を聞いたことがありません)。
#include
#include
#pragma comment(lib, "powrprof.lib")
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPTSTR, int) {
// 1番目の引数を FALSE にするとスタンバイ、TRUE にすると休止状態
SetSuspendState(TRUE, FALSE, FALSE);
return 0;
}
という簡単なコードで実行ファイルを作成しましょう。3番目の引数は FALSE でないと復帰できないので注意が必要です。
復帰後については SetThreadExecutionState を叩いてあげて、アクティブであることを伝えてあげると再度スリープ状態に陥ってしまうの(ちょっと気の利きすぎた仕様)を回避することができるでしょう。
2011/02/20 Note Trackback() Comment(0)
COMMENT
COMMENT FORM
TRACKBACK