• 締切済み

モニタの電源がオフであるかどうか(Windows)

マウス・キーボード操作が指定時間なければ、モニタ(ビデオカード出力)をオフにするソフトを作っています。 (ゲームや動画鑑賞中でも強制的に) モニタをオフにするときに以下を実行しています。 PostMessage(-1, 274, 61808, 2) 現在マウスの座標を前回取得した値と比較して、変わっていたらカウントをリセットします。 またはGetAsyncKeyStateで押されたキーがあったらリセットします。 キーの方は、ときどき見知らぬキー番号が押されっぱなしになったりと困っているのですが、今回はこちらは置いておいておきます。 マウス座標は1秒間隔でチェックしているので、1秒以内に動いて元の位置に戻ってしまったとき、モニタのオフは解除されるのにもかかわらず、カウントをリセットできません。 かといって、これ以上間隔を狭めてバックグラウンド動作が重くなるのも困ります。 そこで、モニタオフのカウントに到達した以降、数分ごとにPostMessageを送り続けるということをやって、何らかの原因でモニタがウェイクアップしても、定期的に再度モニタをオフにするようなことをやっています。 また、キーでもマウスでもなく、別のアプリケーションがウェイクアップしてしまうこともあるようで、マウスチェック間隔やキー押しっぱなし問題が解決しても、定期的にモニタをオフにし続ける動作は必要だと思っています。 ここからが今回の問題でして、モニタがオフであるにもかかわらずPostMessageを送ってしまうと、次にマウスを動かしてモニタをウェイクアップさせても、なぜかすぐにオフになってしまう場合があります。 これを避けるために、PostMessageを送る前に、ちゃんとモニタがオンになっているかどうかを確認する方法を探しています。 環境はWindows XPと7です。 C・C++のカテゴリに書きましたが、実際の開発環境はVB6です。 なので、できればAPI関数かActiveXが知りたいですが、DLLでラップできればMFCなどでもかまいません。 しかし、VB6なのでウィンドウメッセージコールバックやCLI/.NETは扱えません。

みんなの回答

  • chie65535
  • ベストアンサー率43% (8525/19377)
回答No.1

ShellAPIにスクリーンセーバー用のAPIがあるので、自分でキーボードやマウスを監視する手法はお勧め出来ません。 また、定期的にモニタをオフし続けるのもお勧め出来ません。 アプリケーションをスクリーンセーバーとして構築し、ウェークアップ処理やモニタのオンオフ処理は、Windows標準のスクリーンセーバー処理にすべて移管し、アプリケーション側からは、一切、手を出してはいけません(Windows標準のスクリーンセーバー機能、電源管理機能と干渉し、不具合を起します) どうしても、自分でウェークアップ処理やモニタのオンオフ処理を行いたいのであれば、事前に、Windows標準のスクリーンセーバーと電源管理を停止させておく必要があります。

haporu
質問者

お礼

自己解決しそうです。 hMonitor = CreateFile("\\\\.\\LCD", GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0) GetDevicePowerState(hDevice, ret); if(ret){ PostMessage(-1, 274, 61808, 2); } しかし、デバイス名をLCDとしているので、CRTモニタの場合はどうなるのか、別質問にしました。 http://okwave.jp/qa/q7118405.html

haporu
質問者

補足

回答ありがとうございます。 スクリーンセーバーやモニタ電源オフを抑制するゲーム実行中にモニタをオフにするのが目的なので、スクリーンセーバーにはできません。 電源管理と干渉するなら、モニタオフをしない設定にすることを推奨とすることを説明書に記述しようと思います。

関連するQ&A

  • MS7681マザーボード電源ON、OFF繰り返す

    MS7681マザー、チップはZA68A、2年くらい前に購入しました。 特にBIOSアップデート等の余計な動作はしておらず、突然4秒間隔で電源のON⇒OFF(リセットではない)を繰り返すようになりました。 一旦てのデバイスを外し切り分け(HD、DVD、メモリ)しましたが、状況変うrわらず... モニターにBIOS出力する前に落ちるから原因特定不可(CPU or MB or 電源しか残ってないが) CPU、電源には予備がなく切り分け出来ない... 同じような現象でた方いましたら教えて下さい

  • パソコン本体は電源ON、モニタは電源OFF

    はじめまして。パソコンに詳しくない者です。 新品を2年前ぐらいに買って、箱も開けていなかったパソコンを使い始めました。 パソコンは、DELLで、「Dimension E521 AMD Athlon 64 プロセッサ 3500+」と書いてあります。 HDDは250GBで、メモリは2GB デュアルチャネル DDR2-SDRAMメモリ と書いてあります。 それで、モニタを2台サインはVGAで繋いで、合計3画面にしました。一定の時間使っていないと、省エネで電源オフ?になり、使う時にキーボードのどれかキーを押すとまた電源が入ります。 それが、2日目ぐらいに、押しても画面が暗いままが2、3回ありました。その時はコンセントを抜いて強制的に終了させました。 しばらくして、マウスポインタが固まって動かなくなっていたので、またコンセントを抜いて強制的に終了させましたが、モニタの電源は切れてましたが、パソコン自体は切れていないみたいで、コンセントをさすと電源が入ってままの状態みたいになっています。 要するに、パソコンは電源が入ったままで、モニタは電源が切れている状態(モニタの電源ランプが緑にならない状態です)なので、切ることも、普通に終了させることもできない状態です。 モニタを3つ繋げるには性能的に劣っているのでしょうか? それとも単に壊れていたってことでしょうか? 直す方法ってありますか? 使いはじめて、スムーズにいかないことがちょこちょこあったので、「怪しいな~すぐ動かなくなりそうだな~」と思ったのですが、最近の安めのパソコンでも、このパソコンより性能がいいのがあるみたいなので、買い換えた方がいいのでしょうか? アドバイスください。宜しくお願いします。

  • ExcelでON,OFFの切り替え時間をカウントしたい。

    ExcelでON,OFFの切り替え時間をカウントしたい。 MS Excelにてデータの整理を行っています。 今回、ONとOFFの信号を読み取ってそれを各セルに表示しているのですが、 それをカウントしたいのです。 現在エクセル上では以下のようになっています。   A  B  C  D 1 時間 信号 2 1  ON 3 2  ON 4 3  ON 5 4  ON 6 5  OFF 7 6  OFF ・ ・  ・ ・ ・  ・ ・ ・  ・ これらを (1)トップ(セル番B2)から始め、下のセルをどんどん読んでいく (2)ONが連続していればカウント続行、OFFになったらカウントを止める。そのカウントをcell C2に入れる。 (3)次は逆にOFFをカウントしていき、同じようにONになったらカウントを止める。そのカウントをcell D2に入れる (4)(2)と(3)を繰り返し行い、ONのカウントはC列に、OFFのカウントはD列に入力していく。 (5)参照する対象のセルが空白であれば、演算(マクロ?)をストップする。 というふうにしたいのですがよくわかりません。 なお、時間は1セル1秒の間隔になっていますので、セルの数をカウントする方法で構いません。 VBAを使っても構いませんので、どなたかご教授お願いいたします。

  • モニタが表示されない

    現在17inchの液晶モニタを使ってます。 パソコン本体の電源を入れたところ、 モニタに付いているスピーカから音は聞こえるのに 画面に何も表示されません。 モニタの電源を一旦消して、 再び電源を入れると画面が表示されますが 5秒ぐらいですぐ消えてしまいます。 同じことを何度やっても やはりすぐ画面が消えてしまいます。 マウスを動かしたり、キーを押したりしても 画面は表示されません。 何か設定が悪いのでしょうか? それともモニタの故障なんでしょうか?

  • 電源orマザーの故障疑惑

    はじめまして、2007年末から、自作Pを使っているのですが、 最近PC電源を入れてもモニターやキーボート、マウスが作動しない (HDDやDVDドライブは作動しているのですが)ことや、 PC電源をOFFにしている時、急におよそ0.3秒間隔で電源がON OFFの繰り返しが発生したりします。 電源ケーブルを抜いたり、マザーボードの配線を抜き差しすると 一時的に治るのですが、不定期にそれが発生してしまいます。 問題は自分の勘では電源(Abee AS Power Silentist S-550EB)かマザーボード(GIGABYTE GA-P35-DS4)の故障だと思うのですが、 何かアドバイスなどをいただきたいと思います。よろしくお願いします。

  • 時間取得

    OS:win2000pro vb:VB6.0sp5 状態を示すフラグ [変数]flg_1 as long [変数]flg_2 as longがあり 下記状態時の累積時間を取得する方法を教えてください 時刻 flg_1 flg_2 累積時間(秒) 14:22:00 0 0 0 14:23:00 1 0 0 14:23:30 1 1 0 ←累積カウントスタート 14:25:00 1 0 90 ←累積カウントストップ 14:26:00 1 1 90 ←累積カウントスタート 14:30:00 1 0 330 ←累積カウントストップ 14:30:10 0 0 0 ←累積リセット 14:35:50 1 1 0 ←累積カウントスタート 14:37:00 1 0 70 ←累積カウントストップ (補) flg_1=1の間、累積カウントUp (補) flg_2=1にて、累積リセット よって、 14:30:00時点  330(秒)→5.5(分)   →[小数1位四捨五入]→6(分):戻値 14:37:00時点  70(秒)→1.166…(分)   →[小数1位四捨五入]→1(分):戻値

  • 電源オプションについて

    WindowsXPの電源オプションで、HDDの自動電源オフの設定をしているのですが、電源が切れる時と切れない時があります。 例えば、「電源オプションのプロパティ」画面で ・モニタの電源を切る→10分後 ・ハードディスクの電源を切る→5時間後 ・システムスタンバイ→なし ・システム休止状態→5時間後 と設定しても、モニタは切れるのですがハードの方が切れません。特に、何か他のプログラムを起動させている訳でもないのですが・・・。 仕事等で、長時間家を空ける時に上記のような設定にしておくのですが、電源がちゃんと切れる時もあれば切れない時もあります。 試しに在宅中に短時間で設定してみても、電源が切れる時と切れない時があります。 家を空けている間は無人で、ペットもいないのでマウスもキーも触るものはいません。 地震で机が揺れてマウスが動いたのかな?と思って、机を揺さぶって実験してみたのですが、家のある地域ではマウスが動くほどの地震は、それほどは来ていません。 他に考えられる原因として、PCを起動中に時々Adobe等の更新のお知らせが画面に出てくるのですが、これが原因でしょうか? 無操作状態であっても、更新のお知らせ等が来ると「何らかの操作があった」事になって、またその時点から電源オフまでの時間をカウントされてしまうのでしょうか…??

  • PC電源ボタンを押すと電源ON-OFFを3秒間隔で繰り返します。

    PC電源ボタンを押すと電源ON-OFFを3秒間隔で繰り返します。 USBメモリ接続もなくDVD-ROMドライブも空の状態ですがWindowsの 起動画面にもすすめずONOFF繰り返しになります。 電源ON後即DVDドライブ開ボタンでオープンさせたらwindowsが起動しましたが 起動中にフリーズしました。 リセットボタンで再起動したところなんとか起動できたので現在質問させていただいている 状態です。 PCは2005年に購入したものでWindowsXP,Pentium4です。 故障要因がわからないのでアドバイスお願い致します。

  • GUIプログラミングについて

    GUIプログラミングについて質問です。 オブジェクト指向(Java)を用いて1秒ごとにカウントアップするプログラムを作成しました。 2つのボタンを持ち、1つは再生・停止ボタン、 もうひとつは秒数をリセットするボタンとして配置し、 再生・停止ボタンが押されたらカウントアップをはじめ、 リセットボタンで秒数をリセットします。 一応動作はしたのですが、 一番最初に実行した際にカウントが 0,0,1,2,....という具合に0秒目が2回カウントされてしまいます。 このような場合原因としてどのようなことが考えられるでしょうか? よろしくお願い致します。

  • AL1714 電源 点滅

    本日PCの電源をONにしたところモニタがON/OFFを繰り返すようになりました。前触れは無く昨日までは元気に付いていました。 ON・OFFが一秒弱の等間隔であることとコンセントを差し替えてもなることから接触不良ではなく内部の故障かと思います。 購入から3年と2ヶ月ですが寿命でしょうか? 修理するとしたら金額的にはいくらくらいになるでしょうか? このような症状になったことがある方、または有識者の方のご解答お待ちしております。よろしくお願いします。