1 /* 2 * PROJECT: ReactOS api tests 3 * LICENSE: GPL - See COPYING in the top level directory 4 * PURPOSE: Test for NtUserSystemParametersInfo 5 * PROGRAMMERS: 6 */ 7 8 #include "../win32nt.h" 9 10 #include <winreg.h> 11 12 static const WCHAR* KEY_MOUSE = L"Control Panel\\Mouse"; 13 //static const WCHAR* VAL_MOUSE1 = L"MouseThreshold1"; 14 //static const WCHAR* VAL_MOUSE2 = L"MouseThreshold2"; 15 //static const WCHAR* VAL_MOUSE3 = L"MouseSpeed"; 16 //static const WCHAR* VAL_DBLCLKWIDTH = L"DoubleClickWidth"; 17 //static const WCHAR* VAL_DBLCLKHEIGHT = L"DoubleClickHeight"; 18 //static const WCHAR* VAL_DBLCLKTIME = L"DoubleClickSpeed"; 19 static const WCHAR* VAL_SWAP = L"SwapMouseButtons"; 20 21 static const WCHAR* KEY_DESKTOP = L"Control Panel\\Desktop"; 22 //static const WCHAR* VAL_SCRTO = L"ScreenSaveTimeOut"; 23 //static const WCHAR* VAL_SCRACT = L"ScreenSaveActive"; 24 //static const WCHAR* VAL_GRID = L"GridGranularity"; 25 //static const WCHAR* VAL_DRAG = L"DragFullWindows"; 26 //static const WCHAR* VAL_DRAGHEIGHT = L"DragHeight"; 27 //static const WCHAR* VAL_DRAGWIDTH = L"DragWidth"; 28 //static const WCHAR* VAL_FNTSMOOTH = L"FontSmoothing"; 29 static const WCHAR* VAL_PREFMASK = L"UserPreferencesMask"; 30 31 enum 32 { 33 UPM_ACTIVEWINDOWTRACKING = 0x01, 34 UPM_MENUANIMATION = 0x02, 35 UPM_COMBOBOXANIMATION = 0x04, 36 UPM_LISTBOXSMOOTHSCROLLING = 0x08, 37 UPM_GRADIENTCAPTIONS = 0x10, 38 UPM_KEYBOARDCUES = 0x20, 39 UPM_ACTIVEWNDTRKZORDER = 0x40, 40 UPM_HOTTRACKING = 0x80, 41 UPM_RESERVED = 0x100, 42 UPM_MENUFADE = 0x200, 43 UPM_SELECTIONFADE = 0x400, 44 UPM_TOOLTIPANIMATION = 0x800, 45 UPM_TOOLTIPFADE = 0x1000, 46 UPM_CURSORSHADOW = 0x2000, 47 UPM_CLICKLOCK = 0x8000, 48 // room for more 49 UPM_UIEFFECTS = 0x80000000, 50 UPM_DEFAULT = 0x80003E9E 51 } USERPREFMASKS; 52 53 54 //static const WCHAR* KEY_MDALIGN = L"Software\\Microsoft\\Windows NT\\CurrentVersion\\Windows"; 55 //static const WCHAR* VAL_MDALIGN = L"MenuDropAlignment"; 56 57 static const WCHAR* KEY_METRIC = L"Control Panel\\Desktop\\WindowMetrics"; 58 //static const WCHAR* VAL_BORDER = L"BorderWidth"; 59 //static const WCHAR* VAL_ICONSPC = L"IconSpacing"; 60 //static const WCHAR* VAL_ICONVSPC = L"IconVerticalspacing"; 61 //static const WCHAR* VAL_ITWRAP = L"IconTitleWrap"; 62 63 static const WCHAR* KEY_SOUND = L"Control Panel\\Sound"; 64 static const WCHAR* VAL_BEEP = L"Beep"; 65 66 //static const WCHAR* KEY_KBD = L"Control Panel\\Keyboard"; 67 //static const WCHAR* VAL_KBDSPD = L"KeyboardSpeed"; 68 //static const WCHAR* VAL_KBDDELAY = L"KeyboardDelay"; 69 70 //static const WCHAR* KEY_SHOWSNDS = L"Control Panel\\Accessibility\\ShowSounds"; 71 //static const WCHAR* KEY_KDBPREF = L"Control Panel\\Accessibility\\Keyboard Preference"; 72 //static const WCHAR* KEY_SCRREAD = L"Control Panel\\Accessibility\\Blind Access"; 73 //static const WCHAR* VAL_ON = L"On"; 74 75 LONG 76 QueryUserRegValueW(PCWSTR pszSubKey, PCWSTR pszValueName, PVOID pData, LPDWORD cbSize, LPDWORD pType) 77 { 78 HKEY hKey; 79 LONG ret; 80 81 RegOpenKeyExW(HKEY_CURRENT_USER, pszSubKey, 0, KEY_QUERY_VALUE, &hKey); 82 ret = RegQueryValueExW(hKey, pszValueName, NULL, pType, (LPBYTE)pData, cbSize); 83 RegCloseKey(hKey); 84 return ret; 85 } 86 87 88 HWND 89 CreateTestWindow() 90 { 91 HINSTANCE hinst = GetModuleHandle(NULL); 92 WNDCLASSA wc; 93 94 wc.style = 0; 95 wc.lpfnWndProc = DefWindowProcA; 96 wc.cbClsExtra = 0; 97 wc.cbWndExtra = 0; 98 wc.hInstance = hinst; 99 wc.hIcon = NULL; 100 wc.hCursor = NULL; 101 wc.hbrBackground = NULL; 102 wc.lpszMenuName = NULL; 103 wc.lpszClassName = "testclass"; 104 105 RegisterClassA(&wc); 106 return CreateWindowA("testclass", 107 "testwnd", 108 WS_VISIBLE, 109 0, 110 0, 111 50, 112 30, 113 NULL, 114 NULL, 115 hinst, 116 0); 117 } 118 119 void 120 Test_NtUserSystemParametersInfo_Params(void) 121 { 122 // UINT uint; 123 DWORD data[1000]; 124 UINT i, uint; 125 ACCESSTIMEOUT ato; 126 /* Test normal */ 127 SetLastError(ERROR_SUCCESS); 128 TEST(NtUserSystemParametersInfo(SPI_GETFOCUSBORDERHEIGHT, 0, &uint, 0) == TRUE); 129 TEST(GetLastError() == ERROR_SUCCESS); 130 131 /* Test invalid SPI code */ 132 SetLastError(ERROR_SUCCESS); 133 TEST(NtUserSystemParametersInfo(7, 0, &data, 0) == FALSE); 134 TEST(GetLastError() == ERROR_INVALID_PARAMETER); 135 136 /* Test wrong cbSize member */ 137 ato.cbSize = 1; 138 SetLastError(0xdeadbeef); 139 TEST(NtUserSystemParametersInfo(SPI_GETACCESSTIMEOUT, 0, &ato, 0) == FALSE); 140 TEST(GetLastError() == 0xdeadbeef); 141 #if 0 142 /* Test undocumented, but valid SPI codes */ 143 for(i = 0; i < 1000; i++) data[i] = 0xdeadbeef; 144 SetLastError(ERROR_SUCCESS); 145 TEST(NtUserSystemParametersInfo(0x1010, 0, &data, 0) == TRUE); 146 TEST(GetLastError() == ERROR_SUCCESS); 147 TEST(data[0] <= 1); 148 TEST(data[1] == 0xdeadbeef); 149 150 for(i = 0; i < 1000; i++) data[i] = 0xbeefdead; 151 SetLastError(ERROR_SUCCESS); 152 TEST(NtUserSystemParametersInfo(0x1011, 0, &data, 0) == TRUE); 153 TEST(GetLastError() == ERROR_SUCCESS); 154 TEST(data[0] == 0xbeefdead); 155 TEST(data[1] == 0xbeefdead); 156 data[0] = 0; 157 NtUserSystemParametersInfo(0x1010, 0, &data, 0); 158 TEST(data[0] == 1); 159 160 for(i = 0; i < 1000; i++) data[i] = 0xdeadbeef; 161 SetLastError(ERROR_SUCCESS); 162 TEST(NtUserSystemParametersInfo(0x1028, 0, &data, 0) == TRUE); 163 TEST(GetLastError() == ERROR_SUCCESS); 164 TEST(data[0] != 0xdeadbeef); 165 TEST(data[1] == 0xdeadbeef); 166 167 for(i = 0; i < 1000; i++) data[i] = 0xbeefdead; 168 SetLastError(ERROR_SUCCESS); 169 TEST(NtUserSystemParametersInfo(0x1029, 0, &data, 0) == TRUE); 170 TEST(GetLastError() == ERROR_SUCCESS); 171 TEST(data[0] == 0xbeefdead); 172 TEST(data[1] == 0xbeefdead); 173 174 for(i = 0; i < 1000; i++) data[i] = 0xdeadbeef; 175 SetLastError(ERROR_SUCCESS); 176 TEST(NtUserSystemParametersInfo(0x102A, 0, &data, 0) == TRUE); 177 TEST(GetLastError() == ERROR_SUCCESS); 178 TEST(data[0] != 0xdeadbeef); 179 TEST(data[1] == 0xdeadbeef); 180 181 for(i = 0; i < 1000; i++) data[i] = 0xbeefdead; 182 SetLastError(ERROR_SUCCESS); 183 TEST(NtUserSystemParametersInfo(4139, 0, &data, 0) == TRUE); 184 TEST(GetLastError() == ERROR_SUCCESS); 185 TEST(data[0] == 0xbeefdead); 186 TEST(data[1] == 0xbeefdead); 187 188 for(i = 0; i < 1000; i++) data[i] = 0xdeadbeef; 189 SetLastError(ERROR_SUCCESS); 190 TEST(NtUserSystemParametersInfo(4140, 0, &data, 0) == TRUE); 191 TEST(GetLastError() == ERROR_SUCCESS); 192 TEST(data[0] != 0xdeadbeef); 193 TEST(data[1] == 0xdeadbeef); 194 195 for(i = 0; i < 1000; i++) data[i] = 0xbeefdead; 196 SetLastError(ERROR_SUCCESS); 197 TEST(NtUserSystemParametersInfo(4141, 0, &data, 0) == TRUE); 198 TEST(GetLastError() == ERROR_SUCCESS); 199 TEST(data[0] == 0xbeefdead); 200 TEST(data[1] == 0xbeefdead); 201 202 for(i = 0; i < 1000; i++) data[i] = 0xdeadbeef; 203 SetLastError(ERROR_SUCCESS); 204 TEST(NtUserSystemParametersInfo(4142, 0, &data, 0) == TRUE); 205 TEST(GetLastError() == ERROR_SUCCESS); 206 TEST(data[0] != 0xdeadbeef); 207 TEST(data[1] == 0xdeadbeef); 208 209 for(i = 0; i < 1000; i++) data[i] = 0xbeefdead; 210 SetLastError(ERROR_SUCCESS); 211 TEST(NtUserSystemParametersInfo(4143, 0, &data, 0) == TRUE); 212 TEST(GetLastError() == ERROR_SUCCESS); 213 TEST(data[0] == 0xbeefdead); 214 TEST(data[1] == 0xbeefdead); 215 216 for(i = 0; i < 1000; i++) data[i] = 0xdeadbeef; 217 SetLastError(ERROR_SUCCESS); 218 TEST(NtUserSystemParametersInfo(4144, 0, &data, 0) == TRUE); 219 TEST(GetLastError() == ERROR_SUCCESS); 220 TEST(data[0] != 0xdeadbeef); 221 TEST(data[1] == 0xdeadbeef); 222 223 for(i = 0; i < 1000; i++) data[i] = 0xbeefdead; 224 SetLastError(ERROR_SUCCESS); 225 TEST(NtUserSystemParametersInfo(4145, 0, &data, 0) == TRUE); 226 TEST(GetLastError() == ERROR_SUCCESS); 227 TEST(data[0] == 0xbeefdead); 228 TEST(data[1] == 0xbeefdead); 229 230 for(i = 0; i < 1000; i++) data[i] = 0xdeadbeef; 231 SetLastError(ERROR_SUCCESS); 232 TEST(NtUserSystemParametersInfo(4146, 0, &data, 0) == TRUE); 233 TEST(GetLastError() == ERROR_SUCCESS); 234 TEST(data[0] != 0xdeadbeef); 235 TEST(data[1] == 0xdeadbeef); 236 237 for(i = 0; i < 1000; i++) data[i] = 0xbeefdead; 238 SetLastError(ERROR_SUCCESS); 239 TEST(NtUserSystemParametersInfo(4147, 0, &data, 0) == TRUE); 240 TEST(GetLastError() == ERROR_SUCCESS); 241 TEST(data[0] == 0xbeefdead); 242 TEST(data[1] == 0xbeefdead); 243 244 for(i = 0; i < 1000; i++) data[i] = 0xdeadbeef; 245 SetLastError(ERROR_SUCCESS); 246 TEST(NtUserSystemParametersInfo(4148, 0, &data, 0) == TRUE); 247 TEST(GetLastError() == ERROR_SUCCESS); 248 TEST(data[0] != 0xdeadbeef); 249 TEST(data[1] == 0xdeadbeef); 250 251 for(i = 0; i < 1000; i++) data[i] = 0xbeefdead; 252 SetLastError(ERROR_SUCCESS); 253 TEST(NtUserSystemParametersInfo(4149, 0, &data, 0) == TRUE); 254 TEST(GetLastError() == ERROR_SUCCESS); 255 TEST(data[0] == 0xbeefdead); 256 TEST(data[1] == 0xbeefdead); 257 258 for(i = 0; i < 1000; i++) data[i] = 0xdeadbeef; 259 SetLastError(ERROR_SUCCESS); 260 TEST(NtUserSystemParametersInfo(4150, 0, &data, 0) == TRUE); 261 TEST(GetLastError() == ERROR_SUCCESS); 262 TEST(data[0] != 0xdeadbeef); 263 TEST(data[1] == 0xdeadbeef); 264 265 for(i = 0; i < 1000; i++) data[i] = 0xbeefdead; 266 SetLastError(ERROR_SUCCESS); 267 TEST(NtUserSystemParametersInfo(4151, 0, &data, 0) == TRUE); 268 TEST(GetLastError() == ERROR_SUCCESS); 269 TEST(data[0] == 0xbeefdead); 270 TEST(data[1] == 0xbeefdead); 271 272 for(i = 0; i < 1000; i++) data[i] = 0xdeadbeef; 273 SetLastError(ERROR_SUCCESS); 274 TEST(NtUserSystemParametersInfo(4152, 0, &data, 0) == TRUE); 275 TEST(GetLastError() == ERROR_SUCCESS); 276 TEST(data[0] != 0xdeadbeef); 277 TEST(data[1] == 0xdeadbeef); 278 279 for(i = 0; i < 1000; i++) data[i] = 0xbeefdead; 280 SetLastError(ERROR_SUCCESS); 281 TEST(NtUserSystemParametersInfo(4153, 0, &data, 0) == TRUE); 282 TEST(GetLastError() == ERROR_SUCCESS); 283 TEST(data[0] == 0xbeefdead); 284 TEST(data[1] == 0xbeefdead); 285 286 for(i = 0; i < 1000; i++) data[i] = 0xdeadbeef; 287 SetLastError(ERROR_SUCCESS); 288 TEST(NtUserSystemParametersInfo(4154, 0, &data, 0) == TRUE); 289 TEST(GetLastError() == ERROR_SUCCESS); 290 TEST(data[0] != 0xdeadbeef); 291 TEST(data[1] == 0xdeadbeef); 292 293 for(i = 0; i < 1000; i++) data[i] = 0xbeefdead; 294 SetLastError(ERROR_SUCCESS); 295 TEST(NtUserSystemParametersInfo(4155, 0, &data, 0) == TRUE); 296 TEST(GetLastError() == ERROR_SUCCESS); 297 TEST(data[0] == 0xbeefdead); 298 TEST(data[1] == 0xbeefdead); 299 300 for(i = 0; i < 1000; i++) data[i] = 0xdeadbeef; 301 SetLastError(ERROR_SUCCESS); 302 TEST(NtUserSystemParametersInfo(4156, 0, &data, 0) == TRUE); 303 TEST(GetLastError() == ERROR_SUCCESS); 304 TEST(data[0] != 0xdeadbeef); 305 TEST(data[1] == 0xdeadbeef); 306 307 for(i = 0; i < 1000; i++) data[i] = 0xbeefdead; 308 SetLastError(ERROR_SUCCESS); 309 TEST(NtUserSystemParametersInfo(4157, 0, &data, 0) == TRUE); 310 TEST(GetLastError() == ERROR_SUCCESS); 311 TEST(data[0] == 0xbeefdead); 312 TEST(data[1] == 0xbeefdead); 313 #endif 314 /* Test invalid pointer */ 315 SetLastError(ERROR_SUCCESS); 316 TEST(NtUserSystemParametersInfo(SPI_GETFOCUSBORDERHEIGHT, 0, (PVOID)(LONG_PTR)0x80000000, 0) == FALSE); 317 TEST(GetLastError() == ERROR_NOACCESS); 318 for(i = 0; i < 1000; i++) data[i] = 0xdeadbeef; 319 320 /* test wrong bools */ 321 } 322 323 void 324 Test_NtUserSystemParametersInfo_Winsta(void) 325 { 326 HWINSTA hwinsta, hwinstaOld; 327 INT ai[20]; 328 BOOL bRet; 329 // INT i; 330 331 hwinstaOld = GetProcessWindowStation(); 332 hwinsta = CreateWindowStation(NULL, 0, READ_CONTROL, NULL); 333 SetProcessWindowStation(hwinsta); 334 printf("hwinstaOld=%p, hwinsta=%p\n", hwinstaOld, hwinsta); 335 336 #if 1 // currently Winsta stuff is broken in ros 337 TEST(SystemParametersInfoA(SPI_GETBEEP, 0, ai, 0) == 0); 338 TEST(GetLastError() == ERROR_ACCESS_DENIED); 339 TEST(SystemParametersInfoA(SPI_SETBEEP, 0, ai, 0) == 0); 340 TEST(GetLastError() == ERROR_REQUIRES_INTERACTIVE_WINDOWSTATION); 341 TEST(SystemParametersInfoA(SPI_GETMOUSE, 0, ai, 0) == 0); 342 TEST(GetLastError() == ERROR_ACCESS_DENIED); 343 TEST(SystemParametersInfoA(SPI_SETMOUSE, 0, ai, 0) == 0); 344 TEST(GetLastError() == ERROR_REQUIRES_INTERACTIVE_WINDOWSTATION); 345 TEST(SystemParametersInfoA(SPI_GETBORDER, 0, ai, 0) == 0); 346 TEST(GetLastError() == ERROR_ACCESS_DENIED); 347 TEST(SystemParametersInfoA(SPI_SETBORDER, 0, ai, 0) == 0); 348 TEST(GetLastError() == ERROR_REQUIRES_INTERACTIVE_WINDOWSTATION); 349 TEST(SystemParametersInfoA(SPI_GETKEYBOARDSPEED, 0, ai, 0) == 0); 350 TEST(GetLastError() == ERROR_ACCESS_DENIED); 351 TEST(SystemParametersInfoA(SPI_SETKEYBOARDSPEED, 0, ai, 0) == 0); 352 TEST(GetLastError() == ERROR_REQUIRES_INTERACTIVE_WINDOWSTATION); 353 TEST(SystemParametersInfoA(SPI_ICONHORIZONTALSPACING, 0, ai, 0) == 0); 354 TEST(GetLastError() == ERROR_ACCESS_DENIED); 355 TEST(SystemParametersInfoA(SPI_ICONHORIZONTALSPACING, 32, 0, 0) == 0); 356 TEST(GetLastError() == ERROR_REQUIRES_INTERACTIVE_WINDOWSTATION); 357 TEST(SystemParametersInfoA(SPI_GETSCREENSAVETIMEOUT, 0, ai, 0) == 0); 358 TEST(GetLastError() == ERROR_ACCESS_DENIED); 359 TEST(SystemParametersInfoA(SPI_SETSCREENSAVETIMEOUT, 0, ai, 0) == 0); 360 TEST(GetLastError() == ERROR_REQUIRES_INTERACTIVE_WINDOWSTATION); 361 TEST(SystemParametersInfoA(SPI_GETKEYBOARDCUES, 0, &bRet, 0) == 0); 362 TEST(GetLastError() == ERROR_ACCESS_DENIED); 363 TEST(SystemParametersInfoA(SPI_SETKEYBOARDCUES, 0, (PVOID)1, 0) == 0); 364 TEST(GetLastError() == ERROR_REQUIRES_INTERACTIVE_WINDOWSTATION); 365 #endif 366 367 SetProcessWindowStation(hwinstaOld); 368 } 369 370 void 371 Test_NtUserSystemParametersInfo_fWinIni(void) 372 { 373 ACCESSTIMEOUT ato; 374 // UINT uFocusBorderHeight; 375 WCHAR Buffer[6]; 376 DWORD cbSize; 377 378 ato.cbSize = sizeof(ato); 379 NtUserSystemParametersInfo(SPI_GETACCESSTIMEOUT, 0, &ato, 0); 380 ato.iTimeOutMSec++; 381 NtUserSystemParametersInfo(SPI_SETACCESSTIMEOUT, 0, &ato, 0); 382 ato.iTimeOutMSec--; 383 384 // NtUserSystemParametersInfo(SPI_GETFOCUSBORDERHEIGHT, 0, &uFocusBorderHeight, 0); 385 // NtUserSystemParametersInfo(SPI_SETFOCUSBORDERHEIGHT, 0, &uFocusBorderHeight, SPIF_UPDATEINIFILE); 386 387 NtUserSystemParametersInfo(SPI_SETACCESSTIMEOUT, 0, &ato, 0); 388 389 cbSize = 6; 390 QueryUserRegValueW(L"Control Panel\\Accessibility\\TimeOut", L"TimeToWait", &Buffer, &cbSize, NULL); 391 392 } 393 394 void 395 Test_MetricKey(PCWSTR pwszVal, INT iVal) 396 { 397 WCHAR szReg[10]; 398 DWORD cbSize; 399 400 cbSize = sizeof(szReg); 401 ok(QueryUserRegValueW(KEY_METRIC, pwszVal, &szReg, &cbSize, NULL) == ERROR_SUCCESS, "Value=%S\n", pwszVal); 402 ok(_wcsicmp(szReg, L"1") == 0, "Value=%S\n", pwszVal); 403 404 } 405 406 void 407 Test_UserPref(UINT uiGet, UINT uiSet, DWORD dwPrefMask) 408 { 409 BOOL bOrig, bTemp = 0; 410 DWORD dwUserPref, dwUserPrefOrg; 411 DWORD cbSize; 412 413 /* Get original values */ 414 NtUserSystemParametersInfo(uiGet, 0, &bOrig, 0); 415 cbSize = sizeof(dwUserPrefOrg); 416 QueryUserRegValueW(KEY_DESKTOP, VAL_PREFMASK, &dwUserPrefOrg, &cbSize, NULL); 417 418 /* Value 0 */ 419 NtUserSystemParametersInfo(uiSet, 0, NULL, SPIF_UPDATEINIFILE); 420 NtUserSystemParametersInfo(uiGet, 0, &bTemp, 0); 421 TEST(bTemp == 0); 422 cbSize = sizeof(dwUserPref); 423 TEST(QueryUserRegValueW(KEY_DESKTOP, VAL_PREFMASK, &dwUserPref, &cbSize, NULL) == ERROR_SUCCESS); 424 TEST((dwUserPref & dwPrefMask) == 0); 425 TEST((dwUserPref & (~dwPrefMask)) == (dwUserPrefOrg & (~dwPrefMask))); 426 427 /* Value 1 without Registry */ 428 NtUserSystemParametersInfo(uiSet, 0, (PVOID)1, 0); 429 NtUserSystemParametersInfo(uiGet, 0, &bTemp, 0); 430 TEST(bTemp == 1); 431 cbSize = sizeof(dwUserPref); 432 TEST(QueryUserRegValueW(KEY_DESKTOP, VAL_PREFMASK, &dwUserPref, &cbSize, NULL) == ERROR_SUCCESS); 433 TEST((dwUserPref & dwPrefMask) == 0); 434 TEST((dwUserPref & (~dwPrefMask)) == (dwUserPrefOrg & (~dwPrefMask))); 435 436 /* Value 2 without Registry */ 437 NtUserSystemParametersInfo(uiSet, 0, (PVOID)2, 0); 438 NtUserSystemParametersInfo(uiGet, 0, &bTemp, 0); 439 TEST(bTemp == 1); 440 cbSize = sizeof(dwUserPref); 441 TEST(QueryUserRegValueW(KEY_DESKTOP, VAL_PREFMASK, &dwUserPref, &cbSize, NULL) == ERROR_SUCCESS); 442 TEST((dwUserPref & dwPrefMask) == 0); 443 TEST((dwUserPref & (~dwPrefMask)) == (dwUserPrefOrg & (~dwPrefMask))); 444 445 /* Value 1 with Registry */ 446 NtUserSystemParametersInfo(uiSet, 0, (PVOID)1, SPIF_UPDATEINIFILE); 447 NtUserSystemParametersInfo(uiGet, 0, &bTemp, 0); 448 TEST(bTemp == 1); 449 cbSize = sizeof(dwUserPref); 450 TEST(QueryUserRegValueW(KEY_DESKTOP, VAL_PREFMASK, &dwUserPref, &cbSize, NULL) == ERROR_SUCCESS); 451 TEST((dwUserPref & dwPrefMask) == dwPrefMask); 452 TEST((dwUserPref & (~dwPrefMask)) == (dwUserPrefOrg & (~dwPrefMask))); 453 454 /* Restore original value */ 455 NtUserSystemParametersInfo(uiSet, 0, (PVOID)(ULONG_PTR)bOrig, SPIF_UPDATEINIFILE); 456 457 458 } 459 460 461 /******************************************************************************/ 462 463 void 464 Test_SPI_SETBEEP(void) 465 { 466 BOOL bOrig, bTemp = 0; 467 WCHAR szReg[10]; 468 DWORD cbSize; 469 470 /* Get original value */ 471 NtUserSystemParametersInfo(SPI_GETBEEP, 0, &bOrig, 0); 472 473 /* Value 0 */ 474 NtUserSystemParametersInfo(SPI_SETBEEP, 0, NULL, SPIF_UPDATEINIFILE); 475 NtUserSystemParametersInfo(SPI_GETBEEP, 0, &bTemp, 0); 476 TEST(bTemp == 0); 477 cbSize = sizeof(szReg); 478 TEST(QueryUserRegValueW(KEY_SOUND, VAL_BEEP, &szReg, &cbSize, NULL) == ERROR_SUCCESS); 479 TEST(_wcsicmp(szReg, L"No") == 0); 480 481 /* Value 1 */ 482 NtUserSystemParametersInfo(SPI_SETBEEP, 1, NULL, SPIF_UPDATEINIFILE); 483 NtUserSystemParametersInfo(SPI_GETBEEP, 0, &bTemp, 0); 484 TEST(bTemp == 1); 485 cbSize = sizeof(szReg); 486 TEST(QueryUserRegValueW(KEY_SOUND, VAL_BEEP, &szReg, &cbSize, NULL) == ERROR_SUCCESS); 487 TEST(_wcsicmp(szReg, L"Yes") == 0); 488 489 /* Value 2 */ 490 NtUserSystemParametersInfo(SPI_SETBEEP, 2, NULL, SPIF_UPDATEINIFILE); 491 NtUserSystemParametersInfo(SPI_GETBEEP, 0, &bTemp, 0); 492 TEST(bTemp == 1); 493 cbSize = sizeof(szReg); 494 TEST(QueryUserRegValueW(KEY_SOUND, VAL_BEEP, &szReg, &cbSize, NULL) == ERROR_SUCCESS); 495 TEST(_wcsicmp(szReg, L"Yes") == 0); 496 497 /* Restore original value */ 498 NtUserSystemParametersInfo(SPI_SETBEEP, 0, &bOrig, SPIF_UPDATEINIFILE); 499 } 500 501 void 502 Test_SPI_SETMOUSE(void) 503 { 504 INT aiOrig[3], aiTemp[3]; 505 506 /* Get original value */ 507 NtUserSystemParametersInfo(SPI_GETMOUSE, 0, aiOrig, 0); 508 509 /* Test uiParam value */ 510 TEST(NtUserSystemParametersInfo(SPI_GETMOUSE, 0, aiTemp, 0) == 1); 511 TEST(NtUserSystemParametersInfo(SPI_GETMOUSE, 1, aiTemp, 0) == 1); 512 TEST(NtUserSystemParametersInfo(SPI_GETMOUSE, -1, aiTemp, 0) == 1); 513 TEST(NtUserSystemParametersInfo(SPI_GETMOUSE, 0xdeadbeef, aiTemp, 0) == 1); 514 515 /* Set modified values */ 516 aiTemp[0] = aiOrig[0] + 1; 517 aiTemp[1] = aiOrig[1] - 1; 518 aiTemp[2] = aiOrig[2] + 2; 519 NtUserSystemParametersInfo(SPI_SETMOUSE, 2, aiTemp, SPIF_UPDATEINIFILE); 520 aiTemp[0] = aiTemp[1] = aiTemp[2] = 0; 521 522 /* Get new values */ 523 NtUserSystemParametersInfo(SPI_GETMOUSE, 0, aiTemp, 0); 524 525 /* Test modified values */ 526 TEST(aiTemp[0] == aiOrig[0] + 1); 527 TEST(aiTemp[1] == aiOrig[1] - 1); 528 TEST(aiTemp[2] == aiOrig[2] + 2); 529 530 // FIXME: Test registry values 531 532 /* Restore original value */ 533 NtUserSystemParametersInfo(SPI_SETMOUSE, 0, aiOrig, SPIF_UPDATEINIFILE); 534 } 535 536 void 537 Test_SPI_SETBORDER(void) 538 { 539 INT iOrig, iTemp = 0; 540 541 /* Get original value */ 542 NtUserSystemParametersInfo(SPI_GETBORDER, 0, &iOrig, 0); 543 544 /* Value 0 */ 545 NtUserSystemParametersInfo(SPI_SETBORDER, 0, NULL, SPIF_UPDATEINIFILE); 546 NtUserSystemParametersInfo(SPI_GETBORDER, 0, &iTemp, 0); 547 TEST(iTemp == 1); 548 TEST(GetSystemMetrics(SM_CXBORDER) == 1); 549 550 /* Value 1 */ 551 NtUserSystemParametersInfo(SPI_SETBORDER, 1, NULL, SPIF_UPDATEINIFILE); 552 NtUserSystemParametersInfo(SPI_GETBORDER, 0, &iTemp, 0); 553 TEST(iTemp == 1); 554 // Test_MetricKey(pti, VAL_BORDER, 1); 555 556 /* Value 2 */ 557 NtUserSystemParametersInfo(SPI_SETBORDER, 2, NULL, SPIF_UPDATEINIFILE); 558 NtUserSystemParametersInfo(SPI_GETBORDER, 0, &iTemp, 0); 559 TEST(iTemp == 2); 560 TEST(GetSystemMetrics(SM_CXBORDER) == 1); 561 562 /* Restore original value */ 563 NtUserSystemParametersInfo(SPI_SETBORDER, iOrig, NULL, SPIF_UPDATEINIFILE); 564 565 } 566 567 // Test_SPI_SETKEYBOARDSPEED(); 568 // Test_SPI_LANGDRIVER(); 569 // Test_SPI_ICONHORIZONTALSPACING(); 570 // Test_SPI_SETSCREENSAVETIMEOUT(); 571 // Test_SPI_SETSCREENSAVEACTIVE(); 572 // Test_SPI_SETGRIDGRANULARITY(); 573 574 void 575 Test_SPI_SETDESKWALLPAPER(void) 576 { 577 UNICODE_STRING ustrOld, ustrNew; 578 WCHAR szOld[MAX_PATH]; 579 WCHAR szNew[MAX_PATH]; 580 581 /* Get old Wallpaper */ 582 TEST(NtUserSystemParametersInfo(SPI_GETDESKWALLPAPER, MAX_PATH, szOld, 0) == 1); 583 RtlInitUnicodeString(&ustrOld, szOld); 584 585 /* Set no Wallpaper */ 586 TEST(NtUserSystemParametersInfo(SPI_SETDESKWALLPAPER, 0, L"", 0) == 1); 587 TEST(NtUserSystemParametersInfo(SPI_GETDESKWALLPAPER, MAX_PATH, szNew, 0) == 1); 588 TEST(szNew[0] == 0); 589 590 /* Set no Wallpaper 2 */ 591 RtlInitUnicodeString(&ustrNew, L""); 592 TEST(NtUserSystemParametersInfo(SPI_SETDESKWALLPAPER, 0, &ustrNew, 0) == 1); 593 TEST(NtUserSystemParametersInfo(SPI_GETDESKWALLPAPER, MAX_PATH, szNew, 0) == 1); 594 TEST(szNew[0] == 0); 595 596 /* Reset Wallpaper */ 597 TEST(NtUserSystemParametersInfo(SPI_SETDESKWALLPAPER, 0, NULL, 0) == 1); 598 TEST(NtUserSystemParametersInfo(SPI_GETDESKWALLPAPER, MAX_PATH, szNew, 0) == 1); 599 TEST(wcscmp(szNew, szOld) == 0); 600 601 /* Set new Wallpaper */ 602 #if 0 // This is broken 603 RtlInitUnicodeString(&ustrNew, L"test.bmp"); 604 TEST(NtUserSystemParametersInfo(SPI_SETDESKWALLPAPER, 0, &ustrNew, 0) == 1); 605 TEST(NtUserSystemParametersInfo(SPI_GETDESKWALLPAPER, MAX_PATH, szNew, 0) == 1); 606 TEST(wcscmp(szNew, L"test.bmp") == 0); 607 #endif 608 609 /* Get Wallpaper, too small buffer */ 610 szNew[0] = 0; szNew[1] = 0; szNew[2] = 0; 611 TEST(NtUserSystemParametersInfo(SPI_GETDESKWALLPAPER, 3, szNew, 0) == 1); 612 TEST(szNew[0] != 0); 613 TEST(szNew[1] != 0); 614 TEST(szNew[2] != 0); 615 616 /* Set invalid Wallpaper */ 617 SetLastError(0xdeadbeef); 618 RtlInitUnicodeString(&ustrNew, L"*#!!-&"); 619 TEST(NtUserSystemParametersInfo(SPI_SETDESKWALLPAPER, 0, &ustrNew, 0) == 0); 620 TEST(GetLastError() == ERROR_FILE_NOT_FOUND); 621 TEST(NtUserSystemParametersInfo(SPI_GETDESKWALLPAPER, MAX_PATH, szNew, 0) == 1); 622 TEST(wcscmp(szNew, L"*#!!-&") == 0); 623 624 /* Restore old Wallpaper */ 625 TEST(NtUserSystemParametersInfo(SPI_SETDESKWALLPAPER, MAX_PATH, &ustrOld, SPIF_UPDATEINIFILE) == 1); 626 627 } 628 629 // Test_SPI_SETDESKPATTERN(); 630 // Test_SPI_SETKEYBOARDDELAY(); 631 // Test_SPI_ICONVERTICALSPACING(); 632 // Test_SPI_SETICONTITLEWRAP(); 633 // Test_SPI_SETMENUDROPALIGNMENT(); 634 // Test_SPI_SETDOUBLECLKWIDTH(); 635 // Test_SPI_SETDOUBLECLKHEIGHT(); 636 // Test_SPI_SETDOUBLECLICKTIME(); 637 638 void 639 Test_SPI_SETMOUSEBUTTONSWAP(void) 640 { 641 BOOL bOrig, bTemp = 0; 642 WCHAR szReg[10]; 643 DWORD cbSize; 644 645 /* Get original value */ 646 bOrig = GetSystemMetrics(SM_SWAPBUTTON); 647 648 /* Value 0 */ 649 NtUserSystemParametersInfo(SPI_SETMOUSEBUTTONSWAP, 0, NULL, SPIF_UPDATEINIFILE); 650 bTemp = GetSystemMetrics(SM_SWAPBUTTON); 651 TEST(bTemp == 0); 652 cbSize = sizeof(szReg); 653 TEST(QueryUserRegValueW(KEY_MOUSE, VAL_SWAP, &szReg, &cbSize, NULL) == ERROR_SUCCESS); 654 TEST(_wcsicmp(szReg, L"0") == 0); 655 656 /* Value 1 */ 657 NtUserSystemParametersInfo(SPI_SETMOUSEBUTTONSWAP, 1, NULL, SPIF_UPDATEINIFILE); 658 bTemp = GetSystemMetrics(SM_SWAPBUTTON); 659 TEST(bTemp == 1); 660 cbSize = sizeof(szReg); 661 TEST(QueryUserRegValueW(KEY_MOUSE, VAL_SWAP, &szReg, &cbSize, NULL) == ERROR_SUCCESS); 662 TEST(_wcsicmp(szReg, L"1") == 0); 663 664 /* Value 2 */ 665 NtUserSystemParametersInfo(SPI_SETMOUSEBUTTONSWAP, 2, NULL, SPIF_UPDATEINIFILE); 666 bTemp = GetSystemMetrics(SM_SWAPBUTTON); 667 TEST(bTemp == 1); 668 cbSize = sizeof(szReg); 669 TEST(QueryUserRegValueW(KEY_MOUSE, VAL_SWAP, &szReg, &cbSize, NULL) == ERROR_SUCCESS); 670 TEST(_wcsicmp(szReg, L"2") == 0); 671 672 /* Value -1 */ 673 NtUserSystemParametersInfo(SPI_SETMOUSEBUTTONSWAP, -1, NULL, SPIF_UPDATEINIFILE); 674 bTemp = GetSystemMetrics(SM_SWAPBUTTON); 675 TEST(bTemp == 1); 676 cbSize = sizeof(szReg); 677 TEST(QueryUserRegValueW(KEY_MOUSE, VAL_SWAP, &szReg, &cbSize, NULL) == ERROR_SUCCESS); 678 TEST(_wcsicmp(szReg, L"-1") == 0); 679 680 /* Restore original value */ 681 NtUserSystemParametersInfo(SPI_SETMOUSEBUTTONSWAP, bOrig, 0, SPIF_UPDATEINIFILE); 682 683 684 } 685 686 void 687 Test_SPI_SETICONTITLELOGFONT(void) 688 { 689 LOGFONTW lfOrig; 690 struct 691 { 692 LOGFONTW lf; 693 DWORD dwRedzone; 694 } buf; 695 696 /* Get original value */ 697 ASSERT(NtUserSystemParametersInfo(SPI_GETICONTITLELOGFONT, sizeof(lfOrig), &lfOrig, 0)); 698 699 /* Test uiParam == 0 */ 700 memset(&buf, 0, sizeof(buf)); 701 buf.lf.lfFaceName[LF_FACESIZE-1] = 33; 702 buf.dwRedzone = 0xdeadbeef; 703 TEST(NtUserSystemParametersInfo(SPI_GETICONTITLELOGFONT, 0, &buf.lf, 0) == 1); 704 TEST(buf.lf.lfHeight != 0); 705 TEST(buf.lf.lfWeight != 0); 706 TEST(buf.lf.lfFaceName[0] != 0); 707 TEST(buf.lf.lfFaceName[LF_FACESIZE-1] == 0); 708 TEST(buf.dwRedzone == 0xdeadbeef); 709 710 /* Test uiParam < sizeof(LOGFONTW) */ 711 memset(&buf, 0, sizeof(buf)); 712 buf.lf.lfFaceName[LF_FACESIZE-1] = 33; 713 buf.dwRedzone = 0xdeadbeef; 714 TEST(NtUserSystemParametersInfo(SPI_GETICONTITLELOGFONT, 8, &buf.lf, 0) == 1); 715 TEST(buf.lf.lfHeight != 0); 716 TEST(buf.lf.lfWeight != 0); 717 TEST(buf.lf.lfFaceName[0] != 0); 718 TEST(buf.lf.lfFaceName[LF_FACESIZE-1] == 0); 719 TEST(buf.dwRedzone == 0xdeadbeef); 720 721 /* Test uiParam < 0 */ 722 TEST(NtUserSystemParametersInfo(SPI_GETICONTITLELOGFONT, -1, &buf.lf, 0) == 1); 723 } 724 725 void 726 Test_SPI_SETFASTTASKSWITCH(void) 727 { 728 char buf[10]; 729 TEST(NtUserSystemParametersInfo(SPI_SETFASTTASKSWITCH, 0, 0, 0) == 1); 730 TEST(NtUserSystemParametersInfo(SPI_SETFASTTASKSWITCH, 0, buf, 0) == 1); 731 732 733 } 734 735 void 736 Test_SPI_SETDRAGFULLWINDOWS(void) 737 { 738 739 } 740 741 void 742 Test_SPI_SETNONCLIENTMETRICS(void) 743 { 744 NONCLIENTMETRICSW metrics; 745 NONCLIENTMETRICSW origMetrics; 746 747 metrics.cbSize = sizeof(NONCLIENTMETRICSW); 748 TEST(NtUserSystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICSW), &metrics, 0) == 1); 749 TEST(NtUserSystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICSW), (PVOID)(LONG_PTR)0xdeadbeef, 0) == 0); 750 751 origMetrics = metrics; 752 753 metrics.cbSize = sizeof(NONCLIENTMETRICSW) + 10; 754 TEST(NtUserSystemParametersInfo(SPI_SETNONCLIENTMETRICS, 0, (PVOID)&metrics, 0) == 1); 755 TEST(NtUserSystemParametersInfo(SPI_GETNONCLIENTMETRICS, 0, (PVOID)&metrics, 0) == 1); 756 ok(metrics.cbSize == sizeof(NONCLIENTMETRICSW), "Expected size: %lu, got %lu\n", (ULONG)sizeof(NONCLIENTMETRICSW), (ULONG)metrics.cbSize); 757 758 TEST(NtUserSystemParametersInfo(SPI_SETNONCLIENTMETRICS, 0, (PVOID)&origMetrics, 0) == 1); 759 } 760 761 void 762 Test_SPI_SETMINIMIZEDMETRICS(void) 763 { 764 MINIMIZEDMETRICS metrics; 765 MINIMIZEDMETRICS origMetrics; 766 767 metrics.cbSize = sizeof(MINIMIZEDMETRICS); 768 TEST(NtUserSystemParametersInfo(SPI_GETMINIMIZEDMETRICS, sizeof(MINIMIZEDMETRICS), (PVOID)&metrics, 0) == 1); 769 TEST(NtUserSystemParametersInfo(SPI_GETMINIMIZEDMETRICS, sizeof(MINIMIZEDMETRICS), (PVOID)(LONG_PTR)0xdeadbeef, 0) == 0); 770 771 origMetrics = metrics; 772 773 metrics.cbSize = sizeof(MINIMIZEDMETRICS) + 10; 774 TEST(NtUserSystemParametersInfo(SPI_SETMINIMIZEDMETRICS, 0, (PVOID)&metrics, 0) == 1); 775 TEST(NtUserSystemParametersInfo(SPI_GETMINIMIZEDMETRICS, 0, (PVOID)&metrics, 0) == 1); 776 ok(metrics.cbSize == sizeof(MINIMIZEDMETRICS), "Expected size: %lu, got %lu\n", (ULONG)sizeof(MINIMIZEDMETRICS), (ULONG)metrics.cbSize); 777 778 TEST(NtUserSystemParametersInfo(SPI_SETMINIMIZEDMETRICS, 0, (PVOID)&origMetrics, 0) == 1); 779 } 780 781 void 782 Test_SPI_SETICONMETRICS(void) 783 { 784 ICONMETRICSW metrics; 785 ICONMETRICSW origMetrics; 786 787 metrics.cbSize = sizeof(ICONMETRICSW); 788 TEST(NtUserSystemParametersInfo(SPI_GETICONMETRICS, sizeof(ICONMETRICSW), (PVOID)&metrics, 0) == 1); 789 TEST(NtUserSystemParametersInfo(SPI_GETICONMETRICS, sizeof(ICONMETRICSW), (PVOID)(LONG_PTR)0xdeadbeef, 0) == 0); 790 791 origMetrics = metrics; 792 793 metrics.cbSize = sizeof(ICONMETRICSW) + 10; 794 TEST(NtUserSystemParametersInfo(SPI_SETICONMETRICS, 0, (PVOID)&metrics, 0) == 1); 795 TEST(NtUserSystemParametersInfo(SPI_GETICONMETRICS, 0, (PVOID)&metrics, 0) == 1); 796 ok(metrics.cbSize == sizeof(ICONMETRICSW), "Expected size: %lu, got %lu\n", (ULONG)sizeof(ICONMETRICSW), (ULONG)metrics.cbSize); 797 798 TEST(NtUserSystemParametersInfo(SPI_SETICONMETRICS, 0, (PVOID)&origMetrics, 0) == 1); 799 } 800 801 void 802 Test_SPI_SETWORKAREA(void) 803 { 804 RECT rcOrig, rc; 805 806 /* Get the original value */ 807 ASSERT(NtUserSystemParametersInfo(SPI_GETWORKAREA, 0, &rcOrig, 0) == 1); 808 809 /* Change value */ 810 rc = rcOrig; 811 rc.left += 1; 812 rc.top += 2; 813 rc.right -= 3; 814 rc.bottom -= 2; 815 TEST(NtUserSystemParametersInfo(SPI_SETWORKAREA, 1, &rc, 0) == 1); 816 TEST(NtUserSystemParametersInfo(SPI_SETWORKAREA, 0, &rc, 0) == 1); 817 TEST(NtUserSystemParametersInfo(SPI_SETWORKAREA, sizeof(RECT), &rc, 0) == 1); 818 819 TEST(NtUserSystemParametersInfo(SPI_GETWORKAREA, 1, &rc, 0) == 1); 820 TEST(NtUserSystemParametersInfo(SPI_GETWORKAREA, -1, &rc, 0) == 1); 821 TEST(NtUserSystemParametersInfo(SPI_GETWORKAREA, 0xdeadbeef, &rc, 0) == 1); 822 TEST(NtUserSystemParametersInfo(SPI_GETWORKAREA, 0, (PVOID)(LONG_PTR)0xdeadbeef, 0) == 0); 823 824 /* Test values */ 825 rc = rcOrig; rc.left = -1; 826 TEST(NtUserSystemParametersInfo(SPI_SETWORKAREA, 0, &rc, 0) == 0); 827 rc = rcOrig; rc.top = -1; 828 TEST(NtUserSystemParametersInfo(SPI_SETWORKAREA, 0, &rc, 0) == 0); 829 rc = rcOrig; rc.top = 10; rc.bottom = 11; 830 TEST(NtUserSystemParametersInfo(SPI_SETWORKAREA, 0, &rc, 0) == 1); 831 rc = rcOrig; rc.top = 10; rc.bottom = 10; 832 TEST(NtUserSystemParametersInfo(SPI_SETWORKAREA, 0, &rc, 0) == 0); 833 rc = rcOrig; rc.top = 10; rc.bottom = 9; 834 TEST(NtUserSystemParametersInfo(SPI_SETWORKAREA, 0, &rc, 0) == 0); 835 rc = rcOrig; rc.left = 10; rc.right = 11; 836 TEST(NtUserSystemParametersInfo(SPI_SETWORKAREA, 0, &rc, 0) == 1); 837 rc = rcOrig; rc.left = 10; rc.right = 10; 838 TEST(NtUserSystemParametersInfo(SPI_SETWORKAREA, 0, &rc, 0) == 0); 839 rc = rcOrig; rc.left = 10; rc.right = 9; 840 TEST(NtUserSystemParametersInfo(SPI_SETWORKAREA, 0, &rc, 0) == 0); 841 rc = rcOrig; rc.bottom = GetSystemMetrics(SM_CYVIRTUALSCREEN); 842 TEST(NtUserSystemParametersInfo(SPI_SETWORKAREA, 0, &rc, 0) == 1); 843 rc = rcOrig; rc.bottom = GetSystemMetrics(SM_CYVIRTUALSCREEN)+1; 844 TEST(NtUserSystemParametersInfo(SPI_SETWORKAREA, 0, &rc, 0) == 0); 845 rc = rcOrig; rc.right = GetSystemMetrics(SM_CXVIRTUALSCREEN); 846 TEST(NtUserSystemParametersInfo(SPI_SETWORKAREA, 0, &rc, 0) == 1); 847 rc = rcOrig; rc.right = GetSystemMetrics(SM_CXVIRTUALSCREEN)+1; 848 TEST(NtUserSystemParametersInfo(SPI_SETWORKAREA, 0, &rc, 0) == 0); 849 850 /* Restore original value */ 851 ASSERT(NtUserSystemParametersInfo(SPI_SETWORKAREA, 0, &rcOrig, 0) == 1); 852 853 854 } 855 856 void 857 Test_SPI_SETPENWINDOWS(void) 858 { 859 860 } 861 862 void 863 Test_SPI_SETFILTERKEYS(void) 864 { 865 866 } 867 868 void 869 Test_SPI_SETTOGGLEKEYS(void) 870 { 871 872 } 873 874 void 875 Test_SPI_SETMOUSEKEYS(void) 876 { 877 878 } 879 880 void 881 Test_SPI_SETSHOWSOUNDS(void) 882 { 883 884 } 885 886 void 887 Test_SPI_SETSTICKYKEYS(void) 888 { 889 STICKYKEYS skOrig, sk; 890 891 /* Get original values */ 892 skOrig.cbSize = sizeof(STICKYKEYS); 893 ASSERT(NtUserSystemParametersInfo(SPI_GETSTICKYKEYS, 0, &skOrig, 0) == 1); 894 895 sk.cbSize = sizeof(STICKYKEYS)+1; 896 TEST(NtUserSystemParametersInfo(SPI_GETSTICKYKEYS, 0, &sk, 0) == 0); 897 898 sk.cbSize = sizeof(STICKYKEYS)-1; 899 TEST(NtUserSystemParametersInfo(SPI_GETSTICKYKEYS, 0, &sk, 0) == 0); 900 901 sk.cbSize = sizeof(STICKYKEYS); 902 TEST(NtUserSystemParametersInfo(SPI_GETSTICKYKEYS, 1, &sk, 0) == 0); 903 TEST(NtUserSystemParametersInfo(SPI_GETSTICKYKEYS, -1, &sk, 0) == 0); 904 TEST(NtUserSystemParametersInfo(SPI_GETSTICKYKEYS, sk.cbSize, &sk, 0) == 1); 905 TEST(NtUserSystemParametersInfo(SPI_GETSTICKYKEYS, sk.cbSize-1, &sk, 0) == 0); 906 TEST(NtUserSystemParametersInfo(SPI_GETSTICKYKEYS, sk.cbSize+1, &sk, 0) == 0); 907 908 sk = skOrig; 909 sk.dwFlags = (skOrig.dwFlags ^ 1); 910 TEST(NtUserSystemParametersInfo(SPI_SETSTICKYKEYS, sk.cbSize+1, &sk, 0) == 0); 911 TEST(NtUserSystemParametersInfo(SPI_SETSTICKYKEYS, sk.cbSize-1, &sk, 0) == 0); 912 TEST(NtUserSystemParametersInfo(SPI_SETSTICKYKEYS, sk.cbSize, &sk, 0) == 1); 913 914 sk = skOrig; 915 TEST(NtUserSystemParametersInfo(SPI_GETSTICKYKEYS, 0, &sk, 0) == 1); 916 TEST(sk.dwFlags == (skOrig.dwFlags ^ 1)); 917 918 /* Restore original values */ 919 skOrig.cbSize = sizeof(STICKYKEYS); 920 ASSERT(NtUserSystemParametersInfo(SPI_SETSTICKYKEYS, 0, &skOrig, 0) == 1); 921 922 } 923 924 void 925 Test_SPI_SETACCESSTIMEOUT(void) 926 { 927 ACCESSTIMEOUT atoOrig, atoTmp; 928 929 /* Get original values */ 930 atoOrig.cbSize = sizeof(ACCESSTIMEOUT); 931 ASSERT(NtUserSystemParametersInfo(SPI_GETACCESSTIMEOUT, 0, &atoOrig, 0) == 1); 932 933 atoTmp.cbSize = sizeof(ACCESSTIMEOUT) - 1; 934 TEST(NtUserSystemParametersInfo(SPI_GETACCESSTIMEOUT, 0, &atoTmp, 0) == 0); 935 atoTmp.cbSize = sizeof(ACCESSTIMEOUT) + 1; 936 TEST(NtUserSystemParametersInfo(SPI_GETACCESSTIMEOUT, 0, &atoTmp, 0) == 0); 937 atoTmp.cbSize = sizeof(ACCESSTIMEOUT); 938 TEST(NtUserSystemParametersInfo(SPI_GETACCESSTIMEOUT, 0, &atoTmp, 0) == 1); 939 atoTmp.cbSize = sizeof(ACCESSTIMEOUT); 940 TEST(NtUserSystemParametersInfo(SPI_GETACCESSTIMEOUT, 1, &atoTmp, 0) == 0); 941 atoTmp.cbSize = sizeof(ACCESSTIMEOUT); 942 TEST(NtUserSystemParametersInfo(SPI_GETACCESSTIMEOUT, -1, &atoTmp, 0) == 0); 943 atoTmp.cbSize = sizeof(ACCESSTIMEOUT); 944 TEST(NtUserSystemParametersInfo(SPI_GETACCESSTIMEOUT, sizeof(ACCESSTIMEOUT), &atoTmp, 0) == 1); 945 atoTmp.cbSize = sizeof(ACCESSTIMEOUT); 946 TEST(NtUserSystemParametersInfo(SPI_GETACCESSTIMEOUT, sizeof(ACCESSTIMEOUT)-1, &atoTmp, 0) == 0); 947 atoTmp.cbSize = sizeof(ACCESSTIMEOUT); 948 TEST(NtUserSystemParametersInfo(SPI_GETACCESSTIMEOUT, sizeof(ACCESSTIMEOUT)+1, &atoTmp, 0) == 0); 949 950 /* Restore original values */ 951 ASSERT(NtUserSystemParametersInfo(SPI_SETACCESSTIMEOUT, sizeof(atoOrig), &atoOrig, 0) == 1); 952 } 953 954 void 955 Test_SPI_SETSERIALKEYS(void) 956 { 957 958 } 959 960 void 961 Test_SPI_SETSOUNDSENTRY(void) 962 { 963 964 } 965 966 void 967 Test_SPI_SETHIGHCONTRAST(void) 968 { 969 970 } 971 972 void 973 Test_SPI_SETKEYBOARDPREF(void) 974 { 975 976 } 977 978 // Test_SPI_SETSCREENREADER(); 979 /// Test_SPI_SETANIMATION(); 980 // Test_SPI_SETFONTSMOOTHING(); 981 // Test_SPI_SETDRAGWIDTH(); 982 // Test_SPI_SETDRAGHEIGHT(); 983 // Test_SPI_SETHANDHELD(); 984 // Test_SPI_SETLOWPOWERTIMEOUT(); 985 // Test_SPI_SETPOWEROFFTIMEOUT(); 986 // Test_SPI_SETLOWPOWERACTIVE(); 987 // Test_SPI_SETPOWEROFFACTIVE(); 988 // Test_SPI_SETCURSORS(); 989 // Test_SPI_SETICONS(); 990 // Test_SPI_SETDEFAULTINPUTLANG(); 991 // Test_SPI_SETLANGTOGGLE(); 992 // Test_SPI_GETWINDOWSEXTENSION(); 993 // Test_SPI_SETMOUSETRAILS(); 994 // Test_SPI_SETSNAPTODEFBUTTON(); 995 // Test_SPI_GETSCREENSAVERRUNNING(); 996 // Test_SPI_SETMOUSEHOVERWIDTH(); 997 // Test_SPI_SETMOUSEHOVERHEIGHT(); 998 // Test_SPI_SETMOUSEHOVERTIME(); 999 // Test_SPI_SETWHEELSCROLLLINES(); 1000 // Test_SPI_SETMENUSHOWDELAY(); 1001 // Test_SPI_SETWHEELSCROLLCHARS(); 1002 // Test_SPI_SETSHOWIMEUI(); 1003 // Test_SPI_SETMOUSESPEED(); 1004 // Test_SPI_GETSCREENSAVERRUNNING(); 1005 // Test_SPI_SETAUDIODESCRIPTION(); 1006 // Test_SPI_SETSCREENSAVESECURE(); 1007 // Test_SPI_SETACTIVEWINDOWTRACKING(); 1008 1009 void 1010 Test_SPI_SETMENUANIMATION(void) 1011 { 1012 BOOL bOrig, bTemp = 0; 1013 DWORD dwUserPrefMask; 1014 DWORD cbSize; 1015 1016 /* Get original values */ 1017 NtUserSystemParametersInfo(SPI_GETMENUANIMATION, 0, &bOrig, 0); 1018 1019 /* Value 0 */ 1020 NtUserSystemParametersInfo(SPI_SETMENUANIMATION, 0, NULL, SPIF_UPDATEINIFILE); 1021 NtUserSystemParametersInfo(SPI_GETMENUANIMATION, 0, &bTemp, 0); 1022 TEST(bTemp == 0); 1023 cbSize = sizeof(dwUserPrefMask); 1024 TEST(QueryUserRegValueW(KEY_DESKTOP, VAL_PREFMASK, &dwUserPrefMask, &cbSize, NULL) == ERROR_SUCCESS); 1025 TEST((dwUserPrefMask & UPM_MENUANIMATION) == 0); 1026 1027 /* Value 1 */ 1028 NtUserSystemParametersInfo(SPI_SETMENUANIMATION, 0, (PVOID)1, SPIF_UPDATEINIFILE); 1029 NtUserSystemParametersInfo(SPI_GETMENUANIMATION, 0, &bTemp, 0); 1030 TEST(bTemp == 1); 1031 cbSize = sizeof(dwUserPrefMask); 1032 TEST(QueryUserRegValueW(KEY_DESKTOP, VAL_PREFMASK, &dwUserPrefMask, &cbSize, NULL) == ERROR_SUCCESS); 1033 TEST((dwUserPrefMask & UPM_MENUANIMATION) != 0); 1034 1035 1036 /* Restore original values */ 1037 NtUserSystemParametersInfo(SPI_SETMENUANIMATION, 0, (PVOID)(ULONG_PTR)bOrig, SPIF_UPDATEINIFILE); 1038 } 1039 1040 // Test_SPI_SETCOMBOBOXANIMATION(); 1041 // Test_SPI_SETLISTBOXSMOOTHSCROLLING(); 1042 // Test_SPI_SETGRADIENTCAPTIONS(); 1043 1044 void 1045 Test_SPI_SETKEYBOARDCUES(void) 1046 { 1047 Test_UserPref(SPI_GETKEYBOARDCUES, SPI_SETKEYBOARDCUES, UPM_KEYBOARDCUES); 1048 } 1049 1050 // Test_SPI_SETACTIVEWNDTRKZORDER(); 1051 // Test_SPI_SETHOTTRACKING(); 1052 // Test_SPI_SETMENUFADE(); 1053 // Test_SPI_SETSELECTIONFADE(); 1054 // Test_SPI_SETTOOLTIPANIMATION(); 1055 // Test_SPI_SETTOOLTIPFADE(); 1056 // Test_SPI_SETCURSORSHADOW(); 1057 // Test_SPI_SETMOUSESONAR(); 1058 1059 void 1060 Test_SPI_SETMOUSECLICKLOCK(void) 1061 { 1062 Test_UserPref(SPI_GETMOUSECLICKLOCK, SPI_SETMOUSECLICKLOCK, UPM_CLICKLOCK); 1063 } 1064 1065 // Test_SPI_SETMOUSEVANISH(); 1066 // Test_SPI_SETFLATMENU(); 1067 // Test_SPI_SETDROPSHADOW(); 1068 // Test_SPI_SETBLOCKSENDINPUTRESETS(); 1069 // Test_SPI_GETSETUIEFFECTS(); 1070 // Test_SPI_SETDISABLEOVERLAPPEDCONTENT(); 1071 // Test_SPI_SETCLIENTAREAANIMATION(); 1072 // Test_SPI_SETCLEARTYPE(); 1073 // Test_SPI_SETSPEECHRECOGNITION(); 1074 // Test_SPI_SETFOREGROUNDLOCKTIMEOUT(); 1075 // Test_SPI_SETACTIVEWNDTRKTIMEOUT(); 1076 // Test_SPI_SETFOREGROUNDFLASHCOUNT(); 1077 // Test_SPI_SETCARETWIDTH(); 1078 // Test_SPI_SETMOUSECLICKLOCKTIME(); 1079 // Test_SPI_SETFONTSMOOTHINGTYPE(); 1080 // Test_SPI_SETFONTSMOOTHINGCONTRAST(); 1081 // Test_SPI_SETFOCUSBORDERWIDTH(); 1082 // Test_SPI_SETFOCUSBORDERHEIGHT(); 1083 // Test_SPI_SETFONTSMOOTHINGORIENTATION(); 1084 1085 1086 START_TEST(NtUserSystemParametersInfo) 1087 { 1088 HWND hWnd; 1089 1090 hWnd = CreateTestWindow(); 1091 ASSERT(hWnd); 1092 1093 Test_NtUserSystemParametersInfo_Params(); 1094 Test_NtUserSystemParametersInfo_fWinIni(); 1095 Test_NtUserSystemParametersInfo_Winsta(); 1096 1097 Test_SPI_SETBEEP(); 1098 Test_SPI_SETMOUSE(); 1099 Test_SPI_SETBORDER(); 1100 // Test_SPI_SETKEYBOARDSPEED(); 1101 // Test_SPI_LANGDRIVER(); 1102 // Test_SPI_ICONHORIZONTALSPACING(); 1103 // Test_SPI_SETSCREENSAVETIMEOUT(); 1104 // Test_SPI_SETSCREENSAVEACTIVE(); 1105 // Test_SPI_SETGRIDGRANULARITY(); 1106 Test_SPI_SETDESKWALLPAPER(); 1107 // Test_SPI_SETDESKPATTERN(); 1108 // Test_SPI_SETKEYBOARDDELAY(); 1109 // Test_SPI_ICONVERTICALSPACING(); 1110 // Test_SPI_SETICONTITLEWRAP(); 1111 // Test_SPI_SETMENUDROPALIGNMENT(); 1112 // Test_SPI_SETDOUBLECLKWIDTH(); 1113 // Test_SPI_SETDOUBLECLKHEIGHT(); 1114 // Test_SPI_SETDOUBLECLICKTIME(); 1115 Test_SPI_SETMOUSEBUTTONSWAP(); 1116 Test_SPI_SETICONTITLELOGFONT(); 1117 Test_SPI_SETFASTTASKSWITCH(); 1118 Test_SPI_SETDRAGFULLWINDOWS(); 1119 Test_SPI_SETNONCLIENTMETRICS(); 1120 Test_SPI_SETMINIMIZEDMETRICS(); 1121 Test_SPI_SETICONMETRICS(); 1122 Test_SPI_SETWORKAREA(); 1123 Test_SPI_SETPENWINDOWS(); 1124 Test_SPI_SETFILTERKEYS(); 1125 Test_SPI_SETTOGGLEKEYS(); 1126 Test_SPI_SETMOUSEKEYS(); 1127 Test_SPI_SETSHOWSOUNDS(); 1128 Test_SPI_SETSTICKYKEYS(); 1129 Test_SPI_SETACCESSTIMEOUT(); 1130 Test_SPI_SETSERIALKEYS(); 1131 Test_SPI_SETSOUNDSENTRY(); 1132 Test_SPI_SETHIGHCONTRAST(); 1133 Test_SPI_SETKEYBOARDPREF(); 1134 // Test_SPI_SETSCREENREADER(); 1135 /// Test_SPI_SETANIMATION(); 1136 // Test_SPI_SETFONTSMOOTHING(); 1137 // Test_SPI_SETDRAGWIDTH(); 1138 // Test_SPI_SETDRAGHEIGHT(); 1139 // Test_SPI_SETHANDHELD(); 1140 // Test_SPI_SETLOWPOWERTIMEOUT(); 1141 // Test_SPI_SETPOWEROFFTIMEOUT(); 1142 // Test_SPI_SETLOWPOWERACTIVE(); 1143 // Test_SPI_SETPOWEROFFACTIVE(); 1144 // Test_SPI_SETCURSORS(); 1145 // Test_SPI_SETICONS(); 1146 // Test_SPI_SETDEFAULTINPUTLANG(); 1147 // Test_SPI_SETLANGTOGGLE(); 1148 // Test_SPI_GETWINDOWSEXTENSION(); 1149 // Test_SPI_SETMOUSETRAILS(); 1150 // Test_SPI_SETSNAPTODEFBUTTON(); 1151 // Test_SPI_GETSCREENSAVERRUNNING(); 1152 // Test_SPI_SETMOUSEHOVERWIDTH(); 1153 // Test_SPI_SETMOUSEHOVERHEIGHT(); 1154 // Test_SPI_SETMOUSEHOVERTIME(); 1155 // Test_SPI_SETWHEELSCROLLLINES(); 1156 // Test_SPI_SETMENUSHOWDELAY(); 1157 // Test_SPI_SETWHEELSCROLLCHARS(); 1158 // Test_SPI_SETSHOWIMEUI(); 1159 // Test_SPI_SETMOUSESPEED(); 1160 // Test_SPI_GETSCREENSAVERRUNNING(); 1161 // Test_SPI_SETAUDIODESCRIPTION(); 1162 // Test_SPI_SETSCREENSAVESECURE(); 1163 // Test_SPI_SETACTIVEWINDOWTRACKING(); 1164 Test_SPI_SETMENUANIMATION(); 1165 // Test_SPI_SETCOMBOBOXANIMATION(); 1166 // Test_SPI_SETLISTBOXSMOOTHSCROLLING(); 1167 // Test_SPI_SETGRADIENTCAPTIONS(); 1168 Test_SPI_SETKEYBOARDCUES(); 1169 // Test_SPI_SETACTIVEWNDTRKZORDER(); 1170 // Test_SPI_SETHOTTRACKING(); 1171 // Test_SPI_SETMENUFADE(); 1172 // Test_SPI_SETSELECTIONFADE(); 1173 // Test_SPI_SETTOOLTIPANIMATION(); 1174 // Test_SPI_SETTOOLTIPFADE(); 1175 // Test_SPI_SETCURSORSHADOW(); 1176 // Test_SPI_SETMOUSESONAR(); 1177 Test_SPI_SETMOUSECLICKLOCK(); 1178 // Test_SPI_SETMOUSEVANISH(); 1179 // Test_SPI_SETFLATMENU(); 1180 // Test_SPI_SETDROPSHADOW(); 1181 // Test_SPI_SETBLOCKSENDINPUTRESETS(); 1182 // Test_SPI_GETSETUIEFFECTS(); 1183 // Test_SPI_SETDISABLEOVERLAPPEDCONTENT(); 1184 // Test_SPI_SETCLIENTAREAANIMATION(); 1185 // Test_SPI_SETCLEARTYPE(); 1186 // Test_SPI_SETSPEECHRECOGNITION(); 1187 // Test_SPI_SETFOREGROUNDLOCKTIMEOUT(); 1188 // Test_SPI_SETACTIVEWNDTRKTIMEOUT(); 1189 // Test_SPI_SETFOREGROUNDFLASHCOUNT(); 1190 // Test_SPI_SETCARETWIDTH(); 1191 // Test_SPI_SETMOUSECLICKLOCKTIME(); 1192 // Test_SPI_SETFONTSMOOTHINGTYPE(); 1193 // Test_SPI_SETFONTSMOOTHINGCONTRAST(); 1194 // Test_SPI_SETFOCUSBORDERWIDTH(); 1195 // Test_SPI_SETFOCUSBORDERHEIGHT(); 1196 // Test_SPI_SETFONTSMOOTHINGORIENTATION(); 1197 1198 DestroyWindow(hWnd); 1199 } 1200