特定程序无法识别模拟键盘输入

时间:2010-07-16 15:38:04

标签: c++ winapi keyboard simulation

我正在开发一个自动使用这个软件EPIX XCAP的程序。

在Capture()中,它会拍摄一张照片,打开文件菜单,打开保存对话框,然后用它到达选项卡(导航到保存对话框中的文件名框)它不会这样做他们。我可以手动选中它,并且我在记事本中测试了Type(VK_TAB)循环,它在那里工作得很好,所以我不知道它为什么不起作用。

我最初尝试使用SendInput而不是keybd_event,但我无法使用Ctrl / Alt,以防万一你想知道。

非常感谢任何和所有帮助。

void Type(int x){
    const int KEYEVENT_KEYUP = 0x02;
    keybd_event(x,0,0,0);
    keybd_event(x,0,KEYEVENT_KEYUP,0);
}

void Ctrl(int x){  
    const int KEYEVENT_KEYUP = 0x02;
    keybd_event(VK_CONTROL,0,0,0);              // press the CTRL key
    keybd_event(x,0,0,0);
    keybd_event(x,0,KEYEVENT_KEYUP,0);
    keybd_event(VK_CONTROL,0,KEYEVENT_KEYUP,0); // let up the CTRL key
}

void Alt(int x){  
    const int KEYEVENT_KEYUP = 0x02;
    keybd_event(VK_MENU,0,0,0);              // press the ALT key
    keybd_event(x,0,0,0);
    keybd_event(x,0,KEYEVENT_KEYUP,0);
    keybd_event(VK_MENU,0,KEYEVENT_KEYUP,0); // let up the ALT key
}

void Shift(int x){  
    const int KEYEVENT_KEYUP = 0x02;
    keybd_event(VK_SHIFT,0,0,0);              // press the SHIFT key
    keybd_event(x,0,0,0);
    keybd_event(x,0,KEYEVENT_KEYUP,0);
    keybd_event(VK_SHIFT,0,KEYEVENT_KEYUP,0); // let up the SHIFT key
}

void Capture(string filename){
    Ctrl('S');
    Alt(VK_SPACE);
    Type(VK_RIGHT);
    Type(VK_RETURN);
    for(int a = 0; a < 13; a++){
        Type(VK_TAB);
    }
    for(int b = 0; b < filename.length(); b++){
        Type(filename[b]);
    }
    Type(VK_RETURN);
}

1 个答案:

答案 0 :(得分:0)

发送键盘事件时,是否需要发送指定按下哪个控件的代码? GetKeyState和GetAsyncKeyState是用于找出按下哪些键并且它们响应VK_LSHIFT,VK_RSHIFT,VK_LCONTROL,VK_RCONTROL等的API(除了与位置无关的VK_CONTROL,VK_SHIFT等)。

相关问题