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 /* FIXME: test for HWND_TOP, etc...*/
13 static int get_iwnd(HWND hWnd
)
15 if(hWnd
== hWnd1
) return 1;
16 else if(hWnd
== hWnd2
) return 2;
20 LRESULT CALLBACK
SysParamsTestProc(HWND hWnd
, UINT message
, WPARAM wParam
, LPARAM lParam
)
22 int iwnd
= get_iwnd(hWnd
);
24 if(message
> WM_USER
|| !iwnd
|| IsDWmMsg(message
) || IseKeyMsg(message
))
25 return DefWindowProc(hWnd
, message
, wParam
, lParam
);
32 case WM_WINDOWPOSCHANGING
:
33 case WM_WINDOWPOSCHANGED
:
35 WINDOWPOS
* pwp
= (WINDOWPOS
*)lParam
;
36 ok(wParam
==0,"expected wParam=0\n");
37 RECORD_MESSAGE(iwnd
, message
, SENT
, get_iwnd(pwp
->hwndInsertAfter
), pwp
->flags
);
41 RECORD_MESSAGE(iwnd
, message
, SENT
, 0,0);
43 return DefWindowProc(hWnd
, message
, wParam
, lParam
);
46 static void FlushMessages()
50 while (PeekMessage( &msg
, 0, 0, 0, PM_REMOVE
))
52 int iwnd
= get_iwnd(msg
.hwnd
);
53 if(!(msg
.message
> WM_USER
|| !iwnd
|| IsDWmMsg(msg
.message
) || IseKeyMsg(msg
.message
)))
54 RECORD_MESSAGE(iwnd
, msg
.message
, POST
,0,0);
55 DispatchMessageA( &msg
);
59 MSG_ENTRY NcMetricsChange_chain
[]={
60 {2,WM_WINDOWPOSCHANGING
, SENT
, 0, SWP_FRAMECHANGED
|SWP_NOACTIVATE
|SWP_NOCOPYBITS
|SWP_NOMOVE
|SWP_NOZORDER
|SWP_NOREDRAW
},
63 {2,WM_WINDOWPOSCHANGED
, SENT
, 0, SWP_FRAMECHANGED
|SWP_NOACTIVATE
|SWP_NOCOPYBITS
|SWP_NOMOVE
|SWP_NOZORDER
|SWP_NOREDRAW
| SWP_NOCLIENTSIZE
| SWP_NOCLIENTMOVE
| SWP_NOSIZE
},
64 {1,WM_WINDOWPOSCHANGING
, SENT
, 0, SWP_FRAMECHANGED
|SWP_NOACTIVATE
|SWP_NOCOPYBITS
|SWP_NOMOVE
|SWP_NOZORDER
|SWP_NOREDRAW
},
67 {1,WM_WINDOWPOSCHANGED
, SENT
, 0, SWP_FRAMECHANGED
|SWP_NOACTIVATE
|SWP_NOCOPYBITS
|SWP_NOMOVE
|SWP_NOZORDER
|SWP_NOREDRAW
| SWP_NOCLIENTSIZE
| SWP_NOCLIENTMOVE
| SWP_NOSIZE
},
70 MSG_ENTRY NcMetricsChange1_chain
[]={
71 {2,WM_WINDOWPOSCHANGING
, SENT
, 0, SWP_FRAMECHANGED
|SWP_NOACTIVATE
|SWP_NOCOPYBITS
|SWP_NOMOVE
|SWP_NOZORDER
|SWP_NOREDRAW
},
74 {2,WM_WINDOWPOSCHANGED
, SENT
, 0, SWP_FRAMECHANGED
|SWP_NOACTIVATE
|SWP_NOCOPYBITS
|SWP_NOMOVE
|SWP_NOZORDER
|SWP_NOREDRAW
| SWP_NOCLIENTSIZE
| SWP_NOCLIENTMOVE
| SWP_NOSIZE
},
75 {1,WM_WINDOWPOSCHANGING
, SENT
, 0, SWP_FRAMECHANGED
|SWP_NOACTIVATE
|SWP_NOCOPYBITS
|SWP_NOMOVE
|SWP_NOZORDER
|SWP_NOREDRAW
},
78 {1,WM_WINDOWPOSCHANGED
, SENT
, 0, SWP_FRAMECHANGED
|SWP_NOACTIVATE
|SWP_NOCOPYBITS
|SWP_NOMOVE
|SWP_NOZORDER
|SWP_NOREDRAW
| SWP_NOCLIENTSIZE
| SWP_NOCLIENTMOVE
| SWP_NOSIZE
},
83 MSG_ENTRY CaptionHeight_chain
[]={
84 {2,WM_WINDOWPOSCHANGING
, SENT
, 0, SWP_FRAMECHANGED
|SWP_NOACTIVATE
|SWP_NOCOPYBITS
|SWP_NOMOVE
|SWP_NOZORDER
|SWP_NOREDRAW
},
87 {2,WM_WINDOWPOSCHANGED
, SENT
, 0, SWP_FRAMECHANGED
|SWP_NOACTIVATE
|SWP_NOCOPYBITS
|SWP_NOMOVE
|SWP_NOZORDER
|SWP_NOREDRAW
| SWP_NOCLIENTSIZE
},
89 {1,WM_WINDOWPOSCHANGING
, SENT
, 0, SWP_FRAMECHANGED
|SWP_NOACTIVATE
|SWP_NOCOPYBITS
|SWP_NOMOVE
|SWP_NOZORDER
|SWP_NOREDRAW
},
92 {1,WM_WINDOWPOSCHANGED
, SENT
, 0, SWP_FRAMECHANGED
|SWP_NOACTIVATE
|SWP_NOCOPYBITS
|SWP_NOMOVE
|SWP_NOZORDER
|SWP_NOREDRAW
| SWP_NOCLIENTSIZE
},
96 static void Test_NonClientMetrics()
98 NONCLIENTMETRICS NonClientMetrics
;
100 /* WARNING: this test requires themes and dwm to be disabled */
104 /* Retrieve th non client metrics */
105 NonClientMetrics
.cbSize
= sizeof(NONCLIENTMETRICS
);
106 SystemParametersInfo(SPI_GETNONCLIENTMETRICS
, sizeof(NONCLIENTMETRICS
), &NonClientMetrics
, 0);
108 COMPARE_CACHE(empty_chain
);
110 /* Set the non client metric without making any change */
111 SystemParametersInfo(SPI_SETNONCLIENTMETRICS
, sizeof(NONCLIENTMETRICS
), &NonClientMetrics
, 0);
113 COMPARE_CACHE(NcMetricsChange_chain
);
115 /* Set the same metrics again with the SPIF_SENDCHANGE param */
116 SystemParametersInfo(SPI_SETNONCLIENTMETRICS
, sizeof(NONCLIENTMETRICS
), &NonClientMetrics
, SPIF_SENDCHANGE
|SPIF_UPDATEINIFILE
);
118 COMPARE_CACHE(NcMetricsChange1_chain
);
120 /* Slightly change the caption height */
121 NonClientMetrics
.iCaptionHeight
+= 1;
122 SystemParametersInfo(SPI_SETNONCLIENTMETRICS
, sizeof(NONCLIENTMETRICS
), &NonClientMetrics
, 0);
124 COMPARE_CACHE(CaptionHeight_chain
);
126 /* Restore the original caption height */
127 NonClientMetrics
.iCaptionHeight
-= 1;
128 SystemParametersInfo(SPI_SETNONCLIENTMETRICS
, sizeof(NONCLIENTMETRICS
), &NonClientMetrics
, 0);
130 COMPARE_CACHE(CaptionHeight_chain
);
133 static void Test_MouseSpeed()
135 ULONG ulMouseSpeed
, temp
;
138 ret
= SystemParametersInfo(SPI_GETMOUSESPEED
, 0, &ulMouseSpeed
, 0);
139 ok(ret
, "SystemParametersInfo failed\n");
140 ok(ulMouseSpeed
>= 1 && ulMouseSpeed
<=20, "Wrong mouse speed (%d)\n", (int)ulMouseSpeed
);
143 ret
= SystemParametersInfo(SPI_SETMOUSESPEED
, 0, (PVOID
)temp
, SPIF_SENDCHANGE
| SPIF_UPDATEINIFILE
);
144 ok(ret
, "SystemParametersInfo failed\n");
145 ret
= SystemParametersInfo(SPI_GETMOUSESPEED
, 0, &temp
, 0);
146 ok(ret
, "SystemParametersInfo failed\n");
147 ok(temp
== 1, "SPI_GETMOUSESPEED did not get value set by SPI_SETMOUSESPEED (%d instead of 1)\n", (int)temp
);
150 ret
= SystemParametersInfo(SPI_SETMOUSESPEED
, 0, (PVOID
)temp
, SPIF_SENDCHANGE
| SPIF_UPDATEINIFILE
);
151 ok(ret
, "SystemParametersInfo failed\n");
152 ret
= SystemParametersInfo(SPI_GETMOUSESPEED
, 0, &temp
, 0);
153 ok(ret
, "SystemParametersInfo failed\n");
154 ok(temp
== 20, "SPI_GETMOUSESPEED did not get value set by SPI_SETMOUSESPEED (%d instead of 20)\n", (int)temp
);
157 ret
= SystemParametersInfo(SPI_SETMOUSESPEED
, 0, (PVOID
)temp
, SPIF_SENDCHANGE
| SPIF_UPDATEINIFILE
);
158 ok(!ret
, "expected SystemParametersInfo to fail\n");
159 ret
= SystemParametersInfo(SPI_GETMOUSESPEED
, 0, &temp
, 0);
160 ok(ret
, "SystemParametersInfo failed\n");
161 ok(temp
== 20, "SPI_GETMOUSESPEED got unexpected value (%d instead of 20)\n", (int)temp
);
164 ret
= SystemParametersInfo(SPI_SETMOUSESPEED
, 0, (PVOID
)temp
, SPIF_SENDCHANGE
| SPIF_UPDATEINIFILE
);
165 ok(!ret
, "expected SystemParametersInfo to fail\n");
166 ret
= SystemParametersInfo(SPI_GETMOUSESPEED
, 0, &temp
, 0);
167 ok(ret
, "SystemParametersInfo failed\n");
168 ok(temp
== 20, "SPI_GETMOUSESPEED got unexpected value (%d instead of 20)\n", (int)temp
);
170 ret
= SystemParametersInfo(SPI_SETMOUSESPEED
, 0, (PVOID
)ulMouseSpeed
, SPIF_SENDCHANGE
| SPIF_UPDATEINIFILE
);
171 ok(ret
, "SystemParametersInfo failed\n");
174 START_TEST(SystemParametersInfo
)
176 RegisterSimpleClass(SysParamsTestProc
, L
"sysparamstest");
177 hWnd1
= CreateWindowW(L
"sysparamstest", L
"sysparamstest", WS_OVERLAPPEDWINDOW
,
178 20, 20, 300, 300, NULL
, NULL
, 0, NULL
);
180 hWnd2
= CreateWindowW(L
"sysparamstest", L
"sysparamstest", WS_OVERLAPPEDWINDOW
,
181 200, 200, 300, 300, NULL
, NULL
, 0, NULL
);
183 Test_NonClientMetrics();
186 DestroyWindow(hWnd1
);
187 DestroyWindow(hWnd2
);
188 UnregisterClassW(L
"sysparamstest", 0);