1 /* Unit test suite for functions SystemParametersInfo and GetSystemMetrics.
3 * Copyright 2002 Andriy Palamarchuk
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
25 #define _WIN32_WINNT 0x0500 /* For SPI_GETMOUSEHOVERWIDTH and more */
27 #include "wine/test.h"
34 #ifndef SPI_GETDESKWALLPAPER
35 # define SPI_GETDESKWALLPAPER 0x0073
40 #define eq(received, expected, label, type) \
41 ok((received) == (expected), "%s: got " type " instead of " type "\n", (label),(received),(expected))
44 #define SPI_SETBEEP_REGKEY "Control Panel\\Sound"
45 #define SPI_SETBEEP_VALNAME "Beep"
46 #define SPI_SETMOUSE_REGKEY "Control Panel\\Mouse"
47 #define SPI_SETMOUSE_VALNAME1 "MouseThreshold1"
48 #define SPI_SETMOUSE_VALNAME2 "MouseThreshold2"
49 #define SPI_SETMOUSE_VALNAME3 "MouseSpeed"
50 #define SPI_SETBORDER_REGKEY "Control Panel\\Desktop\\WindowMetrics"
51 #define SPI_SETBORDER_VALNAME "BorderWidth"
52 #define SPI_SETKEYBOARDSPEED_REGKEY "Control Panel\\Keyboard"
53 #define SPI_SETKEYBOARDSPEED_VALNAME "KeyboardSpeed"
54 #define SPI_SETSCREENSAVETIMEOUT_REGKEY "Control Panel\\Desktop"
55 #define SPI_SETSCREENSAVETIMEOUT_VALNAME "ScreenSaveTimeOut"
56 #define SPI_SETSCREENSAVEACTIVE_REGKEY "Control Panel\\Desktop"
57 #define SPI_SETSCREENSAVEACTIVE_VALNAME "ScreenSaveActive"
58 #define SPI_SETGRIDGRANULARITY_REGKEY "Control Panel\\Desktop"
59 #define SPI_SETGRIDGRANULARITY_VALNAME "GridGranularity"
60 #define SPI_SETKEYBOARDDELAY_REGKEY "Control Panel\\Keyboard"
61 #define SPI_SETKEYBOARDDELAY_VALNAME "KeyboardDelay"
62 #define SPI_SETICONTITLEWRAP_REGKEY1 "Control Panel\\Desktop\\WindowMetrics"
63 #define SPI_SETICONTITLEWRAP_REGKEY2 "Control Panel\\Desktop"
64 #define SPI_SETICONTITLEWRAP_VALNAME "IconTitleWrap"
65 #define SPI_SETMENUDROPALIGNMENT_REGKEY1 "Software\\Microsoft\\Windows NT\\CurrentVersion\\Windows"
66 #define SPI_SETMENUDROPALIGNMENT_REGKEY2 "Control Panel\\Desktop"
67 #define SPI_SETMENUDROPALIGNMENT_VALNAME "MenuDropAlignment"
68 #define SPI_SETDOUBLECLKWIDTH_REGKEY1 "Control Panel\\Mouse"
69 #define SPI_SETDOUBLECLKWIDTH_REGKEY2 "Control Panel\\Desktop"
70 #define SPI_SETDOUBLECLKWIDTH_VALNAME "DoubleClickWidth"
71 #define SPI_SETDOUBLECLKHEIGHT_REGKEY1 "Control Panel\\Mouse"
72 #define SPI_SETDOUBLECLKHEIGHT_REGKEY2 "Control Panel\\Desktop"
73 #define SPI_SETDOUBLECLKHEIGHT_VALNAME "DoubleClickHeight"
74 #define SPI_SETDOUBLECLICKTIME_REGKEY "Control Panel\\Mouse"
75 #define SPI_SETDOUBLECLICKTIME_VALNAME "DoubleClickSpeed"
76 #define SPI_SETMOUSEBUTTONSWAP_REGKEY "Control Panel\\Mouse"
77 #define SPI_SETMOUSEBUTTONSWAP_VALNAME "SwapMouseButtons"
78 #define SPI_SETWORKAREA_REGKEY "Control Panel\\Desktop"
79 #define SPI_SETWORKAREA_VALNAME "WINE_WorkArea"
80 #define SPI_SETSHOWSOUNDS_REGKEY "Control Panel\\Accessibility\\ShowSounds"
81 #define SPI_SETSHOWSOUNDS_VALNAME "On"
82 #define SPI_SETKEYBOARDPREF_REGKEY "Control Panel\\Accessibility\\Keyboard Preference"
83 #define SPI_SETKEYBOARDPREF_VALNAME "On"
84 #define SPI_SETSCREENREADER_REGKEY "Control Panel\\Accessibility\\Blind Access"
85 #define SPI_SETSCREENREADER_VALNAME "On"
86 #define SPI_SETLOWPOWERACTIVE_REGKEY "Control Panel\\Desktop"
87 #define SPI_SETLOWPOWERACTIVE_VALNAME "LowPowerActive"
88 #define SPI_SETPOWEROFFACTIVE_REGKEY "Control Panel\\Desktop"
89 #define SPI_SETPOWEROFFACTIVE_VALNAME "PowerOffActive"
90 #define SPI_SETDRAGFULLWINDOWS_REGKEY "Control Panel\\Desktop"
91 #define SPI_SETDRAGFULLWINDOWS_VALNAME "DragFullWindows"
92 #define SPI_SETMOUSEHOVERWIDTH_REGKEY "Control Panel\\Mouse"
93 #define SPI_SETMOUSEHOVERWIDTH_VALNAME "MouseHoverWidth"
94 #define SPI_SETMOUSEHOVERHEIGHT_REGKEY "Control Panel\\Mouse"
95 #define SPI_SETMOUSEHOVERHEIGHT_VALNAME "MouseHoverHeight"
96 #define SPI_SETMOUSEHOVERTIME_REGKEY "Control Panel\\Mouse"
97 #define SPI_SETMOUSEHOVERTIME_VALNAME "MouseHoverTime"
98 #define SPI_SETMOUSESCROLLLINES_REGKEY "Control Panel\\Desktop"
99 #define SPI_SETMOUSESCROLLLINES_VALNAME "WheelScrollLines"
100 #define SPI_SETMENUSHOWDELAY_REGKEY "Control Panel\\Desktop"
101 #define SPI_SETMENUSHOWDELAY_VALNAME "MenuShowDelay"
102 #define SPI_SETDESKWALLPAPER_REGKEY "Control Panel\\Desktop"
103 #define SPI_SETDESKWALLPAPER_VALNAME "Wallpaper"
105 /* volatile registry branch under CURRENT_USER_REGKEY for temporary values storage */
106 #define WINE_CURRENT_USER_REGKEY "Wine"
108 static HWND ghTestWnd;
110 static DWORD WINAPI SysParamsThreadFunc( LPVOID lpParam );
111 static LRESULT CALLBACK SysParamsTestWndProc( HWND hWnd, UINT msg, WPARAM wParam,
113 static int change_counter;
114 static int change_last_param;
116 static LRESULT CALLBACK SysParamsTestWndProc( HWND hWnd, UINT msg, WPARAM wParam,
121 case WM_SETTINGCHANGE:
122 if (change_counter>0) {
123 ok(0,"too many changes counter=%d last change=%d\n",
124 change_counter,change_last_param);
127 change_last_param = wParam;
131 PostQuitMessage( 0 );
135 return( DefWindowProcA( hWnd, msg, wParam, lParam ) );
142 Performs testing for system parameters messages
144 - system parameter id
145 - supposed value of the registry key
147 static void test_change_message( int action, int optional )
149 if (change_counter==0 && optional==1)
151 ok( 1 == change_counter,
152 "Missed a message: change_counter=%d\n", change_counter );
154 ok( action == change_last_param,
155 "Wrong action got %d expected %d\n", change_last_param, action );
156 change_last_param = 0;
160 * Tests the HKEY_CURRENT_USER subkey value.
161 * The value should contain string value.
164 * lpsSubKey - subkey name
165 * lpsRegName - registry entry name
166 * lpsTestValue - value to test
168 static void _test_reg_key( LPCSTR subKey1, LPCSTR subKey2, LPCSTR valName, LPCSTR testValue )
170 CHAR value[MAX_PATH];
178 valueLen=sizeof(value);
179 RegOpenKeyA( HKEY_CURRENT_USER, subKey1, &hKey );
180 rc=RegQueryValueExA( hKey, valName, NULL, &type, value, &valueLen );
182 if (rc==ERROR_SUCCESS)
184 ok( !strcmp( testValue, value ),
185 "Wrong value in registry: subKey=%s, valName=%s, testValue=%s, value=%s\n",
186 subKey1, valName, testValue, value );
191 ok(0,"Missing registry entry: subKey=%s, valName=%s\n",
194 if (subKey2 && !strict)
197 valueLen=sizeof(value);
198 RegOpenKeyA( HKEY_CURRENT_USER, subKey2, &hKey );
199 rc=RegQueryValueExA( hKey, valName, NULL, &type, value, &valueLen );
201 if (rc==ERROR_SUCCESS)
203 ok( !strcmp( testValue, value ),
204 "Wrong value in registry: subKey=%s, valName=%s, testValue=%s, value=%s\n",
205 subKey2, valName, testValue, value );
209 ok(found,"Missing registry entry: %s in %s or %s\n",
210 valName, subKey1, (subKey2?subKey2:"<n/a>") );
213 #define test_reg_key( subKey, valName, testValue ) \
214 _test_reg_key( subKey, NULL, valName, testValue )
215 #define test_reg_key_ex( subKey1, subKey2, valName, testValue ) \
216 _test_reg_key( subKey1, subKey2, valName, testValue )
218 static void test_SPI_SETBEEP( void ) /* 2 */
225 trace("testing SPI_{GET,SET}BEEP\n");
226 rc=SystemParametersInfoA( SPI_GETBEEP, 0, &old_b, 0 );
227 ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
230 rc=SystemParametersInfoA( SPI_SETBEEP, curr_val, 0, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
231 ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
232 test_change_message( SPI_SETBEEP, 0 );
233 test_reg_key( SPI_SETBEEP_REGKEY,
235 curr_val ? "Yes" : "No" );
236 rc=SystemParametersInfoA( SPI_GETBEEP, 0, &b, 0 );
237 ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
238 eq( b, curr_val, "SPI_{GET,SET}BEEP", "%d" );
239 rc=SystemParametersInfoW( SPI_GETBEEP, 0, &b, 0 );
240 if (rc!=0 || GetLastError()!=ERROR_CALL_NOT_IMPLEMENTED)
242 ok(rc!=0,"SystemParametersInfoW: rc=%d err=%ld\n",rc,GetLastError());
243 eq( b, curr_val, "SystemParametersInfoW", "%d" );
246 /* is a message sent for the second change? */
247 rc=SystemParametersInfoA( SPI_SETBEEP, curr_val, 0, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
248 ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
249 test_change_message( SPI_SETBEEP, 0 );
252 rc=SystemParametersInfoW( SPI_SETBEEP, curr_val, 0, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
253 if (rc==0 && GetLastError()==ERROR_CALL_NOT_IMPLEMENTED)
254 rc=SystemParametersInfoA( SPI_SETBEEP, curr_val, 0, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
255 ok(rc!=0,"SystemParametersInfo: rc=%d err=%ld\n",rc,GetLastError());
256 test_change_message( SPI_SETBEEP, 0 );
257 test_reg_key( SPI_SETBEEP_REGKEY,
259 curr_val ? "Yes" : "No" );
260 rc=SystemParametersInfoA( SPI_GETBEEP, 0, &b, 0 );
261 ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
262 eq( b, curr_val, "SPI_{GET,SET}BEEP", "%d" );
263 rc=SystemParametersInfoW( SPI_GETBEEP, 0, &b, 0 );
264 if (rc!=0 || GetLastError()!=ERROR_CALL_NOT_IMPLEMENTED)
266 ok(rc!=0,"SystemParametersInfoW: rc=%d err=%ld\n",rc,GetLastError());
267 eq( b, curr_val, "SystemParametersInfoW", "%d" );
269 ok( MessageBeep( MB_OK ), "Return value of MessageBeep when sound is disabled\n" );
271 rc=SystemParametersInfoA( SPI_SETBEEP, old_b, 0, SPIF_UPDATEINIFILE );
272 ok(rc!=0,"***warning*** failed to restore the original value: rc=%d err=%ld\n",rc,GetLastError());
275 static const char *setmouse_valuenames[3] = {
276 SPI_SETMOUSE_VALNAME1,
277 SPI_SETMOUSE_VALNAME2,
278 SPI_SETMOUSE_VALNAME3
282 * Runs check for one setting of spi_setmouse.
284 static void run_spi_setmouse_test( int curr_val[], POINT *req_change, POINT *proj_change,
289 static int aw_turn = 0;
290 static BOOL w_implemented = 1;
297 if ((aw_turn % 2!=0) && (w_implemented))
299 /* call unicode on odd (non even) calls */
300 SetLastError(0xdeadbeef);
301 rc=SystemParametersInfoW( SPI_SETMOUSE, 0, curr_val, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
302 if (rc==0 && GetLastError()==ERROR_CALL_NOT_IMPLEMENTED)
305 trace("SystemParametersInfoW not supported on this platform\n");
309 if ((aw_turn % 2==0) || (!w_implemented))
311 /* call ascii version on even calls or if unicode is not available */
312 rc=SystemParametersInfoA( SPI_SETMOUSE, 0, curr_val, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
315 ok(rc!=0,"SystemParametersInfo: rc=%d err=%ld\n",rc,GetLastError());
316 test_change_message( SPI_SETMOUSE, 0 );
317 for (i = 0; i < 3; i++)
319 sprintf( buf, "%d", curr_val[i] );
320 test_reg_key( SPI_SETMOUSE_REGKEY, setmouse_valuenames[i], buf );
323 rc=SystemParametersInfoA( SPI_GETMOUSE, 0, mi, 0 );
324 ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
325 for (i = 0; i < 3; i++)
327 ok(mi[i] == curr_val[i],
328 "incorrect value for %d: %d != %d\n", i, mi[i], curr_val[i]);
333 rc=SystemParametersInfoW( SPI_GETMOUSE, 0, mi, 0 );
334 ok(rc!=0,"SystemParametersInfoW: rc=%d err=%ld\n",rc,GetLastError());
335 for (i = 0; i < 3; i++)
337 ok(mi[i] == curr_val[i],
338 "incorrect value for %d: %d != %d\n", i, mi[i], curr_val[i]);
342 #if 0 /* FIXME: this always fails for me - AJ */
343 for (i = 0; i < nchange; i++)
346 mouse_event( MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, 0, 0, 0, 0 );
347 mouse_event( MOUSEEVENTF_MOVE, req_change[i].x, req_change[i].y, 0, 0 );
349 ok( proj_change[i].x == mv.x, "Projected dx and real dx comparison. May fail under high load.\n" );
350 ok( proj_change[i].y == mv.y, "Projected dy equals real dy. May fail under high load.\n" );
355 static void test_SPI_SETMOUSE( void ) /* 4 */
360 /* win nt default values - 6, 10, 1 */
361 INT curr_val[3] = {6, 10, 1};
363 /* requested and projected mouse movements */
364 POINT req_change[] = { {6, 6}, { 7, 6}, { 8, 6}, {10, 10}, {11, 10}, {100, 100} };
365 POINT proj_change1[] = { {6, 6}, {14, 6}, {16, 6}, {20, 20}, {22, 20}, {200, 200} };
366 POINT proj_change2[] = { {6, 6}, {14, 6}, {16, 6}, {20, 20}, {44, 20}, {400, 400} };
367 POINT proj_change3[] = { {6, 6}, {14, 6}, {16, 6}, {20, 20}, {22, 20}, {200, 200} };
368 POINT proj_change4[] = { {6, 6}, { 7, 6}, { 8, 6}, {10, 10}, {11, 10}, {100, 100} };
369 POINT proj_change5[] = { {6, 6}, { 7, 6}, {16, 6}, {20, 20}, {22, 20}, {200, 200} };
370 POINT proj_change6[] = { {6, 6}, {28, 6}, {32, 6}, {40, 40}, {44, 40}, {400, 400} };
371 POINT proj_change7[] = { {6, 6}, {14, 6}, {32, 6}, {40, 40}, {44, 40}, {400, 400} };
372 POINT proj_change8[] = { {6, 6}, {28, 6}, {32, 6}, {40, 40}, {44, 40}, {400, 400} };
374 int nchange = sizeof( req_change ) / sizeof( POINT );
376 trace("testing SPI_{GET,SET}MOUSE\n");
377 rc=SystemParametersInfoA( SPI_GETMOUSE, 0, old_mi, 0 );
378 ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
380 run_spi_setmouse_test( curr_val, req_change, proj_change1, nchange );
382 /* acceleration change */
384 run_spi_setmouse_test( curr_val, req_change, proj_change2, nchange );
386 /* acceleration change */
388 run_spi_setmouse_test( curr_val, req_change, proj_change3, nchange );
390 /* acceleration change */
392 run_spi_setmouse_test( curr_val, req_change, proj_change4, nchange );
394 /* threshold change */
397 run_spi_setmouse_test( curr_val, req_change, proj_change5, nchange );
399 /* threshold change */
403 run_spi_setmouse_test( curr_val, req_change, proj_change6, nchange );
405 /* threshold change */
407 run_spi_setmouse_test( curr_val, req_change, proj_change7, nchange );
409 /* threshold change */
411 run_spi_setmouse_test( curr_val, req_change, proj_change8, nchange );
413 rc=SystemParametersInfoA( SPI_SETMOUSE, 0, old_mi, SPIF_UPDATEINIFILE );
414 ok(rc!=0,"***warning*** failed to restore the original value: rc=%d err=%ld\n",rc,GetLastError());
418 static void test_setborder(UINT curr_val)
425 rc=SystemParametersInfoA( SPI_SETBORDER, curr_val, 0, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
426 ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
427 test_change_message( SPI_SETBORDER, 1 );
428 sprintf( buf, "%d", curr_val );
429 test_reg_key( SPI_SETBORDER_REGKEY, SPI_SETBORDER_VALNAME, buf );
433 rc=SystemParametersInfoA( SPI_GETBORDER, 0, &border, 0 );
434 ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
435 eq( border, curr_val, "SPI_{GET,SET}BORDER", "%d");
437 frame = curr_val + GetSystemMetrics( SM_CXDLGFRAME );
438 eq( frame, GetSystemMetrics( SM_CXFRAME ), "SM_CXFRAME", "%d" );
439 eq( frame, GetSystemMetrics( SM_CYFRAME ), "SM_CYFRAME", "%d" );
440 eq( frame, GetSystemMetrics( SM_CXSIZEFRAME ), "SM_CXSIZEFRAME", "%d" );
441 eq( frame, GetSystemMetrics( SM_CYSIZEFRAME ), "SM_CYSIZEFRAME", "%d" );
444 static void test_SPI_SETBORDER( void ) /* 6 */
449 /* These tests hang when XFree86 4.0 for Windows is running (tested on
450 * WinNT, SP2, Cygwin/XFree 4.1.0. Skip the test when XFree86 is
453 if (FindWindowA( NULL, "Cygwin/XFree86" ))
456 trace("testing SPI_{GET,SET}BORDER\n");
457 rc=SystemParametersInfoA( SPI_GETBORDER, 0, &old_border, 0 );
458 ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
465 /* This will restore sane values if the test hang previous run. */
466 if ( old_border == 7 || old_border == 20 )
469 rc=SystemParametersInfoA( SPI_SETBORDER, old_border, 0, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
470 ok(rc!=0,"***warning*** failed to restore the original value: rc=%d err=%ld\n",rc,GetLastError());
474 static void test_SPI_SETKEYBOARDSPEED( void ) /* 10 */
478 const UINT vals[]={0,20,31};
481 trace("testing SPI_{GET,SET}KEYBOARDSPEED\n");
482 rc=SystemParametersInfoA( SPI_GETKEYBOARDSPEED, 0, &old_speed, 0 );
483 ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
485 for (i=0;i<sizeof(vals)/sizeof(*vals);i++)
490 rc=SystemParametersInfoA( SPI_SETKEYBOARDSPEED, vals[i], 0,
491 SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
492 ok(rc!=0,"%d: rc=%d err=%ld\n",i,rc,GetLastError());
493 test_change_message( SPI_SETKEYBOARDSPEED, 0 );
494 sprintf( buf, "%d", vals[i] );
495 test_reg_key( SPI_SETKEYBOARDSPEED_REGKEY, SPI_SETKEYBOARDSPEED_VALNAME, buf );
497 rc=SystemParametersInfoA( SPI_GETKEYBOARDSPEED, 0, &v, 0 );
498 ok(rc!=0,"%d: rc=%d err=%ld\n",i,rc,GetLastError());
499 eq( v, vals[i], "SPI_{GET,SET}KEYBOARDSPEED", "%d" );
502 rc=SystemParametersInfoA( SPI_SETKEYBOARDSPEED, old_speed, 0, SPIF_UPDATEINIFILE );
503 ok(rc!=0,"***warning*** failed to restore the original value: rc=%d err=%ld\n",rc,GetLastError());
506 static void test_SPI_ICONHORIZONTALSPACING( void ) /* 13 */
513 trace("testing SPI_ICONHORIZONTALSPACING\n");
514 /* default value: 75 */
515 rc=SystemParametersInfoA( SPI_ICONHORIZONTALSPACING, 0, &old_spacing, 0 );
516 ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
518 /* do not increase the value as it would upset the user's icon layout */
519 curr_val = (old_spacing > 32 ? old_spacing-1 : 32);
520 rc=SystemParametersInfoA( SPI_ICONHORIZONTALSPACING, curr_val, 0,
521 SPIF_UPDATEINIFILE | SPIF_SENDCHANGE);
522 ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
523 test_change_message( SPI_ICONHORIZONTALSPACING, 0 );
524 /* The registry keys depend on the Windows version and the values too
528 rc=SystemParametersInfoA( SPI_ICONHORIZONTALSPACING, 0, &spacing, 0 );
529 ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
530 eq( spacing, curr_val, "ICONHORIZONTALSPACING", "%d");
531 eq( GetSystemMetrics( SM_CXICONSPACING ), curr_val, "SM_CXICONSPACING", "%d" );
534 rc=SystemParametersInfoA( SPI_ICONHORIZONTALSPACING, curr_val, 0,
535 SPIF_UPDATEINIFILE | SPIF_SENDCHANGE);
536 ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
537 curr_val = 32; /*min value*/
538 test_change_message( SPI_ICONHORIZONTALSPACING, 0 );
540 rc=SystemParametersInfoA( SPI_ICONHORIZONTALSPACING, 0, &spacing, 0 );
541 ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
542 eq( spacing, curr_val, "ICONHORIZONTALSPACING", "%d" );
543 eq( GetSystemMetrics( SM_CXICONSPACING ), curr_val, "SM_CXICONSPACING", "%d" );
545 rc=SystemParametersInfoA( SPI_ICONHORIZONTALSPACING, old_spacing, 0, SPIF_UPDATEINIFILE );
546 ok(rc!=0,"***warning*** failed to restore the original value: rc=%d err=%ld\n",rc,GetLastError());
549 static void test_SPI_SETSCREENSAVETIMEOUT( void ) /* 14 */
553 const UINT vals[]={0,32767};
556 trace("testing SPI_{GET,SET}SCREENSAVETIMEOUT\n");
557 rc=SystemParametersInfoA( SPI_GETSCREENSAVETIMEOUT, 0, &old_timeout, 0 );
558 ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
560 for (i=0;i<sizeof(vals)/sizeof(*vals);i++)
565 rc=SystemParametersInfoA( SPI_SETSCREENSAVETIMEOUT, vals[i], 0,
566 SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
567 ok(rc!=0,"%d: rc=%d err=%ld\n",i,rc,GetLastError());
568 test_change_message( SPI_SETSCREENSAVETIMEOUT, 0 );
569 sprintf( buf, "%d", vals[i] );
570 test_reg_key( SPI_SETSCREENSAVETIMEOUT_REGKEY,
571 SPI_SETSCREENSAVETIMEOUT_VALNAME, buf );
573 SystemParametersInfoA( SPI_GETSCREENSAVETIMEOUT, 0, &v, 0 );
574 ok(rc!=0,"%d: rc=%d err=%ld\n",i,rc,GetLastError());
575 eq( v, vals[i], "SPI_{GET,SET}SCREENSAVETIMEOUT", "%d" );
578 rc=SystemParametersInfoA( SPI_SETSCREENSAVETIMEOUT, old_timeout, 0,
579 SPIF_UPDATEINIFILE );
580 ok(rc!=0,"***warning*** failed to restore the original value: rc=%d err=%ld\n",rc,GetLastError());
583 static void test_SPI_SETSCREENSAVEACTIVE( void ) /* 17 */
587 const UINT vals[]={TRUE,FALSE};
590 trace("testing SPI_{GET,SET}SCREENSAVEACTIVE\n");
591 rc=SystemParametersInfoA( SPI_GETSCREENSAVEACTIVE, 0, &old_b, 0 );
592 ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
594 for (i=0;i<sizeof(vals)/sizeof(*vals);i++)
598 rc=SystemParametersInfoA( SPI_SETSCREENSAVEACTIVE, vals[i], 0,
599 SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
600 ok(rc!=0,"%d: rc=%d err=%ld\n",i,rc,GetLastError());
601 test_change_message( SPI_SETSCREENSAVEACTIVE, 0 );
602 test_reg_key( SPI_SETSCREENSAVEACTIVE_REGKEY,
603 SPI_SETSCREENSAVEACTIVE_VALNAME,
604 vals[i] ? "1" : "0" );
606 rc=SystemParametersInfoA( SPI_GETSCREENSAVEACTIVE, 0, &v, 0 );
607 ok(rc!=0,"%d: rc=%d err=%ld\n",i,rc,GetLastError());
608 eq( v, vals[i], "SPI_{GET,SET}SCREENSAVEACTIVE", "%d" );
611 rc=SystemParametersInfoA( SPI_SETSCREENSAVEACTIVE, old_b, 0, SPIF_UPDATEINIFILE );
612 ok(rc!=0,"***warning*** failed to restore the original value: rc=%d err=%ld\n",rc,GetLastError());
615 static void test_SPI_SETGRIDGRANULARITY( void ) /* 19 */
620 static void test_SPI_SETKEYBOARDDELAY( void ) /* 23 */
624 const UINT vals[]={0,3};
627 trace("testing SPI_{GET,SET}KEYBOARDDELAY\n");
628 rc=SystemParametersInfoA( SPI_GETKEYBOARDDELAY, 0, &old_delay, 0 );
629 ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
631 for (i=0;i<sizeof(vals)/sizeof(*vals);i++)
636 rc=SystemParametersInfoA( SPI_SETKEYBOARDDELAY, vals[i], 0,
637 SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
638 ok(rc!=0,"%d: rc=%d err=%ld\n",i,rc,GetLastError());
639 test_change_message( SPI_SETKEYBOARDDELAY, 0 );
640 sprintf( buf, "%d", vals[i] );
641 test_reg_key( SPI_SETKEYBOARDDELAY_REGKEY,
642 SPI_SETKEYBOARDDELAY_VALNAME, buf );
644 rc=SystemParametersInfoA( SPI_GETKEYBOARDDELAY, 0, &delay, 0 );
645 ok(rc!=0,"%d: rc=%d err=%ld\n",i,rc,GetLastError());
646 eq( delay, vals[i], "SPI_{GET,SET}KEYBOARDDELAY", "%d" );
649 rc=SystemParametersInfoA( SPI_SETKEYBOARDDELAY, old_delay, 0, SPIF_UPDATEINIFILE );
650 ok(rc!=0,"***warning*** failed to restore the original value: rc=%d err=%ld\n",rc,GetLastError());
653 static void test_SPI_ICONVERTICALSPACING( void ) /* 24 */
660 trace("testing SPI_ICONVERTICALSPACING\n");
661 /* default value: 75 */
662 rc=SystemParametersInfoA( SPI_ICONVERTICALSPACING, 0, &old_spacing, 0 );
663 ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
665 /* do not increase the value as it would upset the user's icon layout */
666 curr_val = old_spacing-1;
667 rc=SystemParametersInfoA( SPI_ICONVERTICALSPACING, curr_val, 0,
668 SPIF_UPDATEINIFILE | SPIF_SENDCHANGE);
669 ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
670 test_change_message( SPI_ICONVERTICALSPACING, 0 );
671 /* The registry keys depend on the Windows version and the values too
675 rc=SystemParametersInfoA( SPI_ICONVERTICALSPACING, 0, &spacing, 0 );
676 ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
677 eq( spacing, curr_val, "ICONVERTICALSPACING", "%d" );
678 eq( GetSystemMetrics( SM_CYICONSPACING ), curr_val, "SM_CYICONSPACING", "%d" );
681 rc=SystemParametersInfoA( SPI_ICONVERTICALSPACING, curr_val, 0,
682 SPIF_UPDATEINIFILE | SPIF_SENDCHANGE);
683 ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
684 curr_val = 32; /*min value*/
685 test_change_message( SPI_ICONVERTICALSPACING, 0 );
687 rc=SystemParametersInfoA( SPI_ICONVERTICALSPACING, 0, &spacing, 0 );
688 ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
689 eq( spacing, curr_val, "ICONVERTICALSPACING", "%d" );
690 eq( GetSystemMetrics( SM_CYICONSPACING ), curr_val, "SM_CYICONSPACING", "%d" );
692 rc=SystemParametersInfoA( SPI_ICONVERTICALSPACING, old_spacing, 0,
693 SPIF_UPDATEINIFILE );
694 ok(rc!=0,"***warning*** failed to restore the original value: rc=%d err=%ld\n",rc,GetLastError());
697 static void test_SPI_SETICONTITLEWRAP( void ) /* 26 */
701 const UINT vals[]={TRUE,FALSE};
704 /* These tests hang when XFree86 4.0 for Windows is running (tested on
705 * WinNT, SP2, Cygwin/XFree 4.1.0. Skip the test when XFree86 is
708 if (FindWindowA( NULL, "Cygwin/XFree86" ))
711 trace("testing SPI_{GET,SET}ICONTITLEWRAP\n");
712 rc=SystemParametersInfoA( SPI_GETICONTITLEWRAP, 0, &old_b, 0 );
714 if (rc==0 && (GetLastError()==0 || GetLastError()==ERROR_CALL_NOT_IMPLEMENTED))
716 /* SPI_{GET,SET}ICONTITLEWRAP is not implemented on a standard Win98 SE */
717 trace("SPI_{GET,SET}ICONTITLEWRAP not supported on this platform\n");
720 ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
722 for (i=0;i<sizeof(vals)/sizeof(*vals);i++)
726 rc=SystemParametersInfoA( SPI_SETICONTITLEWRAP, vals[i], 0,
727 SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
728 ok(rc!=0,"%d: rc=%d err=%ld\n",i,rc,GetLastError());
729 test_change_message( SPI_SETICONTITLEWRAP, 1 );
730 test_reg_key_ex( SPI_SETICONTITLEWRAP_REGKEY1,
731 SPI_SETICONTITLEWRAP_REGKEY2,
732 SPI_SETICONTITLEWRAP_VALNAME,
733 vals[i] ? "1" : "0" );
735 rc=SystemParametersInfoA( SPI_GETICONTITLEWRAP, 0, &v, 0 );
736 ok(rc!=0,"%d: rc=%d err=%ld\n",i,rc,GetLastError());
737 eq( v, vals[i], "SPI_{GET,SET}ICONTITLEWRAP", "%d" );
740 rc=SystemParametersInfoA( SPI_SETICONTITLEWRAP, old_b, 0, SPIF_UPDATEINIFILE );
741 ok(rc!=0,"***warning*** failed to restore the original value: rc=%d err=%ld\n",rc,GetLastError());
744 static void test_SPI_SETMENUDROPALIGNMENT( void ) /* 28 */
748 const UINT vals[]={TRUE,FALSE};
751 trace("testing SPI_{GET,SET}MENUDROPALIGNMENT\n");
752 rc=SystemParametersInfoA( SPI_GETMENUDROPALIGNMENT, 0, &old_b, 0 );
753 ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
755 for (i=0;i<sizeof(vals)/sizeof(*vals);i++)
759 rc=SystemParametersInfoA( SPI_SETMENUDROPALIGNMENT, vals[i], 0,
760 SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
761 ok(rc!=0,"%d: rc=%d err=%ld\n",i,rc,GetLastError());
762 test_change_message( SPI_SETMENUDROPALIGNMENT, 0 );
763 test_reg_key_ex( SPI_SETMENUDROPALIGNMENT_REGKEY1,
764 SPI_SETMENUDROPALIGNMENT_REGKEY2,
765 SPI_SETMENUDROPALIGNMENT_VALNAME,
766 vals[i] ? "1" : "0" );
768 rc=SystemParametersInfoA( SPI_GETMENUDROPALIGNMENT, 0, &v, 0 );
769 ok(rc!=0,"%d: rc=%d err=%ld\n",i,rc,GetLastError());
770 eq( v, vals[i], "SPI_{GET,SET}MENUDROPALIGNMENT", "%d" );
771 eq( GetSystemMetrics( SM_MENUDROPALIGNMENT ), (int)vals[i],
772 "SM_MENUDROPALIGNMENT", "%d" );
775 rc=SystemParametersInfoA( SPI_SETMENUDROPALIGNMENT, old_b, 0,
776 SPIF_UPDATEINIFILE );
777 ok(rc!=0,"***warning*** failed to restore the original value: rc=%d err=%ld\n",rc,GetLastError());
780 static void test_SPI_SETDOUBLECLKWIDTH( void ) /* 29 */
784 const UINT vals[]={0,10000};
787 trace("testing SPI_{GET,SET}DOUBLECLKWIDTH\n");
788 old_width = GetSystemMetrics( SM_CXDOUBLECLK );
790 for (i=0;i<sizeof(vals)/sizeof(*vals);i++)
794 rc=SystemParametersInfoA( SPI_SETDOUBLECLKWIDTH, vals[i], 0,
795 SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
796 ok(rc!=0,"%d: rc=%d err=%ld\n",i,rc,GetLastError());
797 test_change_message( SPI_SETDOUBLECLKWIDTH, 0 );
798 sprintf( buf, "%d", vals[i] );
799 test_reg_key_ex( SPI_SETDOUBLECLKWIDTH_REGKEY1,
800 SPI_SETDOUBLECLKWIDTH_REGKEY2,
801 SPI_SETDOUBLECLKWIDTH_VALNAME, buf );
802 eq( GetSystemMetrics( SM_CXDOUBLECLK ), (int)vals[i],
803 "SM_CXDOUBLECLK", "%d" );
806 rc=SystemParametersInfoA( SPI_SETDOUBLECLKWIDTH, old_width, 0,
807 SPIF_UPDATEINIFILE );
808 ok(rc!=0,"***warning*** failed to restore the original value: rc=%d err=%ld\n",rc,GetLastError());
811 static void test_SPI_SETDOUBLECLKHEIGHT( void ) /* 30 */
815 const UINT vals[]={0,10000};
818 trace("testing SPI_{GET,SET}DOUBLECLKHEIGHT\n");
819 old_height = GetSystemMetrics( SM_CYDOUBLECLK );
821 for (i=0;i<sizeof(vals)/sizeof(*vals);i++)
825 rc=SystemParametersInfoA( SPI_SETDOUBLECLKHEIGHT, vals[i], 0,
826 SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
827 ok(rc!=0,"%d: rc=%d err=%ld\n",i,rc,GetLastError());
828 test_change_message( SPI_SETDOUBLECLKHEIGHT, 0 );
829 sprintf( buf, "%d", vals[i] );
830 test_reg_key_ex( SPI_SETDOUBLECLKHEIGHT_REGKEY1,
831 SPI_SETDOUBLECLKHEIGHT_REGKEY2,
832 SPI_SETDOUBLECLKHEIGHT_VALNAME, buf );
833 eq( GetSystemMetrics( SM_CYDOUBLECLK ), (int)vals[i],
834 "SM_CYDOUBLECLK", "%d" );
837 rc=SystemParametersInfoA( SPI_SETDOUBLECLKHEIGHT, old_height, 0,
838 SPIF_UPDATEINIFILE );
839 ok(rc!=0,"***warning*** failed to restore the original value: rc=%d err=%ld\n",rc,GetLastError());
842 static void test_SPI_SETDOUBLECLICKTIME( void ) /* 32 */
850 trace("testing SPI_{GET,SET}DOUBLECLICKTIME\n");
851 old_time = GetDoubleClickTime();
854 rc=SystemParametersInfoA( SPI_SETDOUBLECLICKTIME, curr_val, 0,
855 SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
856 ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
857 test_change_message( SPI_SETDOUBLECLICKTIME, 0 );
858 sprintf( buf, "%d", curr_val );
859 test_reg_key( SPI_SETDOUBLECLICKTIME_REGKEY,
860 SPI_SETDOUBLECLICKTIME_VALNAME, buf );
861 curr_val = 500; /* used value for 0 */
862 eq( GetDoubleClickTime(), curr_val, "GetDoubleClickTime", "%d" );
865 rc=SystemParametersInfoA( SPI_SETDOUBLECLICKTIME, curr_val, 0,
866 SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
867 ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
868 test_change_message( SPI_SETDOUBLECLICKTIME, 0 );
869 sprintf( buf, "%d", curr_val );
870 test_reg_key( SPI_SETDOUBLECLICKTIME_REGKEY,
871 SPI_SETDOUBLECLICKTIME_VALNAME, buf );
872 eq( GetDoubleClickTime(), curr_val, "GetDoubleClickTime", "%d" );
874 saved_val = curr_val;
877 SetDoubleClickTime( curr_val );
878 sprintf( buf, "%d", saved_val );
879 test_reg_key( SPI_SETDOUBLECLICKTIME_REGKEY,
880 SPI_SETDOUBLECLICKTIME_VALNAME, buf );
881 curr_val = 500; /* used value for 0 */
882 eq( GetDoubleClickTime(), curr_val, "GetDoubleClickTime", "%d" );
885 SetDoubleClickTime( curr_val );
886 sprintf( buf, "%d", saved_val );
887 test_reg_key( SPI_SETDOUBLECLICKTIME_REGKEY,
888 SPI_SETDOUBLECLICKTIME_VALNAME, buf );
889 eq( GetDoubleClickTime(), curr_val, "GetDoubleClickTime", "%d" );
891 rc=SystemParametersInfoA(SPI_SETDOUBLECLICKTIME, old_time, 0, SPIF_UPDATEINIFILE);
892 ok(rc!=0,"***warning*** failed to restore the original value: rc=%d err=%ld\n",rc,GetLastError());
895 static void test_SPI_SETMOUSEBUTTONSWAP( void ) /* 33 */
899 const UINT vals[]={TRUE,FALSE};
902 trace("testing SPI_{GET,SET}MOUSEBUTTONSWAP\n");
903 old_b = GetSystemMetrics( SM_SWAPBUTTON );
905 for (i=0;i<sizeof(vals)/sizeof(*vals);i++)
907 rc=SystemParametersInfoA( SPI_SETMOUSEBUTTONSWAP, vals[i], 0,
908 SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
909 ok(rc!=0,"%d: rc=%d err=%ld\n",i,rc,GetLastError());
910 test_change_message( SPI_SETMOUSEBUTTONSWAP, 0 );
911 test_reg_key( SPI_SETMOUSEBUTTONSWAP_REGKEY,
912 SPI_SETMOUSEBUTTONSWAP_VALNAME,
913 vals[i] ? "1" : "0" );
914 eq( GetSystemMetrics( SM_SWAPBUTTON ), (int)vals[i],
915 "SM_SWAPBUTTON", "%d" );
918 rc=SystemParametersInfoA( SPI_SETMOUSEBUTTONSWAP, old_b, 0,
919 SPIF_UPDATEINIFILE );
920 ok(rc!=0,"***warning*** failed to restore the original value: rc=%d err=%ld\n",rc,GetLastError());
923 static void test_SPI_SETFASTTASKSWITCH( void ) /* 36 */
928 trace("testing SPI_GETFASTTASKSWITCH\n");
929 rc=SystemParametersInfoA( SPI_GETFASTTASKSWITCH, 0, &v, 0 );
930 ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
931 /* there is not a single Windows platform on which SPI_GETFASTTASKSWITCH
932 * works. That sure simplifies testing!
936 static void test_SPI_SETDRAGFULLWINDOWS( void ) /* 37 */
940 const UINT vals[]={TRUE,FALSE};
943 trace("testing SPI_{GET,SET}DRAGFULLWINDOWS\n");
944 rc=SystemParametersInfoA( SPI_GETDRAGFULLWINDOWS, 0, &old_b, 0 );
945 if (rc==0 && (GetLastError()==0 || GetLastError()==ERROR_CALL_NOT_IMPLEMENTED))
947 /* SPI_{GET,SET}DRAGFULLWINDOWS is not implemented on Win95 */
948 trace("SPI_{GET,SET}DRAGFULLWINDOWS not supported on this platform\n");
951 ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
953 for (i=0;i<sizeof(vals)/sizeof(*vals);i++)
957 rc=SystemParametersInfoA( SPI_SETDRAGFULLWINDOWS, vals[i], 0,
958 SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
959 ok(rc!=0,"%d: rc=%d err=%ld\n",i,rc,GetLastError());
960 test_change_message( SPI_SETDRAGFULLWINDOWS, 0 );
961 test_reg_key( SPI_SETDRAGFULLWINDOWS_REGKEY,
962 SPI_SETDRAGFULLWINDOWS_VALNAME,
963 vals[i] ? "1" : "0" );
965 rc=SystemParametersInfoA( SPI_GETDRAGFULLWINDOWS, 0, &v, 0 );
966 ok(rc!=0,"%d: rc=%d err=%ld\n",i,rc,GetLastError());
967 eq( v, vals[i], "SPI_{GET,SET}DRAGFULLWINDOWS", "%d" );
970 rc=SystemParametersInfoA( SPI_SETDRAGFULLWINDOWS, old_b, 0, SPIF_UPDATEINIFILE );
971 ok(rc!=0,"***warning*** failed to restore the original value: rc=%d err=%ld\n",rc,GetLastError());
974 static void test_SPI_SETMINIMIZEDMETRICS( void ) /* 44 */
977 MINIMIZEDMETRICS lpMm_orig;
978 MINIMIZEDMETRICS lpMm_new;
979 MINIMIZEDMETRICS lpMm_cur;
981 lpMm_orig.cbSize = sizeof(MINIMIZEDMETRICS);
982 lpMm_new.cbSize = sizeof(MINIMIZEDMETRICS);
983 lpMm_cur.cbSize = sizeof(MINIMIZEDMETRICS);
985 trace("testing SPI_{GET,SET}MINIMIZEDMETRICS\n");
986 rc=SystemParametersInfoA( SPI_GETMINIMIZEDMETRICS, sizeof(MINIMIZEDMETRICS), &lpMm_orig, FALSE );
987 ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
989 lpMm_cur.iWidth = 180;
990 lpMm_cur.iHorzGap = 1;
991 lpMm_cur.iVertGap = 1;
992 lpMm_cur.iArrange = 5;
994 rc=SystemParametersInfoA( SPI_SETMINIMIZEDMETRICS, sizeof(MINIMIZEDMETRICS), &lpMm_cur, FALSE );
995 ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
997 rc=SystemParametersInfoA( SPI_GETMINIMIZEDMETRICS, sizeof(MINIMIZEDMETRICS), &lpMm_new, FALSE );
998 ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
1000 eq( lpMm_new.iWidth, lpMm_cur.iWidth, "iWidth", "%d" );
1001 eq( lpMm_new.iHorzGap, lpMm_cur.iHorzGap, "iHorzGap", "%d" );
1002 eq( lpMm_new.iVertGap, lpMm_cur.iVertGap, "iVertGap", "%d" );
1003 eq( lpMm_new.iArrange, lpMm_cur.iArrange, "iArrange", "%d" );
1005 eq( GetSystemMetrics( SM_CXMINIMIZED ) - 6,
1006 lpMm_new.iWidth, "iWidth", "%d" );
1007 eq( GetSystemMetrics( SM_CXMINSPACING ) - GetSystemMetrics( SM_CXMINIMIZED ),
1008 lpMm_new.iHorzGap, "iHorzGap", "%d" );
1009 eq( GetSystemMetrics( SM_CYMINSPACING ) - GetSystemMetrics( SM_CYMINIMIZED ),
1010 lpMm_new.iVertGap, "iVertGap", "%d" );
1011 eq( GetSystemMetrics( SM_ARRANGE ),
1012 lpMm_new.iArrange, "iArrange", "%d" );
1014 rc=SystemParametersInfoA( SPI_SETMINIMIZEDMETRICS, sizeof(MINIMIZEDMETRICS), &lpMm_orig, FALSE );
1015 ok(rc!=0,"***warning*** failed to restore the original value: rc=%d err=%ld\n",rc,GetLastError());
1017 rc=SystemParametersInfoA( SPI_GETMINIMIZEDMETRICS, sizeof(MINIMIZEDMETRICS), &lpMm_new, FALSE );
1018 ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
1020 eq( lpMm_new.iWidth, lpMm_orig.iWidth, "iWidth", "%d" );
1021 eq( lpMm_new.iHorzGap, lpMm_orig.iHorzGap, "iHorzGap", "%d" );
1022 eq( lpMm_new.iVertGap, lpMm_orig.iVertGap, "iVertGap", "%d" );
1023 eq( lpMm_new.iArrange, lpMm_orig.iArrange, "iArrange", "%d" );
1026 static void test_SPI_SETICONMETRICS( void ) /* 46 */
1029 ICONMETRICSA im_orig;
1030 ICONMETRICSA im_new;
1031 ICONMETRICSA im_cur;
1033 im_orig.cbSize = sizeof(ICONMETRICSA);
1034 im_new.cbSize = sizeof(ICONMETRICSA);
1035 im_cur.cbSize = sizeof(ICONMETRICSA);
1037 trace("testing SPI_{GET,SET}ICONMETRICS\n");
1038 rc=SystemParametersInfoA( SPI_GETICONMETRICS, sizeof(ICONMETRICSA), &im_orig, FALSE );
1039 ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
1041 im_cur.iHorzSpacing = 65;
1042 im_cur.iVertSpacing = 65;
1043 im_cur.iTitleWrap = 0;
1044 im_cur.lfFont.lfHeight = 1;
1045 im_cur.lfFont.lfWidth = 1;
1046 im_cur.lfFont.lfEscapement = 1;
1047 im_cur.lfFont.lfWeight = 1;
1048 im_cur.lfFont.lfItalic = 1;
1049 im_cur.lfFont.lfStrikeOut = 1;
1050 im_cur.lfFont.lfUnderline = 1;
1051 im_cur.lfFont.lfCharSet = 1;
1052 im_cur.lfFont.lfOutPrecision = 1;
1053 im_cur.lfFont.lfClipPrecision = 1;
1054 im_cur.lfFont.lfPitchAndFamily = 1;
1055 im_cur.lfFont.lfQuality = 1;
1057 rc=SystemParametersInfoA( SPI_SETICONMETRICS, sizeof(ICONMETRICSA), &im_cur, FALSE );
1058 ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
1060 rc=SystemParametersInfoA( SPI_GETICONMETRICS, sizeof(ICONMETRICSA), &im_new, FALSE );
1061 ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
1063 eq( im_new.iHorzSpacing, im_cur.iHorzSpacing, "iHorzSpacing", "%d" );
1064 eq( im_new.iVertSpacing, im_cur.iVertSpacing, "iVertSpacing", "%d" );
1065 eq( im_new.iTitleWrap, im_cur.iTitleWrap, "iTitleWrap", "%d" );
1067 eq( im_new.lfFont.lfHeight, im_cur.lfFont.lfHeight, "lfHeight", "%ld" );
1068 eq( im_new.lfFont.lfWidth, im_cur.lfFont.lfWidth, "lfWidth", "%ld" );
1069 eq( im_new.lfFont.lfEscapement, im_cur.lfFont.lfEscapement, "lfEscapement", "%ld" );
1070 eq( im_new.lfFont.lfWeight, im_cur.lfFont.lfWeight, "lfWeight", "%ld" );
1071 eq( im_new.lfFont.lfItalic, im_cur.lfFont.lfItalic, "lfItalic", "%d" );
1072 eq( im_new.lfFont.lfStrikeOut, im_cur.lfFont.lfStrikeOut, "lfStrikeOut", "%d" );
1073 eq( im_new.lfFont.lfUnderline, im_cur.lfFont.lfUnderline, "lfUnderline", "%d" );
1074 eq( im_new.lfFont.lfCharSet, im_cur.lfFont.lfCharSet, "lfCharSet", "%d" );
1075 eq( im_new.lfFont.lfOutPrecision, im_cur.lfFont.lfOutPrecision, "lfOutPrecision", "%d" );
1076 eq( im_new.lfFont.lfClipPrecision, im_cur.lfFont.lfClipPrecision, "lfClipPrecision", "%d" );
1077 eq( im_new.lfFont.lfPitchAndFamily, im_cur.lfFont.lfPitchAndFamily, "lfPitchAndFamily", "%d" );
1078 eq( im_new.lfFont.lfQuality, im_cur.lfFont.lfQuality, "lfQuality", "%d" );
1080 eq( GetSystemMetrics( SM_CXICONSPACING ),
1081 im_new.iHorzSpacing, "iHorzSpacing", "%d" );
1082 eq( GetSystemMetrics( SM_CYICONSPACING ),
1083 im_new.iVertSpacing, "iVertSpacing", "%d" );
1085 rc=SystemParametersInfoA( SPI_SETICONMETRICS, sizeof(ICONMETRICSA), &im_orig, FALSE );
1086 ok(rc!=0,"***warning*** failed to restore the original value: rc=%d err=%ld\n",rc,GetLastError());
1088 rc=SystemParametersInfoA( SPI_GETICONMETRICS, sizeof(ICONMETRICSA), &im_new, FALSE );
1089 ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
1091 eq( im_new.iHorzSpacing, im_orig.iHorzSpacing, "iHorzSpacing", "%d" );
1092 eq( im_new.iVertSpacing, im_orig.iVertSpacing, "iVertSpacing", "%d" );
1093 eq( im_new.iTitleWrap, im_orig.iTitleWrap, "iTitleWrap", "%d" );
1096 static void test_SPI_SETWORKAREA( void ) /* 47 */
1103 trace("testing SPI_{GET,SET}WORKAREA\n");
1104 rc=SystemParametersInfoA(SPI_GETWORKAREA, 0, &old_area, 0);
1105 ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
1107 /* Modify the work area only minimally as this causes the icons that
1108 * fall outside it to be moved around thus requiring the user to
1109 * reposition them manually one by one.
1110 * Changing the work area by just one pixel should make this occurrence
1111 * reasonably unlikely.
1113 curr_val.left = old_area.left;
1114 curr_val.top = old_area.top;
1115 curr_val.right = old_area.right-1;
1116 curr_val.bottom = old_area.bottom-1;
1117 rc=SystemParametersInfoA( SPI_SETWORKAREA, 0, &curr_val,
1118 SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
1119 ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
1120 test_change_message( SPI_SETWORKAREA, 0 );
1121 rc=SystemParametersInfoA( SPI_GETWORKAREA, 0, &area, 0 );
1122 ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
1123 eq( area.left, curr_val.left, "left", "%ld" );
1124 eq( area.top, curr_val.top, "top", "%ld" );
1125 eq( area.right, curr_val.right, "right", "%ld" );
1126 eq( area.bottom, curr_val.bottom, "bottom", "%ld" );
1128 rc=SystemParametersInfoA( SPI_SETWORKAREA, 0, &old_area,
1129 SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
1130 ok(rc!=0,"***warning*** failed to restore the original value: rc=%d err=%ld\n",rc,GetLastError());
1131 test_change_message( SPI_SETWORKAREA, 0 );
1132 rc=SystemParametersInfoA( SPI_GETWORKAREA, 0, &area, 0 );
1133 ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
1134 eq( area.left, old_area.left, "left", "%ld" );
1135 eq( area.top, old_area.top, "top", "%ld" );
1136 eq( area.right, old_area.right, "right", "%ld" );
1137 eq( area.bottom, old_area.bottom, "bottom", "%ld" );
1140 static void test_SPI_SETSHOWSOUNDS( void ) /* 57 */
1144 const UINT vals[]={TRUE,FALSE};
1147 trace("testing SPI_{GET,SET}SHOWSOUNDS\n");
1149 rc=SystemParametersInfoA( SPI_GETSHOWSOUNDS, 0, &old_b, 0 );
1150 if (rc==0 && (GetLastError()==0 || GetLastError()==ERROR_INVALID_SPI_VALUE))
1152 /* SPI_{GET,SET}SHOWSOUNDS is completely broken on Win9x */
1153 trace("SPI_{GET,SET}SHOWSOUNDS not supported on this platform\n");
1156 ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
1158 for (i=0;i<sizeof(vals)/sizeof(*vals);i++)
1162 rc=SystemParametersInfoA( SPI_SETSHOWSOUNDS, vals[i], 0,
1163 SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
1164 ok(rc!=0,"%d: rc=%d err=%ld\n",i,rc,GetLastError());
1165 test_change_message( SPI_SETSHOWSOUNDS, 0 );
1166 test_reg_key( SPI_SETSHOWSOUNDS_REGKEY,
1167 SPI_SETSHOWSOUNDS_VALNAME,
1168 vals[i] ? "1" : "0" );
1170 rc=SystemParametersInfoA( SPI_GETSHOWSOUNDS, 0, &v, 0 );
1171 ok(rc!=0,"%d: rc=%d err=%ld\n",i,rc,GetLastError());
1172 eq( v, vals[i], "SPI_GETSHOWSOUNDS", "%d" );
1173 eq( GetSystemMetrics( SM_SHOWSOUNDS ), (int)vals[i],
1174 "SM_SHOWSOUNDS", "%d" );
1177 rc=SystemParametersInfoA( SPI_SETSHOWSOUNDS, old_b, 0, SPIF_UPDATEINIFILE );
1178 ok(rc!=0,"***warning*** failed to restore the original value: rc=%d err=%ld\n",rc,GetLastError());
1181 static void test_SPI_SETKEYBOARDPREF( void ) /* 69 */
1185 const UINT vals[]={TRUE,FALSE};
1188 trace("testing SPI_{GET,SET}KEYBOARDPREF\n");
1190 rc=SystemParametersInfoA( SPI_GETKEYBOARDPREF, 0, &old_b, 0 );
1191 if (rc==0 && (GetLastError()==0 || GetLastError()==ERROR_INVALID_SPI_VALUE))
1193 trace("SPI_{GET,SET}KEYBOARDPREF not supported on this platform\n");
1196 ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
1198 for (i=0;i<sizeof(vals)/sizeof(*vals);i++)
1202 rc=SystemParametersInfoA( SPI_SETKEYBOARDPREF, vals[i], 0,
1203 SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
1204 ok(rc!=0,"%d: rc=%d err=%ld\n",i,rc,GetLastError());
1205 test_change_message( SPI_SETKEYBOARDPREF, 0 );
1206 test_reg_key( SPI_SETKEYBOARDPREF_REGKEY,
1207 SPI_SETKEYBOARDPREF_VALNAME,
1208 vals[i] ? "1" : "0" );
1210 rc=SystemParametersInfoA( SPI_GETKEYBOARDPREF, 0, &v, 0 );
1211 ok(rc!=0,"%d: rc=%d err=%ld\n",i,rc,GetLastError());
1212 eq( v, vals[i], "SPI_GETKEYBOARDPREF", "%d" );
1215 rc=SystemParametersInfoA( SPI_SETKEYBOARDPREF, old_b, 0, SPIF_UPDATEINIFILE );
1216 ok(rc!=0,"***warning*** failed to restore the original value: rc=%d err=%ld\n",rc,GetLastError());
1219 static void test_SPI_SETSCREENREADER( void ) /* 71 */
1223 const UINT vals[]={TRUE,FALSE};
1226 trace("testing SPI_{GET,SET}SCREENREADER\n");
1228 rc=SystemParametersInfoA( SPI_GETSCREENREADER, 0, &old_b, 0 );
1229 if (rc==0 && (GetLastError()==0 || GetLastError()==ERROR_INVALID_SPI_VALUE))
1231 trace("SPI_{GET,SET}SCREENREADER not supported on this platform\n");
1234 ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
1236 for (i=0;i<sizeof(vals)/sizeof(*vals);i++)
1240 rc=SystemParametersInfoA( SPI_SETSCREENREADER, vals[i], 0,
1241 SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
1242 ok(rc!=0,"%d: rc=%d err=%ld\n",i,rc,GetLastError());
1243 test_change_message( SPI_SETSCREENREADER, 0 );
1244 test_reg_key( SPI_SETSCREENREADER_REGKEY,
1245 SPI_SETSCREENREADER_VALNAME,
1246 vals[i] ? "1" : "0" );
1248 rc=SystemParametersInfoA( SPI_GETSCREENREADER, 0, &v, 0 );
1249 ok(rc!=0,"%d: rc=%d err=%ld\n",i,rc,GetLastError());
1250 eq( v, vals[i], "SPI_GETSCREENREADER", "%d" );
1253 rc=SystemParametersInfoA( SPI_SETSCREENREADER, old_b, 0, SPIF_UPDATEINIFILE );
1254 ok(rc!=0,"***warning*** failed to restore the original value: rc=%d err=%ld\n",rc,GetLastError());
1257 static void test_SPI_SETLOWPOWERACTIVE( void ) /* 85 */
1261 const UINT vals[]={TRUE,FALSE};
1264 trace("testing SPI_{GET,SET}LOWPOWERACTIVE\n");
1266 rc=SystemParametersInfoA( SPI_GETLOWPOWERACTIVE, 0, &old_b, 0 );
1267 if (rc==0 && (GetLastError()==0 || GetLastError()==ERROR_INVALID_SPI_VALUE))
1269 trace("SPI_{GET,SET}LOWPOWERACTIVE not supported on this platform\n");
1272 ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
1274 for (i=0;i<sizeof(vals)/sizeof(*vals);i++)
1278 rc=SystemParametersInfoA( SPI_SETLOWPOWERACTIVE, vals[i], 0,
1279 SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
1280 ok(rc!=0,"%d: rc=%d err=%ld\n",i,rc,GetLastError());
1281 test_change_message( SPI_SETLOWPOWERACTIVE, 0 );
1282 test_reg_key( SPI_SETLOWPOWERACTIVE_REGKEY,
1283 SPI_SETLOWPOWERACTIVE_VALNAME,
1284 vals[i] ? "1" : "0" );
1286 rc=SystemParametersInfoA( SPI_GETLOWPOWERACTIVE, 0, &v, 0 );
1287 ok(rc!=0,"%d: rc=%d err=%ld\n",i,rc,GetLastError());
1288 eq( v, vals[i], "SPI_GETLOWPOWERACTIVE", "%d" );
1291 rc=SystemParametersInfoA( SPI_SETLOWPOWERACTIVE, old_b, 0, SPIF_UPDATEINIFILE );
1292 ok(rc!=0,"***warning*** failed to restore the original value: rc=%d err=%ld\n",rc,GetLastError());
1295 static void test_SPI_SETPOWEROFFACTIVE( void ) /* 86 */
1299 const UINT vals[]={TRUE,FALSE};
1302 trace("testing SPI_{GET,SET}POWEROFFACTIVE\n");
1304 rc=SystemParametersInfoA( SPI_GETPOWEROFFACTIVE, 0, &old_b, 0 );
1305 if (rc==0 && (GetLastError()==0 || GetLastError()==ERROR_INVALID_SPI_VALUE))
1307 trace("SPI_{GET,SET}POWEROFFACTIVE not supported on this platform\n");
1310 ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
1312 for (i=0;i<sizeof(vals)/sizeof(*vals);i++)
1316 rc=SystemParametersInfoA( SPI_SETPOWEROFFACTIVE, vals[i], 0,
1317 SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
1318 ok(rc!=0,"%d: rc=%d err=%ld\n",i,rc,GetLastError());
1319 test_change_message( SPI_SETPOWEROFFACTIVE, 0 );
1320 test_reg_key( SPI_SETPOWEROFFACTIVE_REGKEY,
1321 SPI_SETPOWEROFFACTIVE_VALNAME,
1322 vals[i] ? "1" : "0" );
1324 rc=SystemParametersInfoA( SPI_GETPOWEROFFACTIVE, 0, &v, 0 );
1325 ok(rc!=0,"%d: rc=%d err=%ld\n",i,rc,GetLastError());
1326 eq( v, vals[i], "SPI_GETPOWEROFFACTIVE", "%d" );
1329 rc=SystemParametersInfoA( SPI_SETPOWEROFFACTIVE, old_b, 0, SPIF_UPDATEINIFILE );
1330 ok(rc!=0,"***warning*** failed to restore the original value: rc=%d err=%ld\n",rc,GetLastError());
1333 static void test_SPI_SETMOUSEHOVERWIDTH( void ) /* 99 */
1337 const UINT vals[]={0,32767};
1340 trace("testing SPI_{GET,SET}MOUSEHOVERWIDTH\n");
1341 rc=SystemParametersInfoA( SPI_GETMOUSEHOVERWIDTH, 0, &old_width, 0 );
1342 if (rc==0 && (GetLastError()==0 || GetLastError()==ERROR_INVALID_SPI_VALUE))
1344 /* SPI_{GET,SET}MOUSEHOVERWIDTH does not seem to be supported on Win9x despite
1345 * what MSDN states (Verified on Win98SE)
1347 trace("SPI_{GET,SET}MOUSEHOVERWIDTH not supported on this platform\n");
1350 ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
1352 for (i=0;i<sizeof(vals)/sizeof(*vals);i++)
1357 rc=SystemParametersInfoA( SPI_SETMOUSEHOVERWIDTH, vals[i], 0,
1358 SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
1359 ok(rc!=0,"%d: rc=%d err=%ld\n",i,rc,GetLastError());
1360 test_change_message( SPI_SETMOUSEHOVERWIDTH, 0 );
1361 sprintf( buf, "%d", vals[i] );
1362 test_reg_key( SPI_SETMOUSEHOVERWIDTH_REGKEY,
1363 SPI_SETMOUSEHOVERWIDTH_VALNAME, buf );
1365 SystemParametersInfoA( SPI_GETMOUSEHOVERWIDTH, 0, &v, 0 );
1366 ok(rc!=0,"%d: rc=%d err=%ld\n",i,rc,GetLastError());
1367 eq( v, vals[i], "SPI_{GET,SET}MOUSEHOVERWIDTH", "%d" );
1370 rc=SystemParametersInfoA( SPI_SETMOUSEHOVERWIDTH, old_width, 0,
1371 SPIF_UPDATEINIFILE );
1372 ok(rc!=0,"***warning*** failed to restore the original value: rc=%d err=%ld\n",rc,GetLastError());
1375 static void test_SPI_SETMOUSEHOVERHEIGHT( void ) /* 101 */
1379 const UINT vals[]={0,32767};
1382 trace("testing SPI_{GET,SET}MOUSEHOVERHEIGHT\n");
1383 rc=SystemParametersInfoA( SPI_GETMOUSEHOVERHEIGHT, 0, &old_height, 0 );
1384 if (rc==0 && (GetLastError()==0 || GetLastError()==ERROR_INVALID_SPI_VALUE))
1386 /* SPI_{GET,SET}MOUSEHOVERWIDTH does not seem to be supported on Win9x despite
1387 * what MSDN states (Verified on Win98SE)
1389 trace("SPI_{GET,SET}MOUSEHOVERHEIGHT not supported on this platform\n");
1392 ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
1394 for (i=0;i<sizeof(vals)/sizeof(*vals);i++)
1399 rc=SystemParametersInfoA( SPI_SETMOUSEHOVERHEIGHT, vals[i], 0,
1400 SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
1401 ok(rc!=0,"%d: rc=%d err=%ld\n",i,rc,GetLastError());
1402 test_change_message( SPI_SETMOUSEHOVERHEIGHT, 0 );
1403 sprintf( buf, "%d", vals[i] );
1404 test_reg_key( SPI_SETMOUSEHOVERHEIGHT_REGKEY,
1405 SPI_SETMOUSEHOVERHEIGHT_VALNAME, buf );
1407 SystemParametersInfoA( SPI_GETMOUSEHOVERHEIGHT, 0, &v, 0 );
1408 ok(rc!=0,"%d: rc=%d err=%ld\n",i,rc,GetLastError());
1409 eq( v, vals[i], "SPI_{GET,SET}MOUSEHOVERHEIGHT", "%d" );
1412 rc=SystemParametersInfoA( SPI_SETMOUSEHOVERHEIGHT, old_height, 0,
1413 SPIF_UPDATEINIFILE );
1414 ok(rc!=0,"***warning*** failed to restore the original value: rc=%d err=%ld\n",rc,GetLastError());
1417 static void test_SPI_SETMOUSEHOVERTIME( void ) /* 103 */
1422 /* Windows XP accepts 10 as the minimum hover time. Any value below will be
1423 * defaulted to a value of 10 automatically.
1425 const UINT vals[]={10,32767};
1428 trace("testing SPI_{GET,SET}MOUSEHOVERTIME\n");
1429 rc=SystemParametersInfoA( SPI_GETMOUSEHOVERTIME, 0, &old_time, 0 );
1430 if (rc==0 && (GetLastError()==0 || GetLastError()==ERROR_INVALID_SPI_VALUE))
1432 /* SPI_{GET,SET}MOUSEHOVERWIDTH does not seem to be supported on Win9x despite
1433 * what MSDN states (Verified on Win98SE)
1435 trace("SPI_{GET,SET}MOUSEHOVERTIME not supported on this platform\n");
1438 ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
1440 for (i=0;i<sizeof(vals)/sizeof(*vals);i++)
1445 rc=SystemParametersInfoA( SPI_SETMOUSEHOVERTIME, vals[i], 0,
1446 SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
1447 ok(rc!=0,"%d: rc=%d err=%ld\n",i,rc,GetLastError());
1448 test_change_message( SPI_SETMOUSEHOVERTIME, 0 );
1449 sprintf( buf, "%d", vals[i] );
1450 test_reg_key( SPI_SETMOUSEHOVERTIME_REGKEY,
1451 SPI_SETMOUSEHOVERTIME_VALNAME, buf );
1453 SystemParametersInfoA( SPI_GETMOUSEHOVERTIME, 0, &v, 0 );
1454 ok(rc!=0,"%d: rc=%d err=%ld\n",i,rc,GetLastError());
1455 eq( v, vals[i], "SPI_{GET,SET}MOUSEHOVERTIME", "%d" );
1458 rc=SystemParametersInfoA( SPI_SETMOUSEHOVERTIME, old_time, 0,
1459 SPIF_UPDATEINIFILE );
1460 ok(rc!=0,"***warning*** failed to restore the original value: rc=%d err=%ld\n",rc,GetLastError());
1463 static void test_SPI_SETWHEELSCROLLLINES( void ) /* 105 */
1467 const UINT vals[]={0,32767};
1470 trace("testing SPI_{GET,SET}WHEELSCROLLLINES\n");
1471 rc=SystemParametersInfoA( SPI_GETWHEELSCROLLLINES, 0, &old_lines, 0 );
1472 if (rc==0 && (GetLastError()==0 || GetLastError()==ERROR_INVALID_SPI_VALUE))
1474 /* SPI_{GET,SET}WHEELSCROLLLINES not supported on Windows 95 */
1475 trace("SPI_{GET,SET}WHEELSCROLLLINES not supported on this platform\n");
1478 ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
1480 for (i=0;i<sizeof(vals)/sizeof(*vals);i++)
1485 rc=SystemParametersInfoA( SPI_SETWHEELSCROLLLINES, vals[i], 0,
1486 SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
1487 ok(rc!=0,"%d: rc=%d err=%ld\n",i,rc,GetLastError());
1488 test_change_message( SPI_SETWHEELSCROLLLINES, 0 );
1489 sprintf( buf, "%d", vals[i] );
1490 test_reg_key( SPI_SETMOUSESCROLLLINES_REGKEY,
1491 SPI_SETMOUSESCROLLLINES_VALNAME, buf );
1493 SystemParametersInfoA( SPI_GETWHEELSCROLLLINES, 0, &v, 0 );
1494 ok(rc!=0,"%d: rc=%d err=%ld\n",i,rc,GetLastError());
1495 eq( v, vals[i], "SPI_{GET,SET}WHEELSCROLLLINES", "%d" );
1498 rc=SystemParametersInfoA( SPI_SETWHEELSCROLLLINES, old_lines, 0,
1499 SPIF_UPDATEINIFILE );
1500 ok(rc!=0,"***warning*** failed to restore the original value: rc=%d err=%ld\n",rc,GetLastError());
1503 static void test_SPI_SETMENUSHOWDELAY( void ) /* 107 */
1507 const UINT vals[]={0,32767};
1510 trace("testing SPI_{GET,SET}MENUSHOWDELAY\n");
1511 rc=SystemParametersInfoA( SPI_GETMENUSHOWDELAY, 0, &old_delay, 0 );
1512 if (rc==0 && (GetLastError()==0 || GetLastError()==ERROR_INVALID_SPI_VALUE))
1514 /* SPI_{GET,SET}MENUSHOWDELAY not supported on Windows 95 */
1515 trace("SPI_{GET,SET}MENUSHOWDELAY not supported on this platform\n");
1518 ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
1520 for (i=0;i<sizeof(vals)/sizeof(*vals);i++)
1525 rc=SystemParametersInfoA( SPI_SETMENUSHOWDELAY, vals[i], 0,
1526 SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
1527 ok(rc!=0,"%d: rc=%d err=%ld\n",i,rc,GetLastError());
1528 test_change_message( SPI_SETMENUSHOWDELAY, 0 );
1529 sprintf( buf, "%d", vals[i] );
1530 test_reg_key( SPI_SETMENUSHOWDELAY_REGKEY,
1531 SPI_SETMENUSHOWDELAY_VALNAME, buf );
1533 SystemParametersInfoA( SPI_GETMENUSHOWDELAY, 0, &v, 0 );
1534 ok(rc!=0,"%d: rc=%d err=%ld\n",i,rc,GetLastError());
1535 eq( v, vals[i], "SPI_{GET,SET}MENUSHOWDELAY", "%d" );
1538 rc=SystemParametersInfoA( SPI_SETMENUSHOWDELAY, old_delay, 0,
1539 SPIF_UPDATEINIFILE );
1540 ok(rc!=0,"***warning*** failed to restore the original value: rc=%d err=%ld\n",rc,GetLastError());
1543 static void test_SPI_SETWALLPAPER( void ) /* 115 */
1549 trace("testing SPI_{GET,SET}DESKWALLPAPER\n");
1551 rc=SystemParametersInfoA(SPI_GETDESKWALLPAPER, 260, oldval, 0);
1552 if (rc==0 && (GetLastError()==0 || GetLastError()==ERROR_INVALID_SPI_VALUE))
1554 /* SPI_{GET,SET}DESKWALLPAPER is completely broken on Win9x and
1555 * unimplemented on NT4
1557 trace("SPI_{GET,SET}DESKWALLPAPER not supported on this platform\n");
1560 ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
1563 rc=SystemParametersInfoA(SPI_SETDESKWALLPAPER, 0, newval, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE);
1564 ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
1565 test_change_message(SPI_SETDESKWALLPAPER, 0);
1567 rc=SystemParametersInfoA(SPI_SETDESKWALLPAPER, 0, oldval, SPIF_UPDATEINIFILE);
1568 ok(rc!=0,"***warning*** failed to restore the original value: rc=%d err=%ld\n",rc,GetLastError());
1570 test_reg_key(SPI_SETDESKWALLPAPER_REGKEY, SPI_SETDESKWALLPAPER_VALNAME, oldval);
1574 * Registry entries for the system parameters.
1575 * Names are created by 'SET' flags names.
1576 * We assume that corresponding 'GET' entries use the same registry keys.
1578 static DWORD WINAPI SysParamsThreadFunc( LPVOID lpParam )
1580 test_SPI_SETBEEP(); /* 1 */
1581 test_SPI_SETMOUSE(); /* 4 */
1582 /* Messes up systems settings on Win9x */
1583 /*test_SPI_SETBORDER();*/ /* 6 */
1584 test_SPI_SETKEYBOARDSPEED(); /* 10 */
1585 test_SPI_ICONHORIZONTALSPACING(); /* 13 */
1586 test_SPI_SETSCREENSAVETIMEOUT(); /* 14 */
1587 test_SPI_SETSCREENSAVEACTIVE(); /* 17 */
1588 test_SPI_SETGRIDGRANULARITY(); /* 19 */
1589 test_SPI_SETKEYBOARDDELAY(); /* 23 */
1590 test_SPI_ICONVERTICALSPACING(); /* 24 */
1591 test_SPI_SETICONTITLEWRAP(); /* 26 */
1592 test_SPI_SETMENUDROPALIGNMENT(); /* 28 */
1593 test_SPI_SETDOUBLECLKWIDTH(); /* 29 */
1594 test_SPI_SETDOUBLECLKHEIGHT(); /* 30 */
1595 test_SPI_SETDOUBLECLICKTIME(); /* 32 */
1596 test_SPI_SETMOUSEBUTTONSWAP(); /* 33 */
1597 test_SPI_SETFASTTASKSWITCH(); /* 36 */
1598 test_SPI_SETDRAGFULLWINDOWS(); /* 37 */
1599 test_SPI_SETMINIMIZEDMETRICS(); /* 44 */
1600 test_SPI_SETICONMETRICS(); /* 46 */
1601 test_SPI_SETWORKAREA(); /* 47 */
1602 test_SPI_SETSHOWSOUNDS(); /* 57 */
1603 test_SPI_SETKEYBOARDPREF(); /* 69 */
1604 test_SPI_SETSCREENREADER(); /* 71 */
1605 test_SPI_SETLOWPOWERACTIVE(); /* 85 */
1606 test_SPI_SETPOWEROFFACTIVE(); /* 86 */
1607 test_SPI_SETMOUSEHOVERWIDTH(); /* 99 */
1608 test_SPI_SETMOUSEHOVERHEIGHT(); /* 101 */
1609 test_SPI_SETMOUSEHOVERTIME(); /* 103 */
1610 test_SPI_SETWHEELSCROLLLINES(); /* 105 */
1611 test_SPI_SETMENUSHOWDELAY(); /* 107 */
1612 test_SPI_SETWALLPAPER(); /* 115 */
1613 SendMessageA( ghTestWnd, WM_DESTROY, 0, 0 );
1617 START_TEST(sysparams)
1625 HANDLE hInstance = GetModuleHandleA( NULL );
1627 /* This test requires interactivity, if we don't have it, give up */
1628 if (!SystemParametersInfoA( SPI_SETBEEP, TRUE, 0, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE ) &&
1629 GetLastError()==ERROR_REQUIRES_INTERACTIVE_WINDOWSTATION) return;
1631 argc = winetest_get_mainargs(&argv);
1632 strict=(argc >= 3 && strcmp(argv[2],"strict")==0);
1633 trace("strict=%d\n",strict);
1636 change_last_param = 0;
1638 wc.lpszClassName = "SysParamsTestClass";
1639 wc.lpfnWndProc = SysParamsTestWndProc;
1640 wc.style = CS_OWNDC | CS_VREDRAW | CS_HREDRAW;
1641 wc.hInstance = hInstance;
1642 wc.hIcon = LoadIconA( 0, (LPSTR)IDI_APPLICATION );
1643 wc.hCursor = LoadCursorA( 0, (LPSTR)IDC_ARROW );
1644 wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1 );
1645 wc.lpszMenuName = 0;
1648 RegisterClassA( &wc );
1650 ghTestWnd = CreateWindowA( "SysParamsTestClass", "Test System Parameters Application",
1651 WS_OVERLAPPEDWINDOW, 0, 0, 100, 100, 0, 0, hInstance, NULL );
1653 hThread = CreateThread( NULL, 0, SysParamsThreadFunc, 0, 0, &dwThreadId );
1655 CloseHandle( hThread );
1657 while( GetMessageA( &msg, 0, 0, 0 )) {
1658 TranslateMessage( &msg );
1659 DispatchMessageA( &msg );