Changeset 70211 in vbox for trunk/src/VBox/Additions
- Timestamp:
- Dec 19, 2017 2:52:38 AM (7 years ago)
- svn:sync-xref-src-repo-rev:
- 119795
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Additions/common/VBoxControl/VBoxControl.cpp
r70061 r70211 239 239 #if defined(RT_OS_WINDOWS) && !defined(VBOX_CONTROL_TEST) 240 240 241 LONG (WINAPI * gpfnChangeDisplaySettingsEx)(LPCTSTR lpszDeviceName, LPDEVMODE lpDevMode, HWND hwnd, DWORD dwflags, LPVOID lParam); 241 decltype(ChangeDisplaySettingsExA) *g_pfnChangeDisplaySettingsExA; 242 decltype(ChangeDisplaySettings) *g_pfnChangeDisplaySettingsA; 243 decltype(EnumDisplaySettingsA) *g_pfnEnumDisplaySettingsA; 242 244 243 245 static unsigned nextAdjacentRectXP(RECTL const *paRects, unsigned cRects, unsigned iRect) … … 487 489 RT_BZERO(&paDeviceModes[DevNum], sizeof(DEVMODE)); 488 490 paDeviceModes[DevNum].dmSize = sizeof(DEVMODE); 489 if (! EnumDisplaySettings((LPSTR)DisplayDevice.DeviceName, ENUM_REGISTRY_SETTINGS, &paDeviceModes[DevNum]))491 if (!g_pfnEnumDisplaySettingsA((LPSTR)DisplayDevice.DeviceName, ENUM_REGISTRY_SETTINGS, &paDeviceModes[DevNum])) 490 492 { 491 493 Log(("EnumDisplaySettings err %d\n", GetLastError())); … … 542 544 RT_ZERO(tempDevMode); 543 545 tempDevMode.dmSize = sizeof(DEVMODE); 544 EnumDisplaySettings(NULL, 0xffffff, &tempDevMode);546 g_pfnEnumDisplaySettingsA(NULL, 0xffffff, &tempDevMode); 545 547 546 548 /* Assign the new rectangles to displays. */ … … 560 562 paDeviceModes[i].dmBitsPerPel = BitsPerPixel; 561 563 } 562 Log(("calling pfnChangeDisplaySettingsEx % x\n", gpfnChangeDisplaySettingsEx));563 g pfnChangeDisplaySettingsEx((LPSTR)paDisplayDevices[i].DeviceName,564 &paDeviceModes[i], NULL, CDS_NORESET | CDS_UPDATEREGISTRY, NULL);565 Log(("ChangeDisplaySettings position err %d\n", GetLastError()));564 Log(("calling pfnChangeDisplaySettingsEx %p\n", g_pfnChangeDisplaySettingsExA)); 565 g_pfnChangeDisplaySettingsExA((LPSTR)paDisplayDevices[i].DeviceName, 566 &paDeviceModes[i], NULL, CDS_NORESET | CDS_UPDATEREGISTRY, NULL); 567 Log(("ChangeDisplaySettingsEx position err %d\n", GetLastError())); 566 568 } 567 569 568 570 /* A second call to ChangeDisplaySettings updates the monitor. */ 569 LONG status = ChangeDisplaySettings(NULL, 0);571 LONG status = g_pfnChangeDisplaySettingsA(NULL, 0); 570 572 Log(("ChangeDisplaySettings update status %d\n", status)); 571 573 if (status == DISP_CHANGE_SUCCESSFUL || status == DISP_CHANGE_BADMODE) … … 594 596 scr = atoi(argv[3]); 595 597 596 HMODULE hUser = GetModuleHandle("user32.dll"); 597 if (hUser) 598 { 599 *(uintptr_t *)&gpfnChangeDisplaySettingsEx = (uintptr_t)GetProcAddress(hUser, "ChangeDisplaySettingsExA"); 600 Log(("VBoxService: pChangeDisplaySettingsEx = %p\n", gpfnChangeDisplaySettingsEx)); 601 602 if (gpfnChangeDisplaySettingsEx) 598 HMODULE hmodUser = GetModuleHandle("user32.dll"); 599 if (hmodUser) 600 { 601 /* ChangeDisplaySettingsExA was probably added in W2K, whereas ChangeDisplaySettingsA 602 and EnumDisplaySettingsA was added in NT 3.51. */ 603 g_pfnChangeDisplaySettingsExA = (decltype(g_pfnChangeDisplaySettingsExA))GetProcAddress(hmodUser, "ChangeDisplaySettingsExA"); 604 g_pfnChangeDisplaySettingsA = (decltype(g_pfnChangeDisplaySettingsA)) GetProcAddress(hmodUser, "ChangeDisplaySettingsA"); 605 g_pfnEnumDisplaySettingsA = (decltype(g_pfnEnumDisplaySettingsA)) GetProcAddress(hmodUser, "EnumDisplaySettingsA"); 606 607 Log(("VBoxService: g_pfnChangeDisplaySettingsExA=%p g_pfnChangeDisplaySettingsA=%p g_pfnEnumDisplaySettingsA=%p\n", 608 g_pfnChangeDisplaySettingsExA, g_pfnChangeDisplaySettingsA, g_pfnEnumDisplaySettingsA)); 609 610 if ( g_pfnChangeDisplaySettingsExA 611 && g_pfnChangeDisplaySettingsA 612 && g_pfnEnumDisplaySettingsA) 603 613 { 604 614 /* The screen index is 0 based in the ResizeDisplayDevice call. */
Note:
See TracChangeset
for help on using the changeset viewer.