5

私は、プログラムが特定の条件下でモニターの明るさを調整できるようにしたいだけです。そこで、Windows Power Management APIを調べたところ、うまくいくように思われるものがいくつか見つかりました。私がまとめたコードのコア (基本的にはthisを参照) は次のようになります。

GUID *pPwrGUID;
GUID subGUID = GUID_VIDEO_SUBGROUP;
GUID BriGUID = GUID_VIDEO_CURRENT_MONITOR_BRIGHTNESS;

PowerGetActiveScheme(NULL, &pPwrGUID);
PowerWriteACValueIndex(NULL, pPwrGUID, &subGUID, &BriGUID, 0);

これは十分に単純に思えます。私が抱えている問題は、PowerWriteACValueIndex がエラー コード 2: ファイルが見つかりませんを返すことです。これはあまり意味がありません。問題はインデックス値 (PowerWriteACValueIndex 関数の最後のパラメーター) が正しくないことだと考えていましたが、PowerReadACValueIndex を使用して書き込みを読み取りに変更すると (正当な値を取得できるかどうかを確認するため)、2 が返されます。すでにチェックして、GUID_VIDEO_CURRENT_MONITOR_BRIGHTNESS がヘッダー ファイルの GUID_VIDEO_SUBGROUP の下にあることを確認しました。

私が考えることができる唯一の他の情報は、WINVERが0x0600(vista)に設定されていることです。

ここで何がうまくいかないのでしょうか?それはかなり簡単なプロセスであるように思えますが、私は本当に運が悪いです. ありがとうございました。

4

1 に答える 1

4

さて、試行錯誤の末、やりたいことができました。どうやら GUID_VIDEO_CURRENT_MONITOR_BRIGHTNESS は使用するのが正しいものではなく、何らかの理由で関数が機能しません (サブグループの下のヘッダー ファイルにあります)。そのため、この時点でその目的が何であるかはよくわかりませんが、この場合には使用しないでください。

機能するのは同じ機能ですが、GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS を使用しています。「薄暗い」状態の明るさを変更したい場合は、GUID_DEVICE_POWER_POLICY_VIDEO_DIM_BRIGHTNESS もあります。

代わりにこの定義を使用すると、目的の動作が得られます。

于 2013-01-31T16:30:52.137 に答える