Java和C ++都拒绝模拟箭头键吗?

时间:2015-07-15 17:24:35

标签: java c++ keyboard simulate

好吧,好吧。这让我非常疯狂。我正在用Java构建应用程序,它需要模拟键盘键。就像,我想欺骗整个计算机,以为一键被按下。 (别担心,我的意图不是恶意的:P)问题是,我正在使用Java的Robot类来模拟按键,并且有一个错误不允许在某些应用程序中按下箭头键无论出于何种原因。

所以我想我会制作一个小的C ++程序来处理输入模拟并从Java调用它。但这里是踢球者:箭头键仍然对某些程序不起作用。就像,它只是没有注册。就我所知,它们是相同的程序,不适用于Java。

有没有办法在所有程序中模拟箭头按键,100%的时间?我现在对任何语言都持开放态度。

这是我到目前为止的C ++程序,如果重要的话。

#define WINVER 0x0500
#include <windows.h>
#include <iostream>
#include <cstring>

int main()
{
    INPUT ip;

    Sleep(2000);

    ip.type = INPUT_KEYBOARD;
    ip.ki.wScan = 0;
    ip.ki.time = 0;
    ip.ki.dwExtraInfo = 0;

    ip.ki.wVk = VK_RIGHT;
    ip.ki.dwFlags = 0;
    SendInput(1, &ip, sizeof(INPUT));

    Sleep(1000);

    ip.ki.dwFlags = KEYEVENTF_KEYUP;
    SendInput(1, &ip, sizeof(INPUT));

    return 0;
}

我真的希望有人可以帮助我,因为我没有想法。

3 个答案:

答案 0 :(得分:2)

如果重要的是它适用于Windows中的所有应用程序,则可能必须编写一个模拟HID的驱动程序 - 在Windows中安装和注册驱动程序作为键盘。 听起来很多工作,但微软有Windows驱动程序工具包,在Windows驱动程序工具包示例包中有一些有趣的示例,您可以查看:https://msdn.microsoft.com/en-us/library/ff554118(v=vs.85).aspx

由于您的C ++程序,我认为您只需要在Windows上工作。

答案 1 :(得分:0)

您确实可以使用SendKeys类使用C ++执行此操作。详见文章链接here

答案 2 :(得分:0)

keybd_event()虽然已弃用是另一个合成按键的功能。只要目标程序具有焦点,关键代码就会出现在键盘记录器上。模拟开始菜单按键就像这样 -

#include<iostream>
#include<windows.h>

using namespace std; 


int main(){
    cout<<"Standby : Simulating start menu key press \n\n";

    keybd_event(VK_LWIN, 0, KEYEVENTF_EXTENDEDKEY, 0);
    keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP, 0);

    return 0;
}

要模拟上下按下的箭头键,请尝试以下操作:

// simulate RIGHT key press 
keybd_event(VK_RIGHT,0,0,0);
keybd_event(VK_RIGHT,0,KEYEVENTF_KEYUP,0);

// simulate LEFT key press 
keybd_event(VK_LEFT,0,0,0);
keybd_event(VK_LEFT,0,KEYEVENTF_KEYUP,0);

// simulate UP key press 
keybd_event(VK_UP,0,0,0);
keybd_event(VK_UP,0,KEYEVENTF_KEYUP,0);

// simulate DOWN key press 
keybd_event(VK_DOWN,0,0,0);
keybd_event(VK_DOWN,0,KEYEVENTF_KEYUP,0);

keybd_event(已弃用):https://msdn.microsoft.com/en-us/library/ee504289.aspx

keybd_event:https://msdn.microsoft.com/en-us/library/windows/desktop/ms646304(v=vs.85).aspx

虚拟密钥代码:https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx