win xp visual c++.net 2003
ジョイスティックで操作するゲームを作っているのですが、
途中でスクリーンセーバーが起動してしまいます。
これを防ぐにはどうすればいいのでしょうか?
ゲームの起動中は、スクリーンセーバーの起動不能にする
::SystemParametersInfo( SPI_SETSCREENSAVEACTIVE, FALSE, ...
ちょっと日本語変だったので・・
>ゲームの起動中は、スクリーンセーバーの起動不能にする
ゲームの起動中は、スクリーンセーバーを起動不能にする
あとは、常時 マウスorキー イベントを送り続けるとか・・
マウスorキー イベントを送り続けるには、
具体的にどの関数を使えばいいのでしょうか?
ヘルプをみてもイベントに関する項目が多すぎてわかりません...
キーボードイベントを送りたいのであれば、
keybd_eventをHELPで調べてみてください。
使い方についてはHELP参照と言うことで。
因みにこれを定期的に送っているとエディットボックスへの入力や
マウスのコントロールに影響が出る場合があるので注意は必要だと思いますよ。
例えば、shiftキーのキーダウンイベントを送っている時にマウス操作をすると
shiftキーと押しながら操作したのと同じ事になります。
未使用の0x88を使って起動防止できました。
ありがとうございました。
SystemParametersInfo の方がエレガントな気がするなぁ
すでに解決済みですが・・
当然、SystemParametersInfoの方がお勧めです
>あとは、常時 マウスorキー イベントを送り続けるとか・・
こっちは、こんな手もあるかな程度で書いたのですが
こちらが選ばれるとは・・
そうですね。
私もSystemParametersInfoの方がよいと思います。
SystemParametersInfoだと異常終了したら
設定残ったまんまじゃないの?
再起動でなおるのかいな?
SystemParametersInfoだと
起動時
アクティブ/インアクティブ
終了時
に設定しなければいけませんが、
イベントだと一行ですむので楽かと思って(^^;
でもおすすめということなのでSystemParametersInfoを使おうと思います。
自アプリケーションがアクティブな間だけ防止すればよいのなら、
WM_SYSCOMMANDのSC_SCREENSAVEを無視する方法もあります。
また、SystemParametersInfoで無効化した場合、
ユーザーが「画面のプロパティ」を開いて元に戻すことが可能ですから、
確実にしたいなら、たとえば、ウィンドウがアクティブになるたびに
有効化されていないか調べて、再設定するなどの処理が必要でしょう。
#個人的には、特定のアプリケーションがシステムワイドな設定を
#変更すべきではないと思います。
> また、SystemParametersInfoで無効化した場合、
> ユーザーが「画面のプロパティ」を開いて元に戻すことが可能ですから、
> 確実にしたいなら、たとえば、ウィンドウがアクティブになるたびに
> 有効化されていないか調べて、再設定するなどの処理が必要でしょう。
> #個人的には、特定のアプリケーションがシステムワイドな設定を
> #変更すべきではないと思います。
されど、フルスクリーンでゲームしている時にスクリーンセーバーが起動したりすると
大変ウザいのも確かなわけで。
だったら、そのゲームの設定ダイアログにでも「実行中はスクリーンセーバーを抑止す
る」とかいうオプションを設ければよろしいのではないかと。
それを承知してチェックしているのなら、システムワイドな設定を勝手に変更したこと
にはならないでしょうし、チェックしておきながら画面のプロパティで戻しちゃって
も、それはユーザの勝手でしょうから。
> それを承知してチェックしているのなら、システムワイドな設定を勝手に変更したこと
> にはならないでしょうし、チェックしておきながら画面のプロパティで戻しちゃって
> も、それはユーザの勝手でしょうから。
そうですね。ユーザーが認識しているのなら、設定を変えるのがよいと思います。