Commit 092c7a09 authored by Rémi Bernon's avatar Rémi Bernon Committed by Alexandre Julliard

user32: Implement SendInput INPUT_HARDWARE check.

parent 2f8da3c1
......@@ -180,7 +180,7 @@ static void update_mouse_coords( INPUT *input )
UINT WINAPI SendInput( UINT count, LPINPUT inputs, int size )
{
UINT i;
NTSTATUS status;
NTSTATUS status = STATUS_SUCCESS;
if (size != sizeof(INPUT))
{
......@@ -202,14 +202,20 @@ UINT WINAPI SendInput( UINT count, LPINPUT inputs, int size )
for (i = 0; i < count; i++)
{
if (inputs[i].type == INPUT_MOUSE)
INPUT input = inputs[i];
switch (input.type)
{
case INPUT_MOUSE:
/* we need to update the coordinates to what the server expects */
INPUT input = inputs[i];
update_mouse_coords( &input );
/* fallthrough */
case INPUT_KEYBOARD:
status = send_hardware_message( 0, &input, SEND_HWMSG_INJECTED );
break;
case INPUT_HARDWARE:
SetLastError( ERROR_CALL_NOT_IMPLEMENTED );
return 0;
}
else status = send_hardware_message( 0, &inputs[i], SEND_HWMSG_INJECTED );
if (status)
{
......
......@@ -4285,12 +4285,11 @@ static void test_SendInput(void)
input[1].hi.wParamH = 'A' | 0xc000;
SetLastError( 0xdeadbeef );
res = SendInput( 16, input, sizeof(*input) );
todo_wine
ok( (res == 0 && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) ||
broken(res == 16 && GetLastError() == 0xdeadbeef) /* 32bit */,
"SendInput returned %u, error %#x\n", res, GetLastError() );
while ((res = wait_for_message(&msg)) && msg.message == WM_TIMER) DispatchMessageA(&msg);
todo_wine ok( !res, "SendInput triggered unexpected message %#x\n", msg.message );
ok( !res, "SendInput triggered unexpected message %#x\n", msg.message );
empty_message_queue();
memset( input, 0, sizeof(input) );
......@@ -4303,21 +4302,20 @@ static void test_SendInput(void)
input[2].ki.dwFlags = KEYEVENTF_KEYUP;
SetLastError( 0xdeadbeef );
res = SendInput( 16, input, sizeof(*input) );
todo_wine
ok( (res == 0 && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) ||
broken(res == 16 && GetLastError() == 0xdeadbeef),
"SendInput returned %u, error %#x\n", res, GetLastError() );
while ((res = wait_for_message(&msg)) && (msg.message == WM_TIMER || broken(msg.message == WM_KEYDOWN || msg.message == WM_KEYUP)))
DispatchMessageA(&msg);
todo_wine ok( !res, "SendInput triggered unexpected message %#x\n", msg.message );
ok( !res, "SendInput triggered unexpected message %#x\n", msg.message );
empty_message_queue();
for (i = 0; i < ARRAY_SIZE(input); ++i) input[i].type = INPUT_HARDWARE + 1;
SetLastError( 0xdeadbeef );
res = SendInput( 16, input, sizeof(*input) );
todo_wine ok( res == 16 && GetLastError() == 0xdeadbeef, "SendInput returned %u, error %#x\n", res, GetLastError() );
ok( res == 16 && GetLastError() == 0xdeadbeef, "SendInput returned %u, error %#x\n", res, GetLastError() );
while ((res = wait_for_message(&msg)) && msg.message == WM_TIMER) DispatchMessageA(&msg);
todo_wine ok( !res, "SendInput triggered unexpected message %#x\n", msg.message );
ok( !res, "SendInput triggered unexpected message %#x\n", msg.message );
empty_message_queue();
trace( "done\n" );
......
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