Windowsでは、メッセージのやり取りにより各種コントロールなどのオブジェクトを制御しており、
コントロールパネルで設定している場合、スクリーンセイバーもメッセージを渡して処理することが可能です。
送信Win32メッセージに「WM_SYSCOMMAND(=0x0112)」を、
送信パラメータに「SC_SCREENSAVE(=0xF140)」を指定すれば、セイバーを起動します。
メッセージのやり取りを行うにはobjsend命令(HSP2)、sendmsg命令(HSP3)を使用し、
メッセージの送り先は自ウィンドウとします。HSP3ではシステム変数から簡単に取得できますが、
HSP2ではBMSCR構造体からしか取得ができませんし、
何より、objsend命令はHSP3のsendmsg命令と同じ内容であるものの、
メッセージの送信先対象がコントロール(HSPでのオブジェクト)に限定されており、
パラメータに指定するのは1つ目のオブジェクトを0としたオブジェクトIDとなっています。
コレは表向きなもので、実はオブジェクトIDを指すというより、
BMSCR構造体の要素41(hCld)からの要素番号を指しているので、
ウィンドウハンドルが保持されている要素13(hwnd)を指せば、ウィンドウを指定したことになるのです。
HSP2「objsend 13 - 41, 0x0112, 0xF140, 不使用変数(=0), 0」
HSP3「sendmsg hwnd, 0x0112, 0xF140, 不使用(=0)」
尚、下記のサンプルを実行して、ウィンドウ内の実行を押してもセイバーが動作しない場合、
画面のプロパティのスクリーンセーバータブで適当なセイバーを起動する設定に変更してみてください。
|