Windows でプログラムを作成していて、コンピューター モニターの明るさを取得したいと考えています。Windows の GetMonitorBrightness 関数を使用していますが、問題が発生しています。
これはこれまでの私のコードです:
DWORD dw;
HMONITOR hMonitor = NULL;
DWORD cPhysicalMonitors;
LPPHYSICAL_MONITOR pPhysicalMonitors = NULL;
LPDWORD pdwMinimumBrightness=NULL;
LPDWORD pdwCurrentBrightness=NULL;
LPDWORD pdwMaximumBrightness=NULL;
HWND hwnd = FindWindow(NULL, NULL);
hMonitor = MonitorFromWindow(hwnd, MONITOR_DEFAULTTONULL);
BOOL bSuccess = GetNumberOfPhysicalMonitorsFromHMONITOR(hMonitor, &cPhysicalMonitors);
pPhysicalMonitors = (LPPHYSICAL_MONITOR)malloc(cPhysicalMonitors* sizeof(PHYSICAL_MONITOR));
bSuccess = GetPhysicalMonitorsFromHMONITOR(hMonitor, cPhysicalMonitors, pPhysicalMonitors);
bSuccess = GetMonitorBrightness(hMonitor, pdwMinimumBrightness, pdwCurrentBrightness, pdwMaximumBrightness);
http://msdn.microsoft.com/en-us/library/windows/desktop/dd692972%28v=vs.85%29.aspxのドキュメントに従ってこれを書きました
しかし、このコードを実行すると、「無効なモニター ハンドルが渡されたため、この関数は失敗しました」というエラーが表示されます。
私が書いたコードに問題は見当たりませんが、このエラーの理由を理解できないようです。
編集: CRTモニターでこれを試していることに言及する必要があります
編集 2:この問題を修正しました。GetMonitorBrightness に適切なハンドルを渡していなかったことが判明しました。
bSuccess = GetPhysicalMonitorsFromHMONITOR(hMonitor, cPhysicalMonitors, pPhysicalMonitors);
HANDLE pmh = pPhysicalMonitors[0].hPhysicalMonitor; //<---------------
bSuccess = GetMonitorBrightness(pmh, pdwMinimumBrightness, pdwCurrentBrightness, pdwMaximumBrightness);
上記のマークされた行を追加すると、この問題が解決しました