diff --git a/WinPowerDMS/DisplayMode.c b/WinPowerDMS/DisplayMode.c index 926561d..411294e 100644 --- a/WinPowerDMS/DisplayMode.c +++ b/WinPowerDMS/DisplayMode.c @@ -29,7 +29,7 @@ DISPLAY_MODE GetModeFromCB(HWND hComboBox) { } // returns the result of the ChangeDisplaySettings call that this results in. -LONG ChangeDisplayMode(const DISPLAY_MODE* mode, DWORD dwFlags) { +LONG ChangeDisplayMode(LPCWSTR displayName, const DISPLAY_MODE* mode, DWORD dwFlags) { DEVMODE devMode = { .dmSize = sizeof(devMode), .dmFields = DM_PELSWIDTH | DM_PELSHEIGHT | DM_DISPLAYFREQUENCY, @@ -37,6 +37,7 @@ LONG ChangeDisplayMode(const DISPLAY_MODE* mode, DWORD dwFlags) { .dmPelsHeight = mode->height, .dmDisplayFrequency = mode->refresh }; + if (displayName) wcscpy_s(devMode.dmDeviceName, sizeof(devMode.dmDeviceName) / sizeof(devMode.dmDeviceName[0]), displayName); return ChangeDisplaySettings(&devMode, dwFlags); } @@ -55,14 +56,15 @@ static DWORD WINAPI MessageBoxAsync(LPVOID lpParam) { struct TestDisplayModeParams { HWND hDlg; + WCHAR displayName[32]; DISPLAY_MODE mode; }; static DWORD WINAPI TestDisplayModeThread(LPVOID lpParam) { struct TestDisplayModeParams* params = lpParam; DEVMODE originalMode = { .dmSize = sizeof(originalMode) }; - EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &originalMode); - ChangeDisplayMode(¶ms->mode, CDS_FULLSCREEN); + EnumDisplaySettings(params->displayName, ENUM_CURRENT_SETTINGS, &originalMode); + ChangeDisplayMode(params->displayName, ¶ms->mode, CDS_FULLSCREEN); // Create the message box about the resolution change WCHAR msgText[96]; @@ -88,10 +90,11 @@ static DWORD WINAPI TestDisplayModeThread(LPVOID lpParam) { return 0; } -void TestDisplayMode(HWND hDlg, DISPLAY_MODE* mode) { +void TestDisplayMode(HWND hDlg, LPCWSTR displayName, DISPLAY_MODE* mode) { struct TestDisplayModeParams* tdmParams = HeapAlloc(GetProcessHeap(), 0, sizeof(*tdmParams)); if (tdmParams) { tdmParams->hDlg = hDlg; + if (tdmParams->displayName) wcscpy_s(tdmParams->displayName, sizeof(tdmParams->displayName) / sizeof(tdmParams->displayName[0]), displayName); tdmParams->mode = *mode; HANDLE tdmThread = CreateThread(NULL, 0, TestDisplayModeThread, tdmParams, 0, NULL); if (tdmThread) CloseHandle(tdmThread); diff --git a/WinPowerDMS/DisplayMode.h b/WinPowerDMS/DisplayMode.h index c084509..3b60c71 100644 --- a/WinPowerDMS/DisplayMode.h +++ b/WinPowerDMS/DisplayMode.h @@ -14,6 +14,6 @@ BOOL DisplayModeEquals(const DISPLAY_MODE* a, const DISPLAY_MODE* b); DISPLAY_MODE GetModeFromCB(HWND hComboBox); // returns the result of the ChangeDisplaySettings call that this results in. -LONG ChangeDisplayMode(const DISPLAY_MODE* mode, DWORD dwFlags); +LONG ChangeDisplayMode(LPCWSTR displayName, const DISPLAY_MODE* mode, DWORD dwFlags); -void TestDisplayMode(HWND hDlg, DISPLAY_MODE* mode); \ No newline at end of file +void TestDisplayMode(HWND hDlg, LPCWSTR displayName, DISPLAY_MODE* mode); \ No newline at end of file diff --git a/WinPowerDMS/WinPowerDMS.c b/WinPowerDMS/WinPowerDMS.c index 34e80c2..35db147 100644 --- a/WinPowerDMS/WinPowerDMS.c +++ b/WinPowerDMS/WinPowerDMS.c @@ -141,7 +141,7 @@ static INT_PTR CALLBACK PrefsDialogProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPA SendMessage(hCheckStartup, BM_SETCHECK, userPrefs.runAtStartup ? BST_CHECKED : BST_UNCHECKED, 0); return TRUE; } - + case WM_COMMAND: { switch (LOWORD(wParam)) { case IDC_BUTTON_APPLY: @@ -158,12 +158,12 @@ static INT_PTR CALLBACK PrefsDialogProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPA } case IDC_BUTTON_TEST_BATT: { DISPLAY_MODE mode = GetModeFromCB(hComboBatt); - TestDisplayMode(hDlg, &mode); + TestDisplayMode(hDlg, NULL, &mode); return TRUE; } case IDC_BUTTON_TEST_AC: { DISPLAY_MODE mode = GetModeFromCB(hComboAC); - TestDisplayMode(hDlg, &mode); + TestDisplayMode(hDlg, NULL, &mode); return TRUE; } break; @@ -222,7 +222,7 @@ static LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM l if (GetSystemPowerStatus(&powerStatus) && (DisplayModeEquals(¤tMode, &userPrefs.modeBatt) || DisplayModeEquals(¤tMode, &userPrefs.modeAC))) { - ChangeDisplayMode(powerStatus.ACLineStatus ? &userPrefs.modeAC : &userPrefs.modeBatt, CDS_UPDATEREGISTRY); + ChangeDisplayMode(NULL, powerStatus.ACLineStatus ? &userPrefs.modeAC : &userPrefs.modeBatt, CDS_UPDATEREGISTRY); } } break;