http://msdn.microsoft.com/library/default.asp?url=/library/en-
us/power/base/ioctl_video_query_display_brightness.asp
IOCTL_VIDEO_QUERY_DISPLAY_BRIGHTNESSを使用したいのですが、
うまくいきません。
具体的には以下のようなコードです。
DISPLAY_BRIGHTNESS bright;
DWORD tmp;
BOOL b=DeviceIoControl(
hMonitor,//モニタのデバイスハンドル。きちんと取れていることを他の関数で確認
済
IOCTL_VIDEO_QUERY_DISPLAY_BRIGHTNESS,
NULL, // lpInBuffer
0, // nInBufferSize
&bright,
sizeof(bright),
&tmp,
NULL
);
結果はbright.ucDisplayPolicy ,bright.ucACBrightness ,bright.ucACBrightness とも
に同じ意味不明の内容が入ります。(正確には今ちょっとわからないのですが)
そしてtmpが0になってしまいます。
ただし、bは1、つまり関数自体は成功しているとのこと。
GetLastError で調べても成功しているとのこと。
何が悪いのでしょうか?
環境はvc++.net,MFC,WindowsXP SP2 デスクトップ型LCDです。
よろしくお願いします。
とりあえず、0初期化してから、やってみた結果を書いてください。
# 不定値のままなのかどうかを切り分けるため。
消されてしまいましたが、
初期化して実行すると、初期化値+文字列となりました。
HANDLE hMonitor=CreateFile
(\\\\.\\LCD,GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|
FILE_SHARE_WRITE,
NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
でモニタのハンドルを取得してから実行しています。
ヘッダはNtddvdeo.hです。(DISPLAY_BRIGHTNESS のためにもう一つヘッダが必要だったかも
しれません)
まだ試してませんがもしかしてノート型だけしか使えないのでしょうか?
DISPLAY_BRIGHTNESS bright;
DWORD tmp;
BOOL b=DeviceIoControl(
hMonitor,//モニタのデバイスハンドル。きちんと取れていることを他の関数で確認
済
IOCTL_VIDEO_QUERY_DISPLAY_BRIGHTNESS,
NULL, // lpInBuffer
0, // nInBufferSize
&bright,
sizeof(bright),
&tmp,
NULL
);
でbright.ucDisplayPolicy ,bright.ucACBrightness をintでキャストしたところ、
数字が出てきましたが、0~100の範囲の定義のはずが204とでてきます。
また、tmpが0になります。
よろしくおねがいします。
新しいノートでしか使えない関数ということらしいです。
どうもありがとうございました。