📄 sysparams.c
字号:
if (rc==ERROR_SUCCESS)
{
ok( !strcmp( testValue, value ),
"Wrong value in registry: subKey=%s, valName=%s, testValue=%s, value=%s\n",
subKey2, valName2, testValue, value );
found++;
}
else if (strict)
{
ok( 0,"Missing registry entry: subKey=%s, valName=%s\n",
subKey2, valName2 );
}
}
}
ok(found,"Missing registry values: %s or %s in keys: %s or %s\n",
valName1, (valName2?valName2:"<n/a>"), subKey1, (subKey2?subKey2:"<n/a>") );
}
#define test_reg_key( subKey, valName, testValue ) \
_test_reg_key( subKey, NULL, valName, NULL, testValue )
#define test_reg_key_ex( subKey1, subKey2, valName, testValue ) \
_test_reg_key( subKey1, subKey2, valName, NULL, testValue )
#define test_reg_key_ex2( subKey1, subKey2, valName1, valName2, testValue ) \
_test_reg_key( subKey1, subKey2, valName1, valName2, testValue )
/* get a metric from the registry. If the value is negative
* it is assumed to be in twips and converted to pixels */
static UINT metricfromreg( char *keyname, char *valname, int dpi)
{
HKEY hkey;
char buf[64];
DWORD ret;
DWORD size, type;
int value;
RegOpenKeyA( HKEY_CURRENT_USER, keyname, &hkey );
size = sizeof(buf);
ret=RegQueryValueExA( hkey, valname, NULL, &type, (LPBYTE)buf, &size );
RegCloseKey( hkey );
if( ret != ERROR_SUCCESS) return -1;
value = atoi( buf);
if( value < 0)
value = ( -value * dpi + 720) / 1440;
return value;
}
typedef struct
{
INT16 lfHeight;
INT16 lfWidth;
INT16 lfEscapement;
INT16 lfOrientation;
INT16 lfWeight;
BYTE lfItalic;
BYTE lfUnderline;
BYTE lfStrikeOut;
BYTE lfCharSet;
BYTE lfOutPrecision;
BYTE lfClipPrecision;
BYTE lfQuality;
BYTE lfPitchAndFamily;
CHAR lfFaceName[LF_FACESIZE];
} LOGFONT16, *LPLOGFONT16;
/* get logfont from the registry */
static int lffromreg( char *keyname, char *valname, LOGFONTA *plf)
{
HKEY hkey;
LOGFONTW lfw;
DWORD ret, size, type;
RegOpenKeyA( HKEY_CURRENT_USER, keyname, &hkey );
size = sizeof( lfw);
ret=RegQueryValueExA( hkey, valname, NULL, &type, (LPBYTE)&lfw, &size );
RegCloseKey( hkey );
ok( ret == ERROR_SUCCESS, "Key \"%s\" value \"%s\" not found\n", keyname, valname);
if( ret != ERROR_SUCCESS)
return FALSE;
if( size <= sizeof( LOGFONT16)) {
LOGFONT16 *plf16 = (LOGFONT16*) &lfw;
plf->lfHeight = plf16->lfHeight;
plf->lfWidth = plf16->lfWidth;
plf->lfEscapement = plf16->lfEscapement;
plf->lfOrientation = plf16->lfOrientation;
plf->lfWeight = plf16->lfWeight;
plf->lfItalic = plf16->lfItalic;
plf->lfUnderline = plf16->lfUnderline;
plf->lfStrikeOut = plf16->lfStrikeOut;
plf->lfCharSet = plf16->lfCharSet;
plf->lfOutPrecision = plf16->lfOutPrecision;
plf->lfClipPrecision = plf16->lfClipPrecision;
plf->lfQuality = plf16->lfQuality;
plf->lfPitchAndFamily = plf16->lfPitchAndFamily;
memcpy( plf->lfFaceName, plf16->lfFaceName, LF_FACESIZE );
} else if( size <= sizeof( LOGFONTA)) {
plf = (LOGFONTA*) &lfw;
} else {
plf->lfHeight = lfw.lfHeight;
plf->lfWidth = lfw.lfWidth;
plf->lfEscapement = lfw.lfEscapement;
plf->lfOrientation = lfw.lfOrientation;
plf->lfWeight = lfw.lfWeight;
plf->lfItalic = lfw.lfItalic;
plf->lfUnderline = lfw.lfUnderline;
plf->lfStrikeOut = lfw.lfStrikeOut;
plf->lfCharSet = lfw.lfCharSet;
plf->lfOutPrecision = lfw.lfOutPrecision;
plf->lfClipPrecision = lfw.lfClipPrecision;
plf->lfQuality = lfw.lfQuality;
plf->lfPitchAndFamily = lfw.lfPitchAndFamily;
WideCharToMultiByte( CP_ACP, 0, lfw.lfFaceName, -1, plf->lfFaceName,
LF_FACESIZE, NULL, NULL);
}
return TRUE;
}
static void test_SPI_SETBEEP( void ) /* 2 */
{
BOOL rc;
BOOL old_b;
BOOL b;
BOOL curr_val;
trace("testing SPI_{GET,SET}BEEP\n");
SetLastError(0xdeadbeef);
rc=SystemParametersInfoA( SPI_GETBEEP, 0, &old_b, 0 );
if (!test_error_msg(rc,"SPI_{GET,SET}BEEP"))
return;
curr_val = TRUE;
rc=SystemParametersInfoA( SPI_SETBEEP, curr_val, 0, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
test_change_message( SPI_SETBEEP, 0 );
test_reg_key( SPI_SETBEEP_REGKEY,
SPI_SETBEEP_VALNAME,
curr_val ? "Yes" : "No" );
rc=SystemParametersInfoA( SPI_GETBEEP, 0, &b, 0 );
ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
eq( b, curr_val, "SPI_{GET,SET}BEEP", "%d" );
rc=SystemParametersInfoW( SPI_GETBEEP, 0, &b, 0 );
if (rc!=0 || GetLastError()!=ERROR_CALL_NOT_IMPLEMENTED)
{
ok(rc!=0,"SystemParametersInfoW: rc=%d err=%ld\n",rc,GetLastError());
eq( b, curr_val, "SystemParametersInfoW", "%d" );
}
/* is a message sent for the second change? */
rc=SystemParametersInfoA( SPI_SETBEEP, curr_val, 0, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
test_change_message( SPI_SETBEEP, 0 );
curr_val = FALSE;
rc=SystemParametersInfoW( SPI_SETBEEP, curr_val, 0, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
if (rc==0 && GetLastError()==ERROR_CALL_NOT_IMPLEMENTED)
rc=SystemParametersInfoA( SPI_SETBEEP, curr_val, 0, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
ok(rc!=0,"SystemParametersInfo: rc=%d err=%ld\n",rc,GetLastError());
test_change_message( SPI_SETBEEP, 0 );
test_reg_key( SPI_SETBEEP_REGKEY,
SPI_SETBEEP_VALNAME,
curr_val ? "Yes" : "No" );
rc=SystemParametersInfoA( SPI_GETBEEP, 0, &b, 0 );
ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
eq( b, curr_val, "SPI_{GET,SET}BEEP", "%d" );
rc=SystemParametersInfoW( SPI_GETBEEP, 0, &b, 0 );
if (rc!=0 || GetLastError()!=ERROR_CALL_NOT_IMPLEMENTED)
{
ok(rc!=0,"SystemParametersInfoW: rc=%d err=%ld\n",rc,GetLastError());
eq( b, curr_val, "SystemParametersInfoW", "%d" );
}
ok( MessageBeep( MB_OK ), "Return value of MessageBeep when sound is disabled\n" );
rc=SystemParametersInfoA( SPI_SETBEEP, old_b, 0, SPIF_UPDATEINIFILE );
ok(rc!=0,"***warning*** failed to restore the original value: rc=%d err=%ld\n",rc,GetLastError());
}
static const char *setmouse_valuenames[3] = {
SPI_SETMOUSE_VALNAME1,
SPI_SETMOUSE_VALNAME2,
SPI_SETMOUSE_VALNAME3
};
/*
* Runs check for one setting of spi_setmouse.
*/
static void run_spi_setmouse_test( int curr_val[], POINT *req_change, POINT *proj_change,
int nchange )
{
BOOL rc;
INT mi[3];
static int aw_turn = 0;
static BOOL w_implemented = 1;
char buf[20];
int i;
aw_turn++;
rc=0;
if ((aw_turn % 2!=0) && (w_implemented))
{
/* call unicode on odd (non even) calls */
SetLastError(0xdeadbeef);
rc=SystemParametersInfoW( SPI_SETMOUSE, 0, curr_val, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
if (rc==0 && GetLastError()==ERROR_CALL_NOT_IMPLEMENTED)
{
w_implemented = 0;
trace("SystemParametersInfoW not supported on this platform\n");
}
}
if ((aw_turn % 2==0) || (!w_implemented))
{
/* call ascii version on even calls or if unicode is not available */
rc=SystemParametersInfoA( SPI_SETMOUSE, 0, curr_val, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
}
ok(rc!=0,"SystemParametersInfo: rc=%d err=%ld\n",rc,GetLastError());
test_change_message( SPI_SETMOUSE, 0 );
for (i = 0; i < 3; i++)
{
sprintf( buf, "%d", curr_val[i] );
test_reg_key( SPI_SETMOUSE_REGKEY, setmouse_valuenames[i], buf );
}
rc=SystemParametersInfoA( SPI_GETMOUSE, 0, mi, 0 );
ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
for (i = 0; i < 3; i++)
{
ok(mi[i] == curr_val[i],
"incorrect value for %d: %d != %d\n", i, mi[i], curr_val[i]);
}
if (w_implemented)
{
rc=SystemParametersInfoW( SPI_GETMOUSE, 0, mi, 0 );
ok(rc!=0,"SystemParametersInfoW: rc=%d err=%ld\n",rc,GetLastError());
for (i = 0; i < 3; i++)
{
ok(mi[i] == curr_val[i],
"incorrect value for %d: %d != %d\n", i, mi[i], curr_val[i]);
}
}
#if 0 /* FIXME: this always fails for me - AJ */
for (i = 0; i < nchange; i++)
{
POINT mv;
mouse_event( MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, 0, 0, 0, 0 );
mouse_event( MOUSEEVENTF_MOVE, req_change[i].x, req_change[i].y, 0, 0 );
GetCursorPos( &mv );
ok( proj_change[i].x == mv.x, "Projected dx and real dx comparison. May fail under high load.\n" );
ok( proj_change[i].y == mv.y, "Projected dy equals real dy. May fail under high load.\n" );
}
#endif
}
static void test_SPI_SETMOUSE( void ) /* 4 */
{
BOOL rc;
INT old_mi[3];
/* win nt default values - 6, 10, 1 */
INT curr_val[3] = {6, 10, 1};
/* requested and projected mouse movements */
POINT req_change[] = { {6, 6}, { 7, 6}, { 8, 6}, {10, 10}, {11, 10}, {100, 100} };
POINT proj_change1[] = { {6, 6}, {14, 6}, {16, 6}, {20, 20}, {22, 20}, {200, 200} };
POINT proj_change2[] = { {6, 6}, {14, 6}, {16, 6}, {20, 20}, {44, 20}, {400, 400} };
POINT proj_change3[] = { {6, 6}, {14, 6}, {16, 6}, {20, 20}, {22, 20}, {200, 200} };
POINT proj_change4[] = { {6, 6}, { 7, 6}, { 8, 6}, {10, 10}, {11, 10}, {100, 100} };
POINT proj_change5[] = { {6, 6}, { 7, 6}, {16, 6}, {20, 20}, {22, 20}, {200, 200} };
POINT proj_change6[] = { {6, 6}, {28, 6}, {32, 6}, {40, 40}, {44, 40}, {400, 400} };
POINT proj_change7[] = { {6, 6}, {14, 6}, {32, 6}, {40, 40}, {44, 40}, {400, 400} };
POINT proj_change8[] = { {6, 6}, {28, 6}, {32, 6}, {40, 40}, {44, 40}, {400, 400} };
int nchange = sizeof( req_change ) / sizeof( POINT );
trace("testing SPI_{GET,SET}MOUSE\n");
SetLastError(0xdeadbeef);
rc=SystemParametersInfoA( SPI_GETMOUSE, 0, old_mi, 0 );
if (!test_error_msg(rc,"SPI_{GET,SET}MOUSE"))
return;
run_spi_setmouse_test( curr_val, req_change, proj_change1, nchange );
/* acceleration change */
curr_val[2] = 2;
run_spi_setmouse_test( curr_val, req_change, proj_change2, nchange );
/* acceleration change */
curr_val[2] = 3;
run_spi_setmouse_test( curr_val, req_change, proj_change3, nchange );
/* acceleration change */
curr_val[2] = 0;
run_spi_setmouse_test( curr_val, req_change, proj_change4, nchange );
/* threshold change */
curr_val[2] = 1;
curr_val[0] = 7;
run_spi_setmouse_test( curr_val, req_change, proj_change5, nchange );
/* threshold change */
curr_val[2] = 2;
curr_val[0] = 6;
curr_val[1] = 6;
run_spi_setmouse_test( curr_val, req_change, proj_change6, nchange );
/* threshold change */
curr_val[1] = 7;
run_spi_setmouse_test( curr_val, req_change, proj_change7, nchange );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -