Windows側のモニタ電源OFFが優先されてしまう

解決


take  2020-03-19 15:01:29  No: 148654

質問半分、報告半分になります。

電源とスリープで設定したモニタの電源を切るまでの時間が経過した後
  PostMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER,  -1);
でモニタの電源が復帰するのですが、その後数秒後にモニタの電源が切れてしまいます。

再度上記の命令を送信するとまた復帰するのですがすぐに電源が切れてしまいます。

ためしに
  PostMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, 2);
  PostMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER,  -1);
として見ましたが変わりません。

発生する環境と発生しない環境も確認しています。
環境1:Windows10 Embedded + デスクトップ + 液晶モニタ
環境2:Windows10 Version 1909 + ノートPC

環境1:モニタ復帰正常
環境2:モニタ復帰異常

スクリーンセーバーに関して
https://www.petitmonte.com/bbs/answers?question_id=8894

で質問させて頂いたのを思い出し、その中で
MapVirtualKeyを使用したキーを使ってキーボードを押されたような処理をしてみると

環境1:キーボード送信でスクリーンセイバー、モニタ復帰異常
環境2:キーボード送信でスクリーンセイバー、モニタ復帰正常

と真逆の結果となりました。
両方を併用すれば問題は解決するのですがもやもやします。
他に良い方法があるのでしょうか?


take  2020-03-25 08:57:03  No: 148671

とりあえず両方の処理をしてどっちの環境でも動作させることで解決とさせていただきます。


Mr.XRAY  2020-03-25 16:29:38  No: 148673

マウスの移動をエミュレートする,という手もありますね.

    // マウスカーソルの移動をエミュレート
    mouse_event(MOUSEEVENTF_MOVE, 1, 1, 0, 0);


take  2020-03-26 09:49:31  No: 148675

アドバイスありがとうございます。

  GetCursorPos(p);
  SetCursorPos(p.X+100,p.Y+100);
  SetCursorPos(p.X,p.Y);

ではダメでしたが
エミュレートする方法は有効そうですね。

Windows7までは想定内の動作ですがWindows10からは予想外の動作が発生して悩まされます。


※返信する前に利用規約をご確認ください。








  このエントリーをはてなブックマークに追加