IOCTL_VIDEO_QUERY_DISPLAY_BRIGHTNESSについて

[戻る]
omiomi 2005/01/04(火) 19:42:36
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です。
よろしくお願いします。

RAPT 2005/01/04(火) 20:48:26
とりあえず、0初期化してから、やってみた結果を書いてください。
# 不定値のままなのかどうかを切り分けるため。

omiomi 2005/01/13(木) 20:07:08
消されてしまいましたが、
初期化して実行すると、初期化値+文字列となりました。

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 のためにもう一つヘッダが必要だったかも
しれません)

まだ試してませんがもしかしてノート型だけしか使えないのでしょうか?

omiomi 2005/01/14(金) 19:35:23
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になります。

よろしくおねがいします。

omiomi 2005/01/25(火) 20:42:15
[[解決]]
新しいノートでしか使えない関数ということらしいです。
どうもありがとうございました。

古いスレッドには追加発言できません。