ディスプレイの電源状態を調べたいです。GetDevicePowerStateを利用したいのですが、ディスプレイのデバイスハンドルを取得する方法が分かりません。また、他の方法があればお願いします。
CreateFile のファイル名の部分に "\\.\" に続けてデバイス名を記述することで開けると思います。
ただ、その記述するデバイス名をどうやって取得するのかが俺にはわかりません。
識者の方、フォローお願いします。
::CreateDC(_T("DISPLAY"), NULL, NULL, NULL);
とか?
> CreateFile のファイル名の部分に "\\.\" に続けてデバイス名を記述することで開けると思います。
> ただ、その記述するデバイス名をどうやって取得するのかが俺にはわかりません。
EnumDisplayDevices()でしょうか。
DISPLAY_DEVICE構造体のDeviceNameメンバにそれらしきモノが。
で、試そうとしましたが…管理権限の関係か失敗しました。
特権取得とかやったことないので、この先は試せていないです。
デバイス名は
SetupDiGetClassDevs
SetupDiEnumDeviceInterfaces
SetupDiGetDeviceInterfaceDetail
の各関数を使って取得できます。
サンプル:
http://support.microsoft.com/default.aspx?scid=kb;ja;264203
ただ、SetupDiEnumDeviceInterfaces 関数に渡す「デバイス インターフェイス クラス GUID」なるものがどこで定義されているのかわかりません。
DDK にでも載ってるんでしょうか…
ノート PC では "\\.\LCD" で開けるっぽい…?
http://support.microsoft.com/default.aspx?scid=kb;ja;843617
たくさん>
GetDevicePowerState の日本語ドキュメントには「デバイスコンテキスト」と書かれていますが、まず間違いなく誤訳だと思われます。
ですよね^^;
なんか変だなとは思ったけど、
これでうまくいったらラッキーだなとも思った^^;
確かに EnumDisplayDevices でもそれっぽいものが取れますね。
ただ、これを CreateFile で開く場合に必要な特権って
いわゆる SE_ナントカ_NAME じゃなくて、管理者権限、つまり
Administrators でログインしとけ、ってことなんじゃないでしょうか。
デバイスに関しては、ここで聞いたほうが「濃い」答えが得られるかもしれません
http://www.ouk.co.jp/ogawa/sforum/sfrm.html
みなさん。いろいろありがとうございました。
一応EnumDisplayDevices()でDISPLAY_DEVICE構造体の
DeviceStringメンバをCreateFileに適用できました。
ただ、その後GetDevicePowerStateを使うと
モニタの電源をOFFにしてもコンセントを抜いても
本体から取り外してもモニタの電源ONという結果になってしまいます。
分かりましたらよろしくお願いします。
はじめまして。同じことで悩んでいます。
omiomiさんはCreateFileできたということですが、
私のほうではCreateFileに失敗します。
どのように試したのかよろしければ教えてもらえないでしょうか。
ツイート | ![]() |