我正在开发一个项目,我使用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
加号。
任何人都可以告诉我为什么会这样吗? 我该如何解决这个问题? 任何时候的建议将不胜感激。 提前谢谢。