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