2 * PROJECT: ReactOS API tests
3 * LICENSE: GPL - See COPYING in the top level directory
4 * PURPOSE: Test for SystemParametersInfo function family
5 * PROGRAMMERS: Giannis Adamopoulos
12 #include <undocuser.h>
16 /* FIXME: test for HWND_TOP, etc...*/
17 static int get_iwnd(HWND hWnd
)
19 if(hWnd
== hWnd1
) return 1;
20 else if(hWnd
== hWnd2
) return 2;
24 LRESULT CALLBACK
SysParamsTestProc(HWND hWnd
, UINT message
, WPARAM wParam
, LPARAM lParam
)
26 int iwnd
= get_iwnd(hWnd
);
28 if(message
> WM_USER
|| !iwnd
|| IsDWmMsg(message
) || IseKeyMsg(message
))
29 return DefWindowProc(hWnd
, message
, wParam
, lParam
);
36 case WM_WINDOWPOSCHANGING
:
37 case WM_WINDOWPOSCHANGED
:
39 WINDOWPOS
* pwp
= (WINDOWPOS
*)lParam
;
40 ok(wParam
==0,"expected wParam=0\n");
41 RECOND_MESSAGE(iwnd
, message
, SENT
, get_iwnd(pwp
->hwndInsertAfter
), pwp
->flags
);
45 RECOND_MESSAGE(iwnd
, message
, SENT
, 0,0);
47 return DefWindowProc(hWnd
, message
, wParam
, lParam
);
50 static void FlushMessages()
54 while (PeekMessage( &msg
, 0, 0, 0, PM_REMOVE
))
56 int iwnd
= get_iwnd(msg
.hwnd
);
57 if(!(msg
.message
> WM_USER
|| !iwnd
|| IsDWmMsg(msg
.message
) || IseKeyMsg(msg
.message
)))
58 RECOND_MESSAGE(iwnd
, msg
.message
, POST
,0,0);
59 DispatchMessageA( &msg
);
63 MSG_ENTRY NcMetricsChange_chain
[]={
64 {2,WM_WINDOWPOSCHANGING
, SENT
, 0, SWP_FRAMECHANGED
|SWP_NOACTIVATE
|SWP_NOCOPYBITS
|SWP_NOMOVE
|SWP_NOZORDER
|SWP_NOREDRAW
},
67 {2,WM_WINDOWPOSCHANGED
, SENT
, 0, SWP_FRAMECHANGED
|SWP_NOACTIVATE
|SWP_NOCOPYBITS
|SWP_NOMOVE
|SWP_NOZORDER
|SWP_NOREDRAW
| SWP_NOCLIENTSIZE
| SWP_NOCLIENTMOVE
| SWP_NOSIZE
},
68 {1,WM_WINDOWPOSCHANGING
, SENT
, 0, SWP_FRAMECHANGED
|SWP_NOACTIVATE
|SWP_NOCOPYBITS
|SWP_NOMOVE
|SWP_NOZORDER
|SWP_NOREDRAW
},
71 {1,WM_WINDOWPOSCHANGED
, SENT
, 0, SWP_FRAMECHANGED
|SWP_NOACTIVATE
|SWP_NOCOPYBITS
|SWP_NOMOVE
|SWP_NOZORDER
|SWP_NOREDRAW
| SWP_NOCLIENTSIZE
| SWP_NOCLIENTMOVE
| SWP_NOSIZE
},
74 MSG_ENTRY NcMetricsChange1_chain
[]={
75 {2,WM_WINDOWPOSCHANGING
, SENT
, 0, SWP_FRAMECHANGED
|SWP_NOACTIVATE
|SWP_NOCOPYBITS
|SWP_NOMOVE
|SWP_NOZORDER
|SWP_NOREDRAW
},
78 {2,WM_WINDOWPOSCHANGED
, SENT
, 0, SWP_FRAMECHANGED
|SWP_NOACTIVATE
|SWP_NOCOPYBITS
|SWP_NOMOVE
|SWP_NOZORDER
|SWP_NOREDRAW
| SWP_NOCLIENTSIZE
| SWP_NOCLIENTMOVE
| SWP_NOSIZE
},
79 {1,WM_WINDOWPOSCHANGING
, SENT
, 0, SWP_FRAMECHANGED
|SWP_NOACTIVATE
|SWP_NOCOPYBITS
|SWP_NOMOVE
|SWP_NOZORDER
|SWP_NOREDRAW
},
82 {1,WM_WINDOWPOSCHANGED
, SENT
, 0, SWP_FRAMECHANGED
|SWP_NOACTIVATE
|SWP_NOCOPYBITS
|SWP_NOMOVE
|SWP_NOZORDER
|SWP_NOREDRAW
| SWP_NOCLIENTSIZE
| SWP_NOCLIENTMOVE
| SWP_NOSIZE
},
87 MSG_ENTRY CaptionHeight_chain
[]={
88 {2,WM_WINDOWPOSCHANGING
, SENT
, 0, SWP_FRAMECHANGED
|SWP_NOACTIVATE
|SWP_NOCOPYBITS
|SWP_NOMOVE
|SWP_NOZORDER
|SWP_NOREDRAW
},
91 {2,WM_WINDOWPOSCHANGED
, SENT
, 0, SWP_FRAMECHANGED
|SWP_NOACTIVATE
|SWP_NOCOPYBITS
|SWP_NOMOVE
|SWP_NOZORDER
|SWP_NOREDRAW
| SWP_NOCLIENTSIZE
},
93 {1,WM_WINDOWPOSCHANGING
, SENT
, 0, SWP_FRAMECHANGED
|SWP_NOACTIVATE
|SWP_NOCOPYBITS
|SWP_NOMOVE
|SWP_NOZORDER
|SWP_NOREDRAW
},
96 {1,WM_WINDOWPOSCHANGED
, SENT
, 0, SWP_FRAMECHANGED
|SWP_NOACTIVATE
|SWP_NOCOPYBITS
|SWP_NOMOVE
|SWP_NOZORDER
|SWP_NOREDRAW
| SWP_NOCLIENTSIZE
},
100 static void Test_NonClientMetrics()
102 NONCLIENTMETRICS NonClientMetrics
;
104 /* WARNING: this test requires themes and dwm to be disabled */
108 /* Retrieve th non client metrics */
109 NonClientMetrics
.cbSize
= sizeof(NONCLIENTMETRICS
);
110 SystemParametersInfo(SPI_GETNONCLIENTMETRICS
, sizeof(NONCLIENTMETRICS
), &NonClientMetrics
, 0);
112 COMPARE_CACHE(empty_chain
);
114 /* Set the non client metric without making any change */
115 SystemParametersInfo(SPI_SETNONCLIENTMETRICS
, sizeof(NONCLIENTMETRICS
), &NonClientMetrics
, 0);
117 COMPARE_CACHE(NcMetricsChange_chain
);
119 /* Set the same metrics again with the SPIF_SENDCHANGE param */
120 SystemParametersInfo(SPI_SETNONCLIENTMETRICS
, sizeof(NONCLIENTMETRICS
), &NonClientMetrics
, SPIF_SENDCHANGE
|SPIF_UPDATEINIFILE
);
122 COMPARE_CACHE(NcMetricsChange1_chain
);
124 /* Slightly change the caption height */
125 NonClientMetrics
.iCaptionHeight
+= 1;
126 SystemParametersInfo(SPI_SETNONCLIENTMETRICS
, sizeof(NONCLIENTMETRICS
), &NonClientMetrics
, 0);
128 COMPARE_CACHE(CaptionHeight_chain
);
130 /* Restore the original caption height */
131 NonClientMetrics
.iCaptionHeight
-= 1;
132 SystemParametersInfo(SPI_SETNONCLIENTMETRICS
, sizeof(NONCLIENTMETRICS
), &NonClientMetrics
, 0);
134 COMPARE_CACHE(CaptionHeight_chain
);
137 static void Test_MouseSpeed()
139 ULONG ulMouseSpeed
, temp
;
142 ret
= SystemParametersInfo(SPI_GETMOUSESPEED
, 0, &ulMouseSpeed
, 0);
143 ok(ret
, "SystemParametersInfo failed\n");
144 ok(ulMouseSpeed
>= 1 && ulMouseSpeed
<=20, "Wrong mouse speed (%d)\n", (int)ulMouseSpeed
);
147 ret
= SystemParametersInfo(SPI_SETMOUSESPEED
, 0, (PVOID
)temp
, SPIF_SENDCHANGE
| SPIF_UPDATEINIFILE
);
148 ok(ret
, "SystemParametersInfo failed\n");
149 ret
= SystemParametersInfo(SPI_GETMOUSESPEED
, 0, &temp
, 0);
150 ok(ret
, "SystemParametersInfo failed\n");
151 ok(temp
== 1, "SPI_GETMOUSESPEED did not get value set by SPI_SETMOUSESPEED (%d instead of 1)\n", (int)temp
);
154 ret
= SystemParametersInfo(SPI_SETMOUSESPEED
, 0, (PVOID
)temp
, SPIF_SENDCHANGE
| SPIF_UPDATEINIFILE
);
155 ok(ret
, "SystemParametersInfo failed\n");
156 ret
= SystemParametersInfo(SPI_GETMOUSESPEED
, 0, &temp
, 0);
157 ok(ret
, "SystemParametersInfo failed\n");
158 ok(temp
== 20, "SPI_GETMOUSESPEED did not get value set by SPI_SETMOUSESPEED (%d instead of 20)\n", (int)temp
);
161 ret
= SystemParametersInfo(SPI_SETMOUSESPEED
, 0, (PVOID
)temp
, SPIF_SENDCHANGE
| SPIF_UPDATEINIFILE
);
162 ok(!ret
, "expected SystemParametersInfo to fail\n");
163 ret
= SystemParametersInfo(SPI_GETMOUSESPEED
, 0, &temp
, 0);
164 ok(ret
, "SystemParametersInfo failed\n");
165 ok(temp
== 20, "SPI_GETMOUSESPEED got unexpected value (%d instead of 20)\n", (int)temp
);
168 ret
= SystemParametersInfo(SPI_SETMOUSESPEED
, 0, (PVOID
)temp
, SPIF_SENDCHANGE
| SPIF_UPDATEINIFILE
);
169 ok(!ret
, "expected SystemParametersInfo to fail\n");
170 ret
= SystemParametersInfo(SPI_GETMOUSESPEED
, 0, &temp
, 0);
171 ok(ret
, "SystemParametersInfo failed\n");
172 ok(temp
== 20, "SPI_GETMOUSESPEED got unexpected value (%d instead of 20)\n", (int)temp
);
174 ret
= SystemParametersInfo(SPI_SETMOUSESPEED
, 0, (PVOID
)ulMouseSpeed
, SPIF_SENDCHANGE
| SPIF_UPDATEINIFILE
);
175 ok(ret
, "SystemParametersInfo failed\n");
178 START_TEST(SystemParametersInfo
)
180 RegisterSimpleClass(SysParamsTestProc
, L
"sysparamstest");
181 hWnd1
= CreateWindowW(L
"sysparamstest", L
"sysparamstest", WS_OVERLAPPEDWINDOW
,
182 20, 20, 300, 300, NULL
, NULL
, 0, NULL
);
184 hWnd2
= CreateWindowW(L
"sysparamstest", L
"sysparamstest", WS_OVERLAPPEDWINDOW
,
185 200, 200, 300, 300, NULL
, NULL
, 0, NULL
);
187 Test_NonClientMetrics();
190 DestroyWindow(hWnd1
);
191 DestroyWindow(hWnd2
);
192 UnregisterClassW(L
"sysparamstest", 0);