Add display name to display mode changing and testing functions

This commit is contained in:
2025-08-15 18:56:13 -07:00
parent 0f66725951
commit 5048cafb9f
3 changed files with 13 additions and 10 deletions

View File

@ -29,7 +29,7 @@ DISPLAY_MODE GetModeFromCB(HWND hComboBox) {
} }
// returns the result of the ChangeDisplaySettings call that this results in. // 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 = { DEVMODE devMode = {
.dmSize = sizeof(devMode), .dmSize = sizeof(devMode),
.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT | DM_DISPLAYFREQUENCY, .dmFields = DM_PELSWIDTH | DM_PELSHEIGHT | DM_DISPLAYFREQUENCY,
@ -37,6 +37,7 @@ LONG ChangeDisplayMode(const DISPLAY_MODE* mode, DWORD dwFlags) {
.dmPelsHeight = mode->height, .dmPelsHeight = mode->height,
.dmDisplayFrequency = mode->refresh .dmDisplayFrequency = mode->refresh
}; };
if (displayName) wcscpy_s(devMode.dmDeviceName, sizeof(devMode.dmDeviceName) / sizeof(devMode.dmDeviceName[0]), displayName);
return ChangeDisplaySettings(&devMode, dwFlags); return ChangeDisplaySettings(&devMode, dwFlags);
} }
@ -55,14 +56,15 @@ static DWORD WINAPI MessageBoxAsync(LPVOID lpParam) {
struct TestDisplayModeParams { struct TestDisplayModeParams {
HWND hDlg; HWND hDlg;
WCHAR displayName[32];
DISPLAY_MODE mode; DISPLAY_MODE mode;
}; };
static DWORD WINAPI TestDisplayModeThread(LPVOID lpParam) { static DWORD WINAPI TestDisplayModeThread(LPVOID lpParam) {
struct TestDisplayModeParams* params = lpParam; struct TestDisplayModeParams* params = lpParam;
DEVMODE originalMode = { .dmSize = sizeof(originalMode) }; DEVMODE originalMode = { .dmSize = sizeof(originalMode) };
EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &originalMode); EnumDisplaySettings(params->displayName, ENUM_CURRENT_SETTINGS, &originalMode);
ChangeDisplayMode(&params->mode, CDS_FULLSCREEN); ChangeDisplayMode(params->displayName, &params->mode, CDS_FULLSCREEN);
// Create the message box about the resolution change // Create the message box about the resolution change
WCHAR msgText[96]; WCHAR msgText[96];
@ -88,10 +90,11 @@ static DWORD WINAPI TestDisplayModeThread(LPVOID lpParam) {
return 0; 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)); struct TestDisplayModeParams* tdmParams = HeapAlloc(GetProcessHeap(), 0, sizeof(*tdmParams));
if (tdmParams) { if (tdmParams) {
tdmParams->hDlg = hDlg; tdmParams->hDlg = hDlg;
if (tdmParams->displayName) wcscpy_s(tdmParams->displayName, sizeof(tdmParams->displayName) / sizeof(tdmParams->displayName[0]), displayName);
tdmParams->mode = *mode; tdmParams->mode = *mode;
HANDLE tdmThread = CreateThread(NULL, 0, TestDisplayModeThread, tdmParams, 0, NULL); HANDLE tdmThread = CreateThread(NULL, 0, TestDisplayModeThread, tdmParams, 0, NULL);
if (tdmThread) CloseHandle(tdmThread); if (tdmThread) CloseHandle(tdmThread);

View File

@ -14,6 +14,6 @@ BOOL DisplayModeEquals(const DISPLAY_MODE* a, const DISPLAY_MODE* b);
DISPLAY_MODE GetModeFromCB(HWND hComboBox); DISPLAY_MODE GetModeFromCB(HWND hComboBox);
// returns the result of the ChangeDisplaySettings call that this results in. // 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); void TestDisplayMode(HWND hDlg, LPCWSTR displayName, DISPLAY_MODE* mode);

View File

@ -158,12 +158,12 @@ static INT_PTR CALLBACK PrefsDialogProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPA
} }
case IDC_BUTTON_TEST_BATT: { case IDC_BUTTON_TEST_BATT: {
DISPLAY_MODE mode = GetModeFromCB(hComboBatt); DISPLAY_MODE mode = GetModeFromCB(hComboBatt);
TestDisplayMode(hDlg, &mode); TestDisplayMode(hDlg, NULL, &mode);
return TRUE; return TRUE;
} }
case IDC_BUTTON_TEST_AC: { case IDC_BUTTON_TEST_AC: {
DISPLAY_MODE mode = GetModeFromCB(hComboAC); DISPLAY_MODE mode = GetModeFromCB(hComboAC);
TestDisplayMode(hDlg, &mode); TestDisplayMode(hDlg, NULL, &mode);
return TRUE; return TRUE;
} }
break; break;
@ -222,7 +222,7 @@ static LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM l
if (GetSystemPowerStatus(&powerStatus) && if (GetSystemPowerStatus(&powerStatus) &&
(DisplayModeEquals(&currentMode, &userPrefs.modeBatt) || DisplayModeEquals(&currentMode, &userPrefs.modeAC))) (DisplayModeEquals(&currentMode, &userPrefs.modeBatt) || DisplayModeEquals(&currentMode, &userPrefs.modeAC)))
{ {
ChangeDisplayMode(powerStatus.ACLineStatus ? &userPrefs.modeAC : &userPrefs.modeBatt, CDS_UPDATEREGISTRY); ChangeDisplayMode(NULL, powerStatus.ACLineStatus ? &userPrefs.modeAC : &userPrefs.modeBatt, CDS_UPDATEREGISTRY);
} }
} }
break; break;