45#define GET_PROC(func) \
46 p ## func = (void*)GetProcAddress(hdll, #func); \
48 trace("GetProcAddress(%s) failed\n", #func);
54 GET_PROC(GetDisplayConfigBufferSizes)
68 char *primary = (
char *)
lparam;
85 char video_value[128];
110 ok(!
ls,
"#%d: failed to open registry, error: %#x\n",
index,
ls);
113 memset(video_value, 0,
sizeof(video_value));
114 size =
sizeof(video_value);
116 ok(!
ls,
"#%d: failed to get registry value, error: %#x\n",
index,
ls);
122 ok(
sscanf(
device->DeviceKey,
"\\Registry\\Machine\\System\\CurrentControlSet\\Control\\Video\\%[^\\]\\%04d",
buffer, &
number) == 2,
123 "#%d: wrong DeviceKey %s\n",
index,
device->DeviceKey);
128 length > 0,
"#%d: expect DeviceString not empty\n",
index);
148 if (
flags & EDD_GET_DEVICE_INTERFACE_NAME)
150 sscanf(
device->DeviceID,
"PCI\\VEN_%04X&DEV_%04X&SUBSYS_%08X&REV_%02X",
151 &vendor_id, &device_id, &subsys_id, &revision_id) == 4,
156 sscanf(
device->DeviceID,
"PCI\\VEN_%04X&DEV_%04X&SUBSYS_%08X&REV_%02X", &vendor_id, &device_id, &subsys_id,
157 &revision_id) == 4,
"#%d: wrong DeviceID %s\n",
index,
device->DeviceID);
164 static const char device_id_prefix[] =
"MONITOR\\Default_Monitor\\{4d36e96e-e325-11ce-bfc1-08002be10318}\\";
165 static const char device_key_prefix[] =
"\\Registry\\Machine\\System\\CurrentControlSet\\Control\\Class"
166 "\\{4d36e96e-e325-11ce-bfc1-08002be10318}\\";
167 char monitor_name[32];
174 lstrcpyA(monitor_name, adapter_name);
175 sprintf(monitor_name +
strlen(monitor_name),
"\\Monitor%d", monitor_index);
176 ok(!
strcmp(monitor_name,
device->DeviceName),
"#%d: expect %s, got %s\n", monitor_index, monitor_name,
device->DeviceName);
179 ok(
strlen(
device->DeviceString) > 0,
"#%d: expect DeviceString not empty\n", monitor_index);
182 if (adapter_index == 0 && monitor_index == 0)
190 if (
flags & EDD_GET_DEVICE_INTERFACE_NAME)
195 sscanf(
device->DeviceID,
"\\\\?\\DISPLAY#Default_Monitor#%[^#]#{e6f07b5f-ee97-4a90-b076-33f57bf4eaa7}",
buffer) == 1 ||
198 "#%d: wrong DeviceID : %s\n", monitor_index,
device->DeviceID);
206 "#%d wrong DeviceID : %s\n", monitor_index,
device->DeviceID);
213 "#%d wrong DeviceKey : %s\n", monitor_index,
device->DeviceKey);
218 static const DWORD flags[] = {0, EDD_GET_DEVICE_INTERFACE_NAME};
220 char primary_device_name[32];
221 char primary_monitor_device_name[32];
222 char adapter_name[32];
229 if (!pEnumDisplayDevicesA)
231 win_skip(
"EnumDisplayDevicesA is not available\n");
237 ret = pEnumDisplayDevicesA(
"\\\\.\\DISPLAY", 0, &dd, 0);
238 ok(!
ret,
"Expect failure\n");
242 for (adapter_index = 0; pEnumDisplayDevicesA(
NULL, adapter_index, &dd,
flags[flag_index]); adapter_index++)
246 if (
sscanf(adapter_name,
"\\\\.\\DISPLAYV%d", &
number) == 1)
254 for (monitor_index = 0; pEnumDisplayDevicesA(adapter_name, monitor_index, &dd,
flags[flag_index]);
263 if (!pEnumDisplayMonitors || !pGetMonitorInfoA)
265 win_skip(
"EnumDisplayMonitors or GetMonitorInfoA are not available\n");
269 ret = pEnumDisplayDevicesA(
NULL, 0, &dd, 0);
270 ok(
ret,
"Expect success\n");
273 primary_monitor_device_name[0] = 0;
275 ok(
ret,
"EnumDisplayMonitors failed\n");
276 ok(!
strcmp(primary_monitor_device_name, primary_device_name),
277 "monitor device name %s, device name %s\n", primary_monitor_device_name,
278 primary_device_name);
316 if (!pChangeDisplaySettingsExA)
318 win_skip(
"ChangeDisplaySettingsExA is not available\n");
331 "ChangeDisplaySettingsA returned %d, expected DISP_CHANGE_SUCCESSFUL\n",
res);
333 "ChangeDisplaySettingsA didn't reset dmDriverExtra to 0\n");
339 "ChangeDisplaySettingsExW returned %d, expected DISP_CHANGE_SUCCESSFUL\n",
res);
340 ok(dm.
dmDriverExtra == 1,
"ChangeDisplaySettingsExA shouldn't reset dmDriverExtra to 0\n");
342 memset(&dmW, 0,
sizeof(dmW));
353 "ChangeDisplaySettingsW returned %d, expected DISP_CHANGE_SUCCESSFUL\n",
res);
354 ok(dmW.
dmDriverExtra == 0,
"ChangeDisplaySettingsW didn't reset dmDriverExtra to 0\n");
363 "ChangeDisplaySettingsExW returned %d, expected DISP_CHANGE_SUCCESSFUL\n",
res);
364 ok(dmW.
dmDriverExtra == 1,
"ChangeDisplaySettingsExW shouldn't reset dmDriverExtra to 0\n");
370 memset(&dm, 0,
sizeof(dm));
377 "ChangeDisplaySettingsExA returned unexpected %d\n",
res);
379 memset(&dmW, 0,
sizeof(dmW));
388 "ChangeDisplaySettingsExW returned %d\n",
res);
390 memset(&dm, 0,
sizeof(dm));
405 "Unexpected ChangeDisplaySettingsEx() return code for resolution[%d]: %d\n",
i,
res);
490 if (!pMonitorFromPoint || !pMonitorFromWindow || !pMonitorFromRect)
492 win_skip(
"MonitorFromPoint, MonitorFromWindow, or MonitorFromRect is not available\n");
497 primary = pMonitorFromPoint(
pt, MONITOR_DEFAULTTOPRIMARY );
498 ok( primary != 0,
"couldn't get primary monitor\n" );
500 monitor = pMonitorFromWindow( 0, MONITOR_DEFAULTTONULL );
501 ok( !monitor,
"got %p, should not get a monitor for an invalid window\n", monitor );
502 monitor = pMonitorFromWindow( 0, MONITOR_DEFAULTTOPRIMARY );
503 ok( monitor == primary,
"got %p, should get primary %p for MONITOR_DEFAULTTOPRIMARY\n", monitor, primary );
504 monitor = pMonitorFromWindow( 0, MONITOR_DEFAULTTONEAREST );
505 ok( monitor == primary,
"got %p, should get primary %p for MONITOR_DEFAULTTONEAREST\n", monitor, primary );
508 monitor = pMonitorFromRect( &rc, MONITOR_DEFAULTTONULL );
509 ok( monitor == primary,
"got %p, should get primary %p\n", monitor, primary );
511 monitor = pMonitorFromRect( &rc, MONITOR_DEFAULTTOPRIMARY );
512 ok( monitor == primary,
"got %p, should get primary %p\n", monitor, primary );
514 monitor = pMonitorFromRect( &rc, MONITOR_DEFAULTTONEAREST );
515 ok( monitor == primary,
"got %p, should get primary %p\n", monitor, primary );
519 monitor = pMonitorFromRect( &rc, MONITOR_DEFAULTTONULL );
520 ok( monitor == primary,
"got %p, should get primary %p\n", monitor, primary );
524 monitor = pMonitorFromRect( &rc, MONITOR_DEFAULTTONULL );
525 ok( monitor == primary,
"got %p, should get primary %p\n", monitor, primary );
529 monitor = pMonitorFromRect( &rc, MONITOR_DEFAULTTONULL );
530 ok( monitor != primary,
"got primary %p\n", monitor );
532 if (!pGetMonitorInfoA)
534 win_skip(
"GetMonitorInfoA is not available\n");
540 monitor = pMonitorFromRect( &rc, MONITOR_DEFAULTTONULL );
542 while (monitor !=
NULL)
544 ok( monitor != primary,
"got primary %p\n", monitor );
547 ret = pGetMonitorInfoA( monitor, &
mi );
548 ok(
ret,
"GetMonitorInfo failed\n" );
550 monitor = pMonitorFromRect( &rc, MONITOR_DEFAULTTONULL );
554 monitor = pMonitorFromWindow( 0, MONITOR_DEFAULTTOPRIMARY );
559 ret = pGetMonitorInfoA( monitor, &
mi );
560 ok(
ret == testdatami[
i].
ret,
"GetMonitorInfo returned wrong value\n" );
562 ok( (
mi.
dwFlags & MONITORINFOF_PRIMARY),
"MONITORINFOF_PRIMARY flag isn't set\n" );
564 ok( !(
mi.
dwFlags & MONITORINFOF_PRIMARY),
"MONITORINFOF_PRIMARY flag is set\n" );
566 memset( &miexw, 0,
sizeof(miexw) );
567 miexw.
cbSize = testdatamiexw[
i].cbSize;
569 ok(
ret == testdatamiexw[
i].
ret,
"GetMonitorInfo returned wrong value\n" );
571 ok( (miexw.
dwFlags & MONITORINFOF_PRIMARY),
"MONITORINFOF_PRIMARY flag isn't set\n" );
573 ok( !(miexw.
dwFlags & MONITORINFOF_PRIMARY),
"MONITORINFOF_PRIMARY flag is set\n" );
579 memset( &miexa, 0,
sizeof(miexa) );
580 miexa.
cbSize = testdatamiexa[
i].cbSize;
582 ok(
ret == testdatamiexa[
i].
ret,
"GetMonitorInfo returned wrong value\n" );
584 ok( (miexa.
dwFlags & MONITORINFOF_PRIMARY),
"MONITORINFOF_PRIMARY flag isn't set\n" );
586 ok( !(miexa.
dwFlags & MONITORINFOF_PRIMARY),
"MONITORINFOF_PRIMARY flag is set\n" );
592 memset( &miexw, 0,
sizeof(miexw) );
593 miexw.
cbSize = testdatamiexw[
i].cbSize;
595 ok(
ret == testdatamiexw[
i].
ret,
"GetMonitorInfo returned wrong value\n" );
597 ok( (miexw.
dwFlags & MONITORINFOF_PRIMARY),
"MONITORINFOF_PRIMARY flag isn't set\n" );
599 ok( !(miexw.
dwFlags & MONITORINFOF_PRIMARY),
"MONITORINFOF_PRIMARY flag is set\n" );
604 monitor = pMonitorFromRect( &rc, MONITOR_DEFAULTTONULL );
605 ok( monitor ==
NULL,
"got %p\n", monitor );
607 monitor = pMonitorFromRect( &rc, MONITOR_DEFAULTTOPRIMARY );
608 ok( monitor == primary,
"got %p, should get primary %p\n", monitor, primary );
610 monitor = pMonitorFromRect( &rc, MONITOR_DEFAULTTONEAREST );
611 ok( monitor == nearest,
"got %p, should get nearest %p\n", monitor, nearest );
621 ok(
ret,
"GetMonitorInfo failed\n");
634 RECT rc_work, rc_normal;
639 if (!pEnumDisplayMonitors || !pGetMonitorInfoA)
641 win_skip(
"EnumDisplayMonitors or GetMonitorInfoA are not available\n");
647 ok(!
ret &&
hmon != 0,
"Failed to find primary monitor\n");
653 ok(
mi.
dwFlags & MONITORINFOF_PRIMARY,
"not a primary monitor\n");
662 hwnd =
CreateWindowExA(0,
"static",
NULL,
WS_OVERLAPPEDWINDOW|
WS_VISIBLE,100,100,10,10,0,0,0,
NULL);
663 ok(
hwnd != 0,
"CreateWindowEx failed\n");
666 ok(
ret,
"GetWindowRect failed\n");
671 ok(
ret,
"GetWindowPlacement failed\n");
685 ok(
ret,
"GetWindowPlacement failed\n");
698 if (!pGetDisplayConfigBufferSizes)
700 win_skip(
"GetDisplayConfigBufferSizes is not supported\n");
715 ok(modes == 100,
"got %u\n", modes);
720 ok(
paths > 0 && modes > 0,
"got %u, %u\n",
paths, modes);
735 ret = pGetDisplayConfigBufferSizes(0,
NULL, &modes);
737 ok(modes == 100,
"got %u\n", modes);
740 ret = pGetDisplayConfigBufferSizes(0, &
paths, &modes);
742 ok((modes == 0 || modes == 100) &&
paths == 0,
"got %u, %u\n", modes,
paths);
int strcmp(const char *String1, const char *String2)
ACPI_SIZE strlen(const char *String)
static const char * wine_dbgstr_rect(const RECT *prc)
void ls(int argc, const char *argv[])
#define RegCloseKey(hKey)
static LSTATUS(WINAPI *pRegDeleteTreeW)(HKEY
LONG WINAPI RegOpenKeyExA(_In_ HKEY hKey, _In_ LPCSTR lpSubKey, _In_ DWORD ulOptions, _In_ REGSAM samDesired, _Out_ PHKEY phkResult)
LONG WINAPI RegQueryValueExA(_In_ HKEY hkeyorg, _In_ LPCSTR name, _In_ LPDWORD reserved, _Out_opt_ LPDWORD type, _Out_opt_ LPBYTE data, _Inout_opt_ LPDWORD count)
#define ERROR_CALL_NOT_IMPLEMENTED
#define ERROR_INVALID_PARAMETER
#define ERROR_NOT_SUPPORTED
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
int WINAPI lstrcmpiA(LPCSTR str1, LPCSTR str2)
GLdouble GLdouble GLdouble r
GLint GLint GLsizei width
GLuint GLsizei GLsizei * length
GLsizei const GLuint * paths
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
_Check_return_ _CRTIMP int __cdecl sscanf(_In_z_ const char *_Src, _In_z_ _Scanf_format_string_ const char *_Format,...)
LPSTR WINAPI lstrcpyA(LPSTR lpString1, LPCSTR lpString2)
#define sprintf(buf, format,...)
static unsigned int number
#define todo_wine_if(is_todo)
static BOOL CALLBACK find_primary_mon(HMONITOR hmon, HDC hdc, LPRECT rc, LPARAM lp)
static void test_enumdisplaydevices(void)
static void test_ChangeDisplaySettingsEx(void)
static BOOL CALLBACK monitor_enum_proc(HMONITOR hmon, HDC hdc, LPRECT lprc, LPARAM lparam)
static UINT32 UINT32 *static void init_function_pointers(void)
static void test_enumdisplaydevices_monitor(int adapter_index, int monitor_index, const char *adapter_name, const DISPLAY_DEVICEA *device, DWORD flags)
static void test_monitors(void)
static const struct vid_mode vid_modes_test[]
static void test_display_config(void)
static void test_enumdisplaydevices_adapter(int index, const DISPLAY_DEVICEA *device, DWORD flags)
static void test_work_area(void)
HMONITOR WINAPI MonitorFromPoint(POINT, DWORD)
HMONITOR WINAPI MonitorFromRect(LPCRECT, DWORD)
HMONITOR WINAPI MonitorFromWindow(HWND, DWORD)
#define WS_OVERLAPPEDWINDOW
DWORD WINAPI GetVersion()
const char * winetest_platform
LONG WINAPI ChangeDisplaySettingsExW(LPCWSTR lpszDeviceName, LPDEVMODEW lpDevMode, HWND hwnd, DWORD dwflags, LPVOID lParam)
BOOL WINAPI EnumDisplayDevicesA(LPCSTR lpDevice, DWORD iDevNum, PDISPLAY_DEVICEA lpDisplayDevice, DWORD dwFlags)
BOOL WINAPI EnumDisplaySettingsA(LPCSTR lpszDeviceName, DWORD iModeNum, LPDEVMODEA lpDevMode)
LONG WINAPI ChangeDisplaySettingsW(LPDEVMODEW lpDevMode, DWORD dwflags)
LONG WINAPI ChangeDisplaySettingsExA(LPCSTR lpszDeviceName, LPDEVMODEA lpDevMode, HWND hwnd, DWORD dwflags, LPVOID lParam)
LONG WINAPI ChangeDisplaySettingsA(LPDEVMODEA lpDevMode, DWORD dwflags)
DWORD WINAPI GetLastError(void)
#define DM_DISPLAYFREQUENCY
HDC WINAPI CreateDCA(_In_opt_ LPCSTR pszDriver, _In_opt_ LPCSTR pszDevice, _In_opt_ LPCSTR pszOutput, _In_opt_ const DEVMODEA *pdmInit)
#define DISPLAY_DEVICE_PRIMARY_DEVICE
#define DISPLAY_DEVICE_ATTACHED_TO_DESKTOP
BOOL WINAPI DeleteDC(_In_ HDC)
#define DISPLAY_DEVICE_ACTIVE
#define DISPLAY_DEVICE_ATTACHED
#define HKEY_LOCAL_MACHINE
#define SM_CYVIRTUALSCREEN
HWND WINAPI CreateWindowExA(_In_ DWORD dwExStyle, _In_opt_ LPCSTR lpClassName, _In_opt_ LPCSTR lpWindowName, _In_ DWORD dwStyle, _In_ int X, _In_ int Y, _In_ int nWidth, _In_ int nHeight, _In_opt_ HWND hWndParent, _In_opt_ HMENU hMenu, _In_opt_ HINSTANCE hInstance, _In_opt_ LPVOID lpParam)
BOOL WINAPI GetClipCursor(_Out_ LPRECT)
BOOL WINAPI GetWindowPlacement(_In_ HWND, _Inout_ WINDOWPLACEMENT *)
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
LONG WINAPI SetWindowLongA(_In_ HWND, _In_ int, _In_ LONG)
#define DISP_CHANGE_BADMODE
BOOL WINAPI ClipCursor(_In_opt_ LPCRECT)
#define DISP_CHANGE_SUCCESSFUL
struct tagMONITORINFOEXA MONITORINFOEXA
BOOL WINAPI IsRectEmpty(_In_ LPCRECT)
BOOL WINAPI EnumDisplayMonitors(_In_opt_ HDC, _In_opt_ LPCRECT, _In_ MONITORENUMPROC, _In_ LPARAM)
#define DISP_CHANGE_BADPARAM
struct tagMONITORINFOEXW MONITORINFOEXW
#define DISP_CHANGE_FAILED
#define SM_CXVIRTUALSCREEN
#define ENUM_CURRENT_SETTINGS
BOOL WINAPI GetMonitorInfoA(_In_ HMONITOR, _Inout_ LPMONITORINFO)
_In_ int _Inout_ LPRECT lprc
struct tagMONITORINFO MONITORINFO
BOOL WINAPI SystemParametersInfoA(_In_ UINT uiAction, _In_ UINT uiParam, _Inout_opt_ PVOID pvParam, _In_ UINT fWinIni)
BOOL WINAPI OffsetRect(_Inout_ LPRECT, _In_ int, _In_ int)
BOOL WINAPI GetMonitorInfoW(_In_ HMONITOR, _Inout_ LPMONITORINFO)
#define SM_XVIRTUALSCREEN
#define DISP_CHANGE_RESTART
BOOL WINAPI DestroyWindow(_In_ HWND)
BOOL WINAPI EqualRect(_In_ LPCRECT, _In_ LPCRECT)
int WINAPI GetSystemMetrics(_In_ int)
#define SM_YVIRTUALSCREEN
BOOL WINAPI SetRect(_Out_ LPRECT, _In_ int, _In_ int, _In_ int, _In_ int)