Commit d9855df1 authored by Markus Engel's avatar Markus Engel Committed by Alexandre Julliard

user32: Force undefined bits in GetKeyState() and GetKeyboardState() to zero.

Only the highest and lowest bits in the return values of these functions have a meaning, the others are undefined. While the other bits are always cleared in Windows, wine stores information there. Some programs expect these undefined bits to be zero, though, so make sure they are not set. Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=30814Signed-off-by: 's avatarMarkus Engel <markus_wine@familie-engel.online> Signed-off-by: 's avatarAlexandre Julliard <julliard@winehq.org>
parent f516a230
......@@ -555,7 +555,7 @@ SHORT WINAPI DECLSPEC_HOTPATCH GetKeyState(INT vkey)
{
req->tid = GetCurrentThreadId();
req->key = vkey;
if (!wine_server_call( req )) retval = (signed char)reply->state;
if (!wine_server_call( req )) retval = (signed char)(reply->state & 0x81);
}
SERVER_END_REQ;
TRACE("key (0x%x) -> %x\n", vkey, retval);
......@@ -569,6 +569,7 @@ SHORT WINAPI DECLSPEC_HOTPATCH GetKeyState(INT vkey)
BOOL WINAPI DECLSPEC_HOTPATCH GetKeyboardState( LPBYTE state )
{
BOOL ret;
UINT i;
TRACE("(%p)\n", state);
......@@ -579,6 +580,7 @@ BOOL WINAPI DECLSPEC_HOTPATCH GetKeyboardState( LPBYTE state )
req->key = -1;
wine_server_set_reply( req, state, 256 );
ret = !wine_server_call_err( req );
for (i = 0; i < 256; i++) state[i] &= 0x81;
}
SERVER_END_REQ;
return ret;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment