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.
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(&params->mode, CDS_FULLSCREEN);
EnumDisplaySettings(params->displayName, ENUM_CURRENT_SETTINGS, &originalMode);
ChangeDisplayMode(params->displayName, &params->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);

View File

@ -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);
void TestDisplayMode(HWND hDlg, LPCWSTR displayName, DISPLAY_MODE* mode);

View File

@ -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(&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;