SendInput не работает должным образом в Win XP

Я работаю над одним проектом, где я использую INPUT структура и SendInput() отправить команду ввода в другое окно, используя Hook.

Я использую следующий код, чтобы получить дескриптор последнего посещенного окна приложения.

            INPUT input;
input.type = INPUT_KEYBOARD;
input.ki.time = 0;
input.ki.dwExtraInfo = 0;
input.ki.wScan = 0;
input.ki.dwFlags = 0;
// Trial

// ALT Key Down
input.ki.wVk = VK_MENU;
SendInput( 1, &input, sizeof( INPUT ) );

// Tab Key Down
input.ki.wVk = VK_TAB;
input.ki.dwFlags = 0;
SendInput( 1, &input, sizeof( INPUT ) );

// Tab Up
input.ki.dwFlags = KEYEVENTF_KEYUP;
SendInput( 1, &input, sizeof( INPUT ) );

// ALT Key  Up
input.ki.wVk = VK_MENU;
SendInput( 1, &input, sizeof( INPUT ) );

// ALT Up
input.ki.dwFlags = KEYEVENTF_KEYUP;
SendInput( 1, &input, sizeof( INPUT ) );

// Give Sleep Time
Sleep(500);

// ALT Key Down
input.ki.wVk = VK_MENU;
SendInput( 1, &input, sizeof( INPUT ) );

// Tab Key Down
input.ki.wVk = VK_TAB;
input.ki.dwFlags = 0;
SendInput( 1, &input, sizeof( INPUT ) );

// Tab Up
input.ki.dwFlags = KEYEVENTF_KEYUP;
SendInput( 1, &input, sizeof( INPUT ) );// ALT Key  Up
input.ki.wVk = VK_MENU;
SendInput( 1, &input, sizeof( INPUT ) );

// ALT Key Up
input.ki.dwFlags = KEYEVENTF_KEYUP;
SendInput( 1, &input, sizeof( INPUT ) );
// Get Last Window Handle from the Hook Dll

и затем отправить команду вставки:

                // Send Paste Command To Previous Window
// Ctrl Down
input.ki.wVk = VK_CONTROL;
input.ki.dwFlags = 0;
::ShowWindow(mainHwnd, SW_SHOW);
SendInput( 1, &input, sizeof( INPUT ) );

// V Down
input.ki.wVk = 0x56;
::ShowWindow(mainHwnd, SW_SHOW);
SendInput( 1, &input, sizeof( INPUT ) );

// V Up
input.ki.dwFlags = KEYEVENTF_KEYUP;
::ShowWindow(mainHwnd, SW_SHOW);
SendInput( 1, &input, sizeof( INPUT ) );

// Ctrl Up
input.ki.wVk = VK_CONTROL;
::ShowWindow(mainHwnd, SW_SHOW);
SendInput( 1, &input, sizeof( INPUT ) );

// Tab Down
input.ki.wVk = VK_TAB;
input.ki.dwFlags = 0;
::ShowWindow(mainHwnd, SW_SHOW);
SendInput( 1, &input, sizeof( INPUT ) );

// Tab Up
input.ki.dwFlags = KEYEVENTF_KEYUP;
::ShowWindow(mainHwnd, SW_SHOW);
SendInput( 1, &input, sizeof( INPUT ) );

Теперь проблема в том, что я могу работать с этим на Win 7, 8 and 8.1, но у меня проблемы с XP что первый блок программы требует дополнительного TAB перед отправкой CTRL-V Command.

Может ли кто-нибудь сказать мне, почему это происходит?
И как я могу решить это?
Любое время предложений будет оценено.
Заранее спасибо.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]