SendInput在Win xp中无法正常工作

时间:2014-02-27 08:48:58

标签: c++ windows user-input sendinput

我正在开发一个项目,我使用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加号。

任何人都可以告诉我为什么会这样吗? 我该如何解决这个问题? 任何时候的建议将不胜感激。 提前谢谢。

0 个答案:

没有答案