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
13 #include <undocuser.h>
17 /* FIXME: test for HWND_TOP, etc...*/
18 static int get_iwnd(HWND hWnd
)
20 if(hWnd
== hWnd1
) return 1;
21 else if(hWnd
== hWnd2
) return 2;
25 LRESULT CALLBACK
SysParamsTestProc(HWND hWnd
, UINT message
, WPARAM wParam
, LPARAM lParam
)
27 int iwnd
= get_iwnd(hWnd
);
29 if(message
> WM_USER
|| !iwnd
|| IsDWmMsg(message
) || IseKeyMsg(message
))
30 return DefWindowProc(hWnd
, message
, wParam
, lParam
);
37 case WM_WINDOWPOSCHANGING
:
38 case WM_WINDOWPOSCHANGED
:
40 WINDOWPOS
* pwp
= (WINDOWPOS
*)lParam
;
41 ok(wParam
==0,"expected wParam=0\n");
42 RECORD_MESSAGE(iwnd
, message
, SENT
, get_iwnd(pwp
->hwndInsertAfter
), pwp
->flags
);
46 RECORD_MESSAGE(iwnd
, message
, SENT
, 0,0);
48 return DefWindowProc(hWnd
, message
, wParam
, lParam
);
51 static void FlushMessages()
55 while (PeekMessage( &msg
, 0, 0, 0, PM_REMOVE
))
57 int iwnd
= get_iwnd(msg
.hwnd
);
58 if(!(msg
.message
> WM_USER
|| !iwnd
|| IsDWmMsg(msg
.message
) || IseKeyMsg(msg
.message
)))
59 RECORD_MESSAGE(iwnd
, msg
.message
, POST
,0,0);
60 DispatchMessageA( &msg
);
64 MSG_ENTRY NcMetricsChange_chain
[]={
65 {2,WM_WINDOWPOSCHANGING
, SENT
, 0, SWP_FRAMECHANGED
|SWP_NOACTIVATE
|SWP_NOCOPYBITS
|SWP_NOMOVE
|SWP_NOZORDER
|SWP_NOREDRAW
},
68 {2,WM_WINDOWPOSCHANGED
, SENT
, 0, SWP_FRAMECHANGED
|SWP_NOACTIVATE
|SWP_NOCOPYBITS
|SWP_NOMOVE
|SWP_NOZORDER
|SWP_NOREDRAW
| SWP_NOCLIENTSIZE
| SWP_NOCLIENTMOVE
| SWP_NOSIZE
},
69 {1,WM_WINDOWPOSCHANGING
, SENT
, 0, SWP_FRAMECHANGED
|SWP_NOACTIVATE
|SWP_NOCOPYBITS
|SWP_NOMOVE
|SWP_NOZORDER
|SWP_NOREDRAW
},
72 {1,WM_WINDOWPOSCHANGED
, SENT
, 0, SWP_FRAMECHANGED
|SWP_NOACTIVATE
|SWP_NOCOPYBITS
|SWP_NOMOVE
|SWP_NOZORDER
|SWP_NOREDRAW
| SWP_NOCLIENTSIZE
| SWP_NOCLIENTMOVE
| SWP_NOSIZE
},
75 MSG_ENTRY NcMetricsChange1_chain
[]={
76 {2,WM_WINDOWPOSCHANGING
, SENT
, 0, SWP_FRAMECHANGED
|SWP_NOACTIVATE
|SWP_NOCOPYBITS
|SWP_NOMOVE
|SWP_NOZORDER
|SWP_NOREDRAW
},
79 {2,WM_WINDOWPOSCHANGED
, SENT
, 0, SWP_FRAMECHANGED
|SWP_NOACTIVATE
|SWP_NOCOPYBITS
|SWP_NOMOVE
|SWP_NOZORDER
|SWP_NOREDRAW
| SWP_NOCLIENTSIZE
| SWP_NOCLIENTMOVE
| SWP_NOSIZE
},
80 {1,WM_WINDOWPOSCHANGING
, SENT
, 0, SWP_FRAMECHANGED
|SWP_NOACTIVATE
|SWP_NOCOPYBITS
|SWP_NOMOVE
|SWP_NOZORDER
|SWP_NOREDRAW
},
83 {1,WM_WINDOWPOSCHANGED
, SENT
, 0, SWP_FRAMECHANGED
|SWP_NOACTIVATE
|SWP_NOCOPYBITS
|SWP_NOMOVE
|SWP_NOZORDER
|SWP_NOREDRAW
| SWP_NOCLIENTSIZE
| SWP_NOCLIENTMOVE
| SWP_NOSIZE
},
88 MSG_ENTRY CaptionHeight_chain
[]={
89 {2,WM_WINDOWPOSCHANGING
, SENT
, 0, SWP_FRAMECHANGED
|SWP_NOACTIVATE
|SWP_NOCOPYBITS
|SWP_NOMOVE
|SWP_NOZORDER
|SWP_NOREDRAW
},
92 {2,WM_WINDOWPOSCHANGED
, SENT
, 0, SWP_FRAMECHANGED
|SWP_NOACTIVATE
|SWP_NOCOPYBITS
|SWP_NOMOVE
|SWP_NOZORDER
|SWP_NOREDRAW
| SWP_NOCLIENTSIZE
},
94 {1,WM_WINDOWPOSCHANGING
, SENT
, 0, SWP_FRAMECHANGED
|SWP_NOACTIVATE
|SWP_NOCOPYBITS
|SWP_NOMOVE
|SWP_NOZORDER
|SWP_NOREDRAW
},
97 {1,WM_WINDOWPOSCHANGED
, SENT
, 0, SWP_FRAMECHANGED
|SWP_NOACTIVATE
|SWP_NOCOPYBITS
|SWP_NOMOVE
|SWP_NOZORDER
|SWP_NOREDRAW
| SWP_NOCLIENTSIZE
},
101 static void Test_NonClientMetrics()
103 NONCLIENTMETRICS NonClientMetrics
;
105 /* WARNING: this test requires themes and dwm to be disabled */
109 /* Retrieve th non client metrics */
110 NonClientMetrics
.cbSize
= sizeof(NONCLIENTMETRICS
);
111 SystemParametersInfo(SPI_GETNONCLIENTMETRICS
, sizeof(NONCLIENTMETRICS
), &NonClientMetrics
, 0);
113 COMPARE_CACHE(empty_chain
);
115 /* Set the non client metric without making any change */
116 SystemParametersInfo(SPI_SETNONCLIENTMETRICS
, sizeof(NONCLIENTMETRICS
), &NonClientMetrics
, 0);
118 COMPARE_CACHE(NcMetricsChange_chain
);
120 /* Set the same metrics again with the SPIF_SENDCHANGE param */
121 SystemParametersInfo(SPI_SETNONCLIENTMETRICS
, sizeof(NONCLIENTMETRICS
), &NonClientMetrics
, SPIF_SENDCHANGE
|SPIF_UPDATEINIFILE
);
123 COMPARE_CACHE(NcMetricsChange1_chain
);
125 /* Slightly change the caption height */
126 NonClientMetrics
.iCaptionHeight
+= 1;
127 SystemParametersInfo(SPI_SETNONCLIENTMETRICS
, sizeof(NONCLIENTMETRICS
), &NonClientMetrics
, 0);
129 COMPARE_CACHE(CaptionHeight_chain
);
131 /* Restore the original caption height */
132 NonClientMetrics
.iCaptionHeight
-= 1;
133 SystemParametersInfo(SPI_SETNONCLIENTMETRICS
, sizeof(NONCLIENTMETRICS
), &NonClientMetrics
, 0);
135 COMPARE_CACHE(CaptionHeight_chain
);
138 static void Test_MouseSpeed()
140 ULONG ulMouseSpeed
, temp
;
143 ret
= SystemParametersInfo(SPI_GETMOUSESPEED
, 0, &ulMouseSpeed
, 0);
144 ok(ret
, "SystemParametersInfo failed\n");
145 ok(ulMouseSpeed
>= 1 && ulMouseSpeed
<=20, "Wrong mouse speed (%d)\n", (int)ulMouseSpeed
);
148 ret
= SystemParametersInfo(SPI_SETMOUSESPEED
, 0, (PVOID
)temp
, SPIF_SENDCHANGE
| SPIF_UPDATEINIFILE
);
149 ok(ret
, "SystemParametersInfo failed\n");
150 ret
= SystemParametersInfo(SPI_GETMOUSESPEED
, 0, &temp
, 0);
151 ok(ret
, "SystemParametersInfo failed\n");
152 ok(temp
== 1, "SPI_GETMOUSESPEED did not get value set by SPI_SETMOUSESPEED (%d instead of 1)\n", (int)temp
);
155 ret
= SystemParametersInfo(SPI_SETMOUSESPEED
, 0, (PVOID
)temp
, SPIF_SENDCHANGE
| SPIF_UPDATEINIFILE
);
156 ok(ret
, "SystemParametersInfo failed\n");
157 ret
= SystemParametersInfo(SPI_GETMOUSESPEED
, 0, &temp
, 0);
158 ok(ret
, "SystemParametersInfo failed\n");
159 ok(temp
== 20, "SPI_GETMOUSESPEED did not get value set by SPI_SETMOUSESPEED (%d instead of 20)\n", (int)temp
);
162 ret
= SystemParametersInfo(SPI_SETMOUSESPEED
, 0, (PVOID
)temp
, SPIF_SENDCHANGE
| SPIF_UPDATEINIFILE
);
163 ok(!ret
, "expected SystemParametersInfo to fail\n");
164 ret
= SystemParametersInfo(SPI_GETMOUSESPEED
, 0, &temp
, 0);
165 ok(ret
, "SystemParametersInfo failed\n");
166 ok(temp
== 20, "SPI_GETMOUSESPEED got unexpected value (%d instead of 20)\n", (int)temp
);
169 ret
= SystemParametersInfo(SPI_SETMOUSESPEED
, 0, (PVOID
)temp
, SPIF_SENDCHANGE
| SPIF_UPDATEINIFILE
);
170 ok(!ret
, "expected SystemParametersInfo to fail\n");
171 ret
= SystemParametersInfo(SPI_GETMOUSESPEED
, 0, &temp
, 0);
172 ok(ret
, "SystemParametersInfo failed\n");
173 ok(temp
== 20, "SPI_GETMOUSESPEED got unexpected value (%d instead of 20)\n", (int)temp
);
175 ret
= SystemParametersInfo(SPI_SETMOUSESPEED
, 0, (PVOID
)ulMouseSpeed
, SPIF_SENDCHANGE
| SPIF_UPDATEINIFILE
);
176 ok(ret
, "SystemParametersInfo failed\n");
179 START_TEST(SystemParametersInfo
)
181 RegisterSimpleClass(SysParamsTestProc
, L
"sysparamstest");
182 hWnd1
= CreateWindowW(L
"sysparamstest", L
"sysparamstest", WS_OVERLAPPEDWINDOW
,
183 20, 20, 300, 300, NULL
, NULL
, 0, NULL
);
185 hWnd2
= CreateWindowW(L
"sysparamstest", L
"sysparamstest", WS_OVERLAPPEDWINDOW
,
186 200, 200, 300, 300, NULL
, NULL
, 0, NULL
);
188 Test_NonClientMetrics();
191 DestroyWindow(hWnd1
);
192 DestroyWindow(hWnd2
);
193 UnregisterClassW(L
"sysparamstest", 0);