2

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);

上記のマークされた行を追加すると、この問題が解決しました

4

2 に答える 2

0

の戻り値をチェックしていませんMonitorFromWindow。モニターが見つからない場合は、NULL合格しているため返されますMONITOR_DEFAULTTONULL。Null はモニター ハンドルではありません。

MONITOR_DEFAULTTONEARESTまたはを試してくださいMONITOR_DEFAULTTOPRIMARY

于 2013-01-08T15:08:52.687 に答える