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)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 TESTX(QueryUserRegValueW(KEY_METRIC, pwszVal, &szReg, &cbSize, NULL) == ERROR_SUCCESS, "Value=%S\n", pwszVal); 402 TESTX(_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)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 RtlInitUnicodeString(&ustrNew, L"test.bmp"); 603 TEST(NtUserSystemParametersInfo(SPI_SETDESKWALLPAPER, 0, &ustrNew, 0) == 1); 604 TEST(NtUserSystemParametersInfo(SPI_GETDESKWALLPAPER, MAX_PATH, szNew, 0) == 1); 605 TEST(wcscmp(szNew, L"test.bmp") == 0); 606 607 /* Get Wallpaper, too small buffer */ 608 szNew[0] = 0; szNew[1] = 0; szNew[2] = 0; 609 TEST(NtUserSystemParametersInfo(SPI_GETDESKWALLPAPER, 3, szNew, 0) == 1); 610 TEST(szNew[0] != 0); 611 TEST(szNew[1] != 0); 612 TEST(szNew[2] != 0); 613 614 /* Set invalid Wallpaper */ 615 SetLastError(0xdeadbeef); 616 RtlInitUnicodeString(&ustrNew, L"*#!!-&"); 617 TEST(NtUserSystemParametersInfo(SPI_SETDESKWALLPAPER, 0, &ustrNew, 0) == 0); 618 TEST(GetLastError() == ERROR_FILE_NOT_FOUND); 619 TEST(NtUserSystemParametersInfo(SPI_GETDESKWALLPAPER, MAX_PATH, szNew, 0) == 1); 620 TEST(wcscmp(szNew, L"*#!!-&") == 0); 621 622 /* Restore old Wallpaper */ 623 TEST(NtUserSystemParametersInfo(SPI_SETDESKWALLPAPER, MAX_PATH, &ustrOld, SPIF_UPDATEINIFILE) == 1); 624 625 } 626 627 // Test_SPI_SETDESKPATTERN(); 628 // Test_SPI_SETKEYBOARDDELAY(); 629 // Test_SPI_ICONVERTICALSPACING(); 630 // Test_SPI_SETICONTITLEWRAP(); 631 // Test_SPI_SETMENUDROPALIGNMENT(); 632 // Test_SPI_SETDOUBLECLKWIDTH(); 633 // Test_SPI_SETDOUBLECLKHEIGHT(); 634 // Test_SPI_SETDOUBLECLICKTIME(); 635 636 void 637 Test_SPI_SETMOUSEBUTTONSWAP(void) 638 { 639 BOOL bOrig, bTemp = 0; 640 WCHAR szReg[10]; 641 DWORD cbSize; 642 643 /* Get original value */ 644 bOrig = GetSystemMetrics(SM_SWAPBUTTON); 645 646 /* Value 0 */ 647 NtUserSystemParametersInfo(SPI_SETMOUSEBUTTONSWAP, 0, NULL, SPIF_UPDATEINIFILE); 648 bTemp = GetSystemMetrics(SM_SWAPBUTTON); 649 TEST(bTemp == 0); 650 cbSize = sizeof(szReg); 651 TEST(QueryUserRegValueW(KEY_MOUSE, VAL_SWAP, &szReg, &cbSize, NULL) == ERROR_SUCCESS); 652 TEST(_wcsicmp(szReg, L"0") == 0); 653 654 /* Value 1 */ 655 NtUserSystemParametersInfo(SPI_SETMOUSEBUTTONSWAP, 1, NULL, SPIF_UPDATEINIFILE); 656 bTemp = GetSystemMetrics(SM_SWAPBUTTON); 657 TEST(bTemp == 1); 658 cbSize = sizeof(szReg); 659 TEST(QueryUserRegValueW(KEY_MOUSE, VAL_SWAP, &szReg, &cbSize, NULL) == ERROR_SUCCESS); 660 TEST(_wcsicmp(szReg, L"1") == 0); 661 662 /* Value 2 */ 663 NtUserSystemParametersInfo(SPI_SETMOUSEBUTTONSWAP, 2, NULL, SPIF_UPDATEINIFILE); 664 bTemp = GetSystemMetrics(SM_SWAPBUTTON); 665 TEST(bTemp == 1); 666 cbSize = sizeof(szReg); 667 TEST(QueryUserRegValueW(KEY_MOUSE, VAL_SWAP, &szReg, &cbSize, NULL) == ERROR_SUCCESS); 668 TEST(_wcsicmp(szReg, L"2") == 0); 669 670 /* Value -1 */ 671 NtUserSystemParametersInfo(SPI_SETMOUSEBUTTONSWAP, -1, NULL, SPIF_UPDATEINIFILE); 672 bTemp = GetSystemMetrics(SM_SWAPBUTTON); 673 TEST(bTemp == 1); 674 cbSize = sizeof(szReg); 675 TEST(QueryUserRegValueW(KEY_MOUSE, VAL_SWAP, &szReg, &cbSize, NULL) == ERROR_SUCCESS); 676 TEST(_wcsicmp(szReg, L"-1") == 0); 677 678 /* Restore original value */ 679 NtUserSystemParametersInfo(SPI_SETMOUSEBUTTONSWAP, bOrig, 0, SPIF_UPDATEINIFILE); 680 681 682 } 683 684 void 685 Test_SPI_SETICONTITLELOGFONT(void) 686 { 687 LOGFONTW lfOrig; 688 struct 689 { 690 LOGFONTW lf; 691 DWORD dwRedzone; 692 } buf; 693 694 /* Get original value */ 695 ASSERT(NtUserSystemParametersInfo(SPI_GETICONTITLELOGFONT, sizeof(lfOrig), &lfOrig, 0)); 696 697 /* Test uiParam == 0 */ 698 memset(&buf, 0, sizeof(buf)); 699 buf.lf.lfFaceName[LF_FACESIZE-1] = 33; 700 buf.dwRedzone = 0xdeadbeef; 701 TEST(NtUserSystemParametersInfo(SPI_GETICONTITLELOGFONT, 0, &buf.lf, 0) == 1); 702 TEST(buf.lf.lfHeight != 0); 703 TEST(buf.lf.lfWeight != 0); 704 TEST(buf.lf.lfFaceName[0] != 0); 705 TEST(buf.lf.lfFaceName[LF_FACESIZE-1] == 0); 706 TEST(buf.dwRedzone == 0xdeadbeef); 707 708 /* Test uiParam < sizeof(LOGFONTW) */ 709 memset(&buf, 0, sizeof(buf)); 710 buf.lf.lfFaceName[LF_FACESIZE-1] = 33; 711 buf.dwRedzone = 0xdeadbeef; 712 TEST(NtUserSystemParametersInfo(SPI_GETICONTITLELOGFONT, 8, &buf.lf, 0) == 1); 713 TEST(buf.lf.lfHeight != 0); 714 TEST(buf.lf.lfWeight != 0); 715 TEST(buf.lf.lfFaceName[0] != 0); 716 TEST(buf.lf.lfFaceName[LF_FACESIZE-1] == 0); 717 TEST(buf.dwRedzone == 0xdeadbeef); 718 719 /* Test uiParam < 0 */ 720 TEST(NtUserSystemParametersInfo(SPI_GETICONTITLELOGFONT, -1, &buf.lf, 0) == 1); 721 } 722 723 void 724 Test_SPI_SETFASTTASKSWITCH(void) 725 { 726 char buf[10]; 727 TEST(NtUserSystemParametersInfo(SPI_SETFASTTASKSWITCH, 0, 0, 0) == 1); 728 TEST(NtUserSystemParametersInfo(SPI_SETFASTTASKSWITCH, 0, buf, 0) == 1); 729 730 731 } 732 733 void 734 Test_SPI_SETDRAGFULLWINDOWS(void) 735 { 736 737 } 738 739 void 740 Test_SPI_SETNONCLIENTMETRICS(void) 741 { 742 NONCLIENTMETRICSW metrics; 743 NONCLIENTMETRICSW origMetrics; 744 745 metrics.cbSize = sizeof(NONCLIENTMETRICSW); 746 TEST(NtUserSystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICSW), &metrics, 0) == 1); 747 TEST(NtUserSystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICSW), (PVOID)0xdeadbeef, 0) == 0); 748 749 origMetrics = metrics; 750 751 metrics.cbSize = sizeof(NONCLIENTMETRICSW) + 10; 752 TEST(NtUserSystemParametersInfo(SPI_SETNONCLIENTMETRICS, 0, (PVOID)&metrics, 0) == 1); 753 TEST(NtUserSystemParametersInfo(SPI_GETNONCLIENTMETRICS, 0, (PVOID)&metrics, 0) == 1); 754 ok(metrics.cbSize == sizeof(NONCLIENTMETRICSW), "Expected size: %lu, got %lu\n", (ULONG)sizeof(NONCLIENTMETRICSW), (ULONG)metrics.cbSize); 755 756 TEST(NtUserSystemParametersInfo(SPI_SETNONCLIENTMETRICS, 0, (PVOID)&origMetrics, 0) == 1); 757 } 758 759 void 760 Test_SPI_SETMINIMIZEDMETRICS(void) 761 { 762 MINIMIZEDMETRICS metrics; 763 MINIMIZEDMETRICS origMetrics; 764 765 metrics.cbSize = sizeof(MINIMIZEDMETRICS); 766 TEST(NtUserSystemParametersInfo(SPI_GETMINIMIZEDMETRICS, sizeof(MINIMIZEDMETRICS), (PVOID)&metrics, 0) == 1); 767 TEST(NtUserSystemParametersInfo(SPI_GETMINIMIZEDMETRICS, sizeof(MINIMIZEDMETRICS), (PVOID)0xdeadbeef, 0) == 0); 768 769 origMetrics = metrics; 770 771 metrics.cbSize = sizeof(MINIMIZEDMETRICS) + 10; 772 TEST(NtUserSystemParametersInfo(SPI_SETMINIMIZEDMETRICS, 0, (PVOID)&metrics, 0) == 1); 773 TEST(NtUserSystemParametersInfo(SPI_GETMINIMIZEDMETRICS, 0, (PVOID)&metrics, 0) == 1); 774 ok(metrics.cbSize == sizeof(MINIMIZEDMETRICS), "Expected size: %lu, got %lu\n", (ULONG)sizeof(MINIMIZEDMETRICS), (ULONG)metrics.cbSize); 775 776 TEST(NtUserSystemParametersInfo(SPI_SETMINIMIZEDMETRICS, 0, (PVOID)&origMetrics, 0) == 1); 777 } 778 779 void 780 Test_SPI_SETICONMETRICS(void) 781 { 782 ICONMETRICSW metrics; 783 ICONMETRICSW origMetrics; 784 785 metrics.cbSize = sizeof(ICONMETRICSW); 786 TEST(NtUserSystemParametersInfo(SPI_GETICONMETRICS, sizeof(ICONMETRICSW), (PVOID)&metrics, 0) == 1); 787 TEST(NtUserSystemParametersInfo(SPI_GETICONMETRICS, sizeof(ICONMETRICSW), (PVOID)0xdeadbeef, 0) == 0); 788 789 origMetrics = metrics; 790 791 metrics.cbSize = sizeof(ICONMETRICSW) + 10; 792 TEST(NtUserSystemParametersInfo(SPI_SETICONMETRICS, 0, (PVOID)&metrics, 0) == 1); 793 TEST(NtUserSystemParametersInfo(SPI_GETICONMETRICS, 0, (PVOID)&metrics, 0) == 1); 794 ok(metrics.cbSize == sizeof(ICONMETRICSW), "Expected size: %lu, got %lu\n", (ULONG)sizeof(ICONMETRICSW), (ULONG)metrics.cbSize); 795 796 TEST(NtUserSystemParametersInfo(SPI_SETICONMETRICS, 0, (PVOID)&origMetrics, 0) == 1); 797 } 798 799 void 800 Test_SPI_SETWORKAREA(void) 801 { 802 RECT rcOrig, rc; 803 804 /* Get the original value */ 805 ASSERT(NtUserSystemParametersInfo(SPI_GETWORKAREA, 0, &rcOrig, 0) == 1); 806 807 /* Change value */ 808 rc = rcOrig; 809 rc.left += 1; 810 rc.top += 2; 811 rc.right -= 3; 812 rc.bottom -= 2; 813 TEST(NtUserSystemParametersInfo(SPI_SETWORKAREA, 1, &rc, 0) == 1); 814 TEST(NtUserSystemParametersInfo(SPI_SETWORKAREA, 0, &rc, 0) == 1); 815 TEST(NtUserSystemParametersInfo(SPI_SETWORKAREA, sizeof(RECT), &rc, 0) == 1); 816 817 TEST(NtUserSystemParametersInfo(SPI_GETWORKAREA, 1, &rc, 0) == 1); 818 TEST(NtUserSystemParametersInfo(SPI_GETWORKAREA, -1, &rc, 0) == 1); 819 TEST(NtUserSystemParametersInfo(SPI_GETWORKAREA, 0xdeadbeef, &rc, 0) == 1); 820 TEST(NtUserSystemParametersInfo(SPI_GETWORKAREA, 0, (PVOID)0xdeadbeef, 0) == 0); 821 822 /* Test values */ 823 rc = rcOrig; rc.left = -1; 824 TEST(NtUserSystemParametersInfo(SPI_SETWORKAREA, 0, &rc, 0) == 0); 825 rc = rcOrig; rc.top = -1; 826 TEST(NtUserSystemParametersInfo(SPI_SETWORKAREA, 0, &rc, 0) == 0); 827 rc = rcOrig; rc.top = 10; rc.bottom = 11; 828 TEST(NtUserSystemParametersInfo(SPI_SETWORKAREA, 0, &rc, 0) == 1); 829 rc = rcOrig; rc.top = 10; rc.bottom = 10; 830 TEST(NtUserSystemParametersInfo(SPI_SETWORKAREA, 0, &rc, 0) == 0); 831 rc = rcOrig; rc.top = 10; rc.bottom = 9; 832 TEST(NtUserSystemParametersInfo(SPI_SETWORKAREA, 0, &rc, 0) == 0); 833 rc = rcOrig; rc.left = 10; rc.right = 11; 834 TEST(NtUserSystemParametersInfo(SPI_SETWORKAREA, 0, &rc, 0) == 1); 835 rc = rcOrig; rc.left = 10; rc.right = 10; 836 TEST(NtUserSystemParametersInfo(SPI_SETWORKAREA, 0, &rc, 0) == 0); 837 rc = rcOrig; rc.left = 10; rc.right = 9; 838 TEST(NtUserSystemParametersInfo(SPI_SETWORKAREA, 0, &rc, 0) == 0); 839 rc = rcOrig; rc.bottom = GetSystemMetrics(SM_CYVIRTUALSCREEN); 840 TEST(NtUserSystemParametersInfo(SPI_SETWORKAREA, 0, &rc, 0) == 1); 841 rc = rcOrig; rc.bottom = GetSystemMetrics(SM_CYVIRTUALSCREEN)+1; 842 TEST(NtUserSystemParametersInfo(SPI_SETWORKAREA, 0, &rc, 0) == 0); 843 rc = rcOrig; rc.right = GetSystemMetrics(SM_CXVIRTUALSCREEN); 844 TEST(NtUserSystemParametersInfo(SPI_SETWORKAREA, 0, &rc, 0) == 1); 845 rc = rcOrig; rc.right = GetSystemMetrics(SM_CXVIRTUALSCREEN)+1; 846 TEST(NtUserSystemParametersInfo(SPI_SETWORKAREA, 0, &rc, 0) == 0); 847 848 /* Restore original value */ 849 ASSERT(NtUserSystemParametersInfo(SPI_SETWORKAREA, 0, &rcOrig, 0) == 1); 850 851 852 } 853 854 void 855 Test_SPI_SETPENWINDOWS(void) 856 { 857 858 } 859 860 void 861 Test_SPI_SETFILTERKEYS(void) 862 { 863 864 } 865 866 void 867 Test_SPI_SETTOGGLEKEYS(void) 868 { 869 870 } 871 872 void 873 Test_SPI_SETMOUSEKEYS(void) 874 { 875 876 } 877 878 void 879 Test_SPI_SETSHOWSOUNDS(void) 880 { 881 882 } 883 884 void 885 Test_SPI_SETSTICKYKEYS(void) 886 { 887 STICKYKEYS skOrig, sk; 888 889 /* Get original values */ 890 skOrig.cbSize = sizeof(STICKYKEYS); 891 ASSERT(NtUserSystemParametersInfo(SPI_GETSTICKYKEYS, 0, &skOrig, 0) == 1); 892 893 sk.cbSize = sizeof(STICKYKEYS)+1; 894 TEST(NtUserSystemParametersInfo(SPI_GETSTICKYKEYS, 0, &sk, 0) == 0); 895 896 sk.cbSize = sizeof(STICKYKEYS)-1; 897 TEST(NtUserSystemParametersInfo(SPI_GETSTICKYKEYS, 0, &sk, 0) == 0); 898 899 sk.cbSize = sizeof(STICKYKEYS); 900 TEST(NtUserSystemParametersInfo(SPI_GETSTICKYKEYS, 1, &sk, 0) == 0); 901 TEST(NtUserSystemParametersInfo(SPI_GETSTICKYKEYS, -1, &sk, 0) == 0); 902 TEST(NtUserSystemParametersInfo(SPI_GETSTICKYKEYS, sk.cbSize, &sk, 0) == 1); 903 TEST(NtUserSystemParametersInfo(SPI_GETSTICKYKEYS, sk.cbSize-1, &sk, 0) == 0); 904 TEST(NtUserSystemParametersInfo(SPI_GETSTICKYKEYS, sk.cbSize+1, &sk, 0) == 0); 905 906 sk = skOrig; 907 sk.dwFlags = (skOrig.dwFlags ^ 1); 908 TEST(NtUserSystemParametersInfo(SPI_SETSTICKYKEYS, sk.cbSize+1, &sk, 0) == 0); 909 TEST(NtUserSystemParametersInfo(SPI_SETSTICKYKEYS, sk.cbSize-1, &sk, 0) == 0); 910 TEST(NtUserSystemParametersInfo(SPI_SETSTICKYKEYS, sk.cbSize, &sk, 0) == 1); 911 912 sk = skOrig; 913 TEST(NtUserSystemParametersInfo(SPI_GETSTICKYKEYS, 0, &sk, 0) == 1); 914 TEST(sk.dwFlags == (skOrig.dwFlags ^ 1)); 915 916 /* Restore original values */ 917 skOrig.cbSize = sizeof(STICKYKEYS); 918 ASSERT(NtUserSystemParametersInfo(SPI_SETSTICKYKEYS, 0, &skOrig, 0) == 1); 919 920 } 921 922 void 923 Test_SPI_SETACCESSTIMEOUT(void) 924 { 925 ACCESSTIMEOUT atoOrig, atoTmp; 926 927 /* Get original values */ 928 atoOrig.cbSize = sizeof(ACCESSTIMEOUT); 929 ASSERT(NtUserSystemParametersInfo(SPI_GETACCESSTIMEOUT, 0, &atoOrig, 0) == 1); 930 931 atoTmp.cbSize = sizeof(ACCESSTIMEOUT) - 1; 932 TEST(NtUserSystemParametersInfo(SPI_GETACCESSTIMEOUT, 0, &atoTmp, 0) == 0); 933 atoTmp.cbSize = sizeof(ACCESSTIMEOUT) + 1; 934 TEST(NtUserSystemParametersInfo(SPI_GETACCESSTIMEOUT, 0, &atoTmp, 0) == 0); 935 atoTmp.cbSize = sizeof(ACCESSTIMEOUT); 936 TEST(NtUserSystemParametersInfo(SPI_GETACCESSTIMEOUT, 0, &atoTmp, 0) == 1); 937 atoTmp.cbSize = sizeof(ACCESSTIMEOUT); 938 TEST(NtUserSystemParametersInfo(SPI_GETACCESSTIMEOUT, 1, &atoTmp, 0) == 0); 939 atoTmp.cbSize = sizeof(ACCESSTIMEOUT); 940 TEST(NtUserSystemParametersInfo(SPI_GETACCESSTIMEOUT, -1, &atoTmp, 0) == 0); 941 atoTmp.cbSize = sizeof(ACCESSTIMEOUT); 942 TEST(NtUserSystemParametersInfo(SPI_GETACCESSTIMEOUT, sizeof(ACCESSTIMEOUT), &atoTmp, 0) == 1); 943 atoTmp.cbSize = sizeof(ACCESSTIMEOUT); 944 TEST(NtUserSystemParametersInfo(SPI_GETACCESSTIMEOUT, sizeof(ACCESSTIMEOUT)-1, &atoTmp, 0) == 0); 945 atoTmp.cbSize = sizeof(ACCESSTIMEOUT); 946 TEST(NtUserSystemParametersInfo(SPI_GETACCESSTIMEOUT, sizeof(ACCESSTIMEOUT)+1, &atoTmp, 0) == 0); 947 948 /* Restore original values */ 949 ASSERT(NtUserSystemParametersInfo(SPI_SETACCESSTIMEOUT, sizeof(atoOrig), &atoOrig, 0) == 1); 950 } 951 952 void 953 Test_SPI_SETSERIALKEYS(void) 954 { 955 956 } 957 958 void 959 Test_SPI_SETSOUNDSENTRY(void) 960 { 961 962 } 963 964 void 965 Test_SPI_SETHIGHCONTRAST(void) 966 { 967 968 } 969 970 void 971 Test_SPI_SETKEYBOARDPREF(void) 972 { 973 974 } 975 976 // Test_SPI_SETSCREENREADER(); 977 /// Test_SPI_SETANIMATION(); 978 // Test_SPI_SETFONTSMOOTHING(); 979 // Test_SPI_SETDRAGWIDTH(); 980 // Test_SPI_SETDRAGHEIGHT(); 981 // Test_SPI_SETHANDHELD(); 982 // Test_SPI_SETLOWPOWERTIMEOUT(); 983 // Test_SPI_SETPOWEROFFTIMEOUT(); 984 // Test_SPI_SETLOWPOWERACTIVE(); 985 // Test_SPI_SETPOWEROFFACTIVE(); 986 // Test_SPI_SETCURSORS(); 987 // Test_SPI_SETICONS(); 988 // Test_SPI_SETDEFAULTINPUTLANG(); 989 // Test_SPI_SETLANGTOGGLE(); 990 // Test_SPI_GETWINDOWSEXTENSION(); 991 // Test_SPI_SETMOUSETRAILS(); 992 // Test_SPI_SETSNAPTODEFBUTTON(); 993 // Test_SPI_GETSCREENSAVERRUNNING(); 994 // Test_SPI_SETMOUSEHOVERWIDTH(); 995 // Test_SPI_SETMOUSEHOVERHEIGHT(); 996 // Test_SPI_SETMOUSEHOVERTIME(); 997 // Test_SPI_SETWHEELSCROLLLINES(); 998 // Test_SPI_SETMENUSHOWDELAY(); 999 // Test_SPI_SETWHEELSCROLLCHARS(); 1000 // Test_SPI_SETSHOWIMEUI(); 1001 // Test_SPI_SETMOUSESPEED(); 1002 // Test_SPI_GETSCREENSAVERRUNNING(); 1003 // Test_SPI_SETAUDIODESCRIPTION(); 1004 // Test_SPI_SETSCREENSAVESECURE(); 1005 // Test_SPI_SETACTIVEWINDOWTRACKING(); 1006 1007 void 1008 Test_SPI_SETMENUANIMATION(void) 1009 { 1010 BOOL bOrig, bTemp = 0; 1011 DWORD dwUserPrefMask; 1012 DWORD cbSize; 1013 1014 /* Get original values */ 1015 NtUserSystemParametersInfo(SPI_GETMENUANIMATION, 0, &bOrig, 0); 1016 1017 /* Value 0 */ 1018 NtUserSystemParametersInfo(SPI_SETMENUANIMATION, 0, NULL, SPIF_UPDATEINIFILE); 1019 NtUserSystemParametersInfo(SPI_GETMENUANIMATION, 0, &bTemp, 0); 1020 TEST(bTemp == 0); 1021 cbSize = sizeof(dwUserPrefMask); 1022 TEST(QueryUserRegValueW(KEY_DESKTOP, VAL_PREFMASK, &dwUserPrefMask, &cbSize, NULL) == ERROR_SUCCESS); 1023 TEST((dwUserPrefMask & UPM_MENUANIMATION) == 0); 1024 1025 /* Value 1 */ 1026 NtUserSystemParametersInfo(SPI_SETMENUANIMATION, 0, (PVOID)1, SPIF_UPDATEINIFILE); 1027 NtUserSystemParametersInfo(SPI_GETMENUANIMATION, 0, &bTemp, 0); 1028 TEST(bTemp == 1); 1029 cbSize = sizeof(dwUserPrefMask); 1030 TEST(QueryUserRegValueW(KEY_DESKTOP, VAL_PREFMASK, &dwUserPrefMask, &cbSize, NULL) == ERROR_SUCCESS); 1031 TEST((dwUserPrefMask & UPM_MENUANIMATION) != 0); 1032 1033 1034 /* Restore original values */ 1035 NtUserSystemParametersInfo(SPI_SETMENUANIMATION, 0, (PVOID)bOrig, SPIF_UPDATEINIFILE); 1036 } 1037 1038 // Test_SPI_SETCOMBOBOXANIMATION(); 1039 // Test_SPI_SETLISTBOXSMOOTHSCROLLING(); 1040 // Test_SPI_SETGRADIENTCAPTIONS(); 1041 1042 void 1043 Test_SPI_SETKEYBOARDCUES(void) 1044 { 1045 Test_UserPref(SPI_GETKEYBOARDCUES, SPI_SETKEYBOARDCUES, UPM_KEYBOARDCUES); 1046 } 1047 1048 // Test_SPI_SETACTIVEWNDTRKZORDER(); 1049 // Test_SPI_SETHOTTRACKING(); 1050 // Test_SPI_SETMENUFADE(); 1051 // Test_SPI_SETSELECTIONFADE(); 1052 // Test_SPI_SETTOOLTIPANIMATION(); 1053 // Test_SPI_SETTOOLTIPFADE(); 1054 // Test_SPI_SETCURSORSHADOW(); 1055 // Test_SPI_SETMOUSESONAR(); 1056 1057 void 1058 Test_SPI_SETMOUSECLICKLOCK(void) 1059 { 1060 Test_UserPref(SPI_GETMOUSECLICKLOCK, SPI_SETMOUSECLICKLOCK, UPM_CLICKLOCK); 1061 } 1062 1063 // Test_SPI_SETMOUSEVANISH(); 1064 // Test_SPI_SETFLATMENU(); 1065 // Test_SPI_SETDROPSHADOW(); 1066 // Test_SPI_SETBLOCKSENDINPUTRESETS(); 1067 // Test_SPI_GETSETUIEFFECTS(); 1068 // Test_SPI_SETDISABLEOVERLAPPEDCONTENT(); 1069 // Test_SPI_SETCLIENTAREAANIMATION(); 1070 // Test_SPI_SETCLEARTYPE(); 1071 // Test_SPI_SETSPEECHRECOGNITION(); 1072 // Test_SPI_SETFOREGROUNDLOCKTIMEOUT(); 1073 // Test_SPI_SETACTIVEWNDTRKTIMEOUT(); 1074 // Test_SPI_SETFOREGROUNDFLASHCOUNT(); 1075 // Test_SPI_SETCARETWIDTH(); 1076 // Test_SPI_SETMOUSECLICKLOCKTIME(); 1077 // Test_SPI_SETFONTSMOOTHINGTYPE(); 1078 // Test_SPI_SETFONTSMOOTHINGCONTRAST(); 1079 // Test_SPI_SETFOCUSBORDERWIDTH(); 1080 // Test_SPI_SETFOCUSBORDERHEIGHT(); 1081 // Test_SPI_SETFONTSMOOTHINGORIENTATION(); 1082 1083 1084 START_TEST(NtUserSystemParametersInfo) 1085 { 1086 HWND hWnd; 1087 1088 hWnd = CreateTestWindow(); 1089 ASSERT(hWnd); 1090 1091 Test_NtUserSystemParametersInfo_Params(); 1092 Test_NtUserSystemParametersInfo_fWinIni(); 1093 Test_NtUserSystemParametersInfo_Winsta(); 1094 1095 Test_SPI_SETBEEP(); 1096 Test_SPI_SETMOUSE(); 1097 Test_SPI_SETBORDER(); 1098 // Test_SPI_SETKEYBOARDSPEED(); 1099 // Test_SPI_LANGDRIVER(); 1100 // Test_SPI_ICONHORIZONTALSPACING(); 1101 // Test_SPI_SETSCREENSAVETIMEOUT(); 1102 // Test_SPI_SETSCREENSAVEACTIVE(); 1103 // Test_SPI_SETGRIDGRANULARITY(); 1104 Test_SPI_SETDESKWALLPAPER(); 1105 // Test_SPI_SETDESKPATTERN(); 1106 // Test_SPI_SETKEYBOARDDELAY(); 1107 // Test_SPI_ICONVERTICALSPACING(); 1108 // Test_SPI_SETICONTITLEWRAP(); 1109 // Test_SPI_SETMENUDROPALIGNMENT(); 1110 // Test_SPI_SETDOUBLECLKWIDTH(); 1111 // Test_SPI_SETDOUBLECLKHEIGHT(); 1112 // Test_SPI_SETDOUBLECLICKTIME(); 1113 Test_SPI_SETMOUSEBUTTONSWAP(); 1114 Test_SPI_SETICONTITLELOGFONT(); 1115 Test_SPI_SETFASTTASKSWITCH(); 1116 Test_SPI_SETDRAGFULLWINDOWS(); 1117 Test_SPI_SETNONCLIENTMETRICS(); 1118 Test_SPI_SETMINIMIZEDMETRICS(); 1119 Test_SPI_SETICONMETRICS(); 1120 Test_SPI_SETWORKAREA(); 1121 Test_SPI_SETPENWINDOWS(); 1122 Test_SPI_SETFILTERKEYS(); 1123 Test_SPI_SETTOGGLEKEYS(); 1124 Test_SPI_SETMOUSEKEYS(); 1125 Test_SPI_SETSHOWSOUNDS(); 1126 Test_SPI_SETSTICKYKEYS(); 1127 Test_SPI_SETACCESSTIMEOUT(); 1128 Test_SPI_SETSERIALKEYS(); 1129 Test_SPI_SETSOUNDSENTRY(); 1130 Test_SPI_SETHIGHCONTRAST(); 1131 Test_SPI_SETKEYBOARDPREF(); 1132 // Test_SPI_SETSCREENREADER(); 1133 /// Test_SPI_SETANIMATION(); 1134 // Test_SPI_SETFONTSMOOTHING(); 1135 // Test_SPI_SETDRAGWIDTH(); 1136 // Test_SPI_SETDRAGHEIGHT(); 1137 // Test_SPI_SETHANDHELD(); 1138 // Test_SPI_SETLOWPOWERTIMEOUT(); 1139 // Test_SPI_SETPOWEROFFTIMEOUT(); 1140 // Test_SPI_SETLOWPOWERACTIVE(); 1141 // Test_SPI_SETPOWEROFFACTIVE(); 1142 // Test_SPI_SETCURSORS(); 1143 // Test_SPI_SETICONS(); 1144 // Test_SPI_SETDEFAULTINPUTLANG(); 1145 // Test_SPI_SETLANGTOGGLE(); 1146 // Test_SPI_GETWINDOWSEXTENSION(); 1147 // Test_SPI_SETMOUSETRAILS(); 1148 // Test_SPI_SETSNAPTODEFBUTTON(); 1149 // Test_SPI_GETSCREENSAVERRUNNING(); 1150 // Test_SPI_SETMOUSEHOVERWIDTH(); 1151 // Test_SPI_SETMOUSEHOVERHEIGHT(); 1152 // Test_SPI_SETMOUSEHOVERTIME(); 1153 // Test_SPI_SETWHEELSCROLLLINES(); 1154 // Test_SPI_SETMENUSHOWDELAY(); 1155 // Test_SPI_SETWHEELSCROLLCHARS(); 1156 // Test_SPI_SETSHOWIMEUI(); 1157 // Test_SPI_SETMOUSESPEED(); 1158 // Test_SPI_GETSCREENSAVERRUNNING(); 1159 // Test_SPI_SETAUDIODESCRIPTION(); 1160 // Test_SPI_SETSCREENSAVESECURE(); 1161 // Test_SPI_SETACTIVEWINDOWTRACKING(); 1162 Test_SPI_SETMENUANIMATION(); 1163 // Test_SPI_SETCOMBOBOXANIMATION(); 1164 // Test_SPI_SETLISTBOXSMOOTHSCROLLING(); 1165 // Test_SPI_SETGRADIENTCAPTIONS(); 1166 Test_SPI_SETKEYBOARDCUES(); 1167 // Test_SPI_SETACTIVEWNDTRKZORDER(); 1168 // Test_SPI_SETHOTTRACKING(); 1169 // Test_SPI_SETMENUFADE(); 1170 // Test_SPI_SETSELECTIONFADE(); 1171 // Test_SPI_SETTOOLTIPANIMATION(); 1172 // Test_SPI_SETTOOLTIPFADE(); 1173 // Test_SPI_SETCURSORSHADOW(); 1174 // Test_SPI_SETMOUSESONAR(); 1175 Test_SPI_SETMOUSECLICKLOCK(); 1176 // Test_SPI_SETMOUSEVANISH(); 1177 // Test_SPI_SETFLATMENU(); 1178 // Test_SPI_SETDROPSHADOW(); 1179 // Test_SPI_SETBLOCKSENDINPUTRESETS(); 1180 // Test_SPI_GETSETUIEFFECTS(); 1181 // Test_SPI_SETDISABLEOVERLAPPEDCONTENT(); 1182 // Test_SPI_SETCLIENTAREAANIMATION(); 1183 // Test_SPI_SETCLEARTYPE(); 1184 // Test_SPI_SETSPEECHRECOGNITION(); 1185 // Test_SPI_SETFOREGROUNDLOCKTIMEOUT(); 1186 // Test_SPI_SETACTIVEWNDTRKTIMEOUT(); 1187 // Test_SPI_SETFOREGROUNDFLASHCOUNT(); 1188 // Test_SPI_SETCARETWIDTH(); 1189 // Test_SPI_SETMOUSECLICKLOCKTIME(); 1190 // Test_SPI_SETFONTSMOOTHINGTYPE(); 1191 // Test_SPI_SETFONTSMOOTHINGCONTRAST(); 1192 // Test_SPI_SETFOCUSBORDERWIDTH(); 1193 // Test_SPI_SETFOCUSBORDERHEIGHT(); 1194 // Test_SPI_SETFONTSMOOTHINGORIENTATION(); 1195 1196 DestroyWindow(hWnd); 1197 } 1198