モニタを省電力モードに移行/復帰する処理を捜し求めて、ようやく出来た。
省電力に移行するのは超簡単。
ここがすんげー参考になる。ってかもう答え。
ttp://muumoo.jp/news/2007/08/25/0mmquicklock.html
SendMessageで0x112を呼ぶだけ。
[DllImport("user32.dll")]
private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp);
SendMessage(new IntPtr(0xFFFF), 0x112, new IntPtr(0xF170), new IntPtr(1));
ついでに省電力状態から復帰する処理も。
SendMessage(new IntPtr(0xFFFF), 0x112, new IntPtr(0xF170), new IntPtr(-1));
最後の引数が1か-1かだけの違い。
もちろん復帰を呼ばなくても、マウスの操作(クリック)とかで勝手に復帰する。
復帰するが、その時マウスのポインタがボタンの上なんかにあると、有効となり処理されてしまう。
この時の、復帰のためのクリックをイベントとして無効としたい場合。
省電力に移行する直前に、スクリーンセーバを動かしてみると、1回はクリックを無効化できた。
スクリーンセーバはscrなんて拡張子がついてるけど、じつはexe。
実行ファイルをコールするのと同様に呼べばいい。
System.Diagnostics.Process process =
System.Diagnostics.Process.Start(@"c:\windows\scrnsave.scr");
こんな感じ。
クラスにしたものは以降。
省電力に移行するのは超簡単。
ここがすんげー参考になる。ってかもう答え。
ttp://muumoo.jp/news/2007/08/25/0mmquicklock.html
SendMessageで0x112を呼ぶだけ。
[DllImport("user32.dll")]
private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp);
SendMessage(new IntPtr(0xFFFF), 0x112, new IntPtr(0xF170), new IntPtr(1));
ついでに省電力状態から復帰する処理も。
SendMessage(new IntPtr(0xFFFF), 0x112, new IntPtr(0xF170), new IntPtr(-1));
最後の引数が1か-1かだけの違い。
もちろん復帰を呼ばなくても、マウスの操作(クリック)とかで勝手に復帰する。
復帰するが、その時マウスのポインタがボタンの上なんかにあると、有効となり処理されてしまう。
この時の、復帰のためのクリックをイベントとして無効としたい場合。
省電力に移行する直前に、スクリーンセーバを動かしてみると、1回はクリックを無効化できた。
スクリーンセーバはscrなんて拡張子がついてるけど、じつはexe。
実行ファイルをコールするのと同様に呼べばいい。
System.Diagnostics.Process process =
System.Diagnostics.Process.Start(@"c:\windows\scrnsave.scr");
こんな感じ。
クラスにしたものは以降。
class MonOffClass
{
public const string SCR_MAINPATH = @"c:\windows\scrnsave.scr";
[DllImport("user32.dll")]
private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp);
/* 省電力開始 */
public void MonOff()
{
/*スクリーンセーバを起動(タッチを無効とする為) */
System.Diagnostics.Process process = System.Diagnostics.Process.Start(SCR_MAINPATH);
/* モニタ省電力モードへ */
SendMessage(new IntPtr(0xFFFF), 0x112, new IntPtr(0xF170), new IntPtr(1));
}
/* 省電力からの復帰 */
public void MonOn()
{
SendMessage(new IntPtr(0xFFFF), 0x112, new IntPtr(0xF170), new IntPtr(-1));
}
}
あと、現在モニタの状態がどうなってるか、ようするに点いてるのか消えてるのかを知る方法を捜し求めたけど、見つけられなかった..無理なんかな。
トラックバック
トラックバックURL: