FAQ5-2
|
Q. スクリーンセーバーをプログラムから停止する方法は
スクリーンセーバーを起動させる方法はわかるのですが,プログラムから停止させる方法がわかりません.
|
|
|
A. WM_SYSCOMMANDメッセージを自分で処理する
スクリーンセーバーが起動する前に,Windowsはアクティブなアプリケーションに対して,SC_SCREENSAVEを指定したWM_SYSCOMMANDメッセージを送ります.
このメッセージは,「スクリーンセーバーを起動する」というメッセージです.ですから,自分で自分自身にこのメッセージを送ってやれば,自発的にスクリーンセーバーを起動することができます(リスト5-4).
逆に,このメッセージをDefWindowProc()に渡さずに,自分で処理すれば,スクリーンセーバーを抑制することができます(リスト5-5).
このときは戻り値に0以外の値を渡さなくてはいけません.ちなみに,WM_SYSCOMMANDはアクティブなアプリケーションにしか送られてこないので,自分がアクティブなときにしか抑制できません.
[リスト5-4] :
SendMessage( hwnd, WM_SYSCOMMAND, SC_SCREENSAVE, 0 );
[リスト5-5] :
switch( message ) {
case WM_SYSCOMMAND:
if( wParam == SC_SCREENSAVE ) {
return 1;
}
break;
}
Back to FAQ main page