windows 模拟键盘输入

来源:互联网 发布:系统查询开舱门数据 编辑:程序博客网 时间:2024/06/06 00:06

用到的windows api如下:

1. keybd_event

2. mouse_event

msdn解释:

http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=ZH-CN&k=k(KEYBD_EVENT);k(DevLang-%22C%2B%2B%22);k(TargetOS-WINDOWS)&rd=true

 VOID keybd_event(

  BYTE bVk, // virtual-key code

  BYTE bScan, // hardware scan code

  DWORD dwFlags, // flags specifying various function options

  DWORD dwExtraInfo // additional data associated with keystroke

  );

第一个参数bVk 键盘按键对应的码 ,比如'a'是0x41

第二个参数为扫描码,一般不用设置,用0代替

第三个参数为选项标志,如果为keydown则置0即可,如果为keyup则设成"KEYEVENTF_KEYUP",

第四个参数一般也是置0即可。 


如下表示按下 'a'键

keybd_event(0x41,0,0,0);
keybd_event(0x41,0,KEYEVENTF_KEYUP,0); 


而Qt里的sendEvent则是只对Qt应用系统有效。

    QKeyEvent keyPress(QEvent::KeyPress, Qt::Key_C, Qt::NoModifier, QString());
    QCoreApplication::sendEvent(QWidget::focusWidget(), &keyPress);
    QKeyEvent keyRelease(QEvent::KeyRelease, Qt::Key_C, Qt::NoModifier, QString());
    QCoreApplication::sendEvent(QWidget::focusWidget(), &keyRelease);

如下代码,定时2秒向系统发送按键事件

#include "keypresstest.h"#include <Windows.h>keypressTest::keypressTest(QWidget *parent, Qt::WFlags flags): QMainWindow(parent, flags){ui.setupUi(this);timer = new QTimer(this);connect(timer,SIGNAL(timeout()),this,SLOT(time_out()));timer->start(2000);//keybd_event(VK_CAPITAL,0,0,0);//keybd_event(VK_CAPITAL,0,KEYEVENTF_KEYUP,0); }keypressTest::~keypressTest(){}void keypressTest::time_out(){<span style="color:#ff0000;">keybd_event(0x41,0,0,0);keybd_event(0x41,0,KEYEVENTF_KEYUP,0); </span>}



0 0