VC使用API和发送键盘消息模拟键盘(组合键)操作

2012-03-21 20:16:12|?次阅读|上传:wustguangh【已有?条评论】发表评论

关键词:C/C++, 操作系统|来源:唯设编程网

Windows大行其道的今天,其界面的操作方式早已被广大用户认可。Windows应用程序大多数都是基于窗体的程序,在大多数情况下,这些程序接收用户输入分为两种:键盘输入和鼠标输入。有时,对于繁杂的,或重复性的输入操作,用程序来模拟键盘及鼠标的输入将会大大提高用户的工作效率,比如在批量打印的时候,让用户重复的设置页边距等参数是一件非常恼火的工作。VC编程实现鼠标模拟在VC模拟鼠标操作(SendMessage、mouse_event)中已经介绍,本文将介绍VC编程实现键盘的模拟操作。

同模拟鼠标操作一样,模拟键盘操作也可以使用键盘消息(SendMessage)和调用API函数Keybd_event这两种方法,下面分别进行介绍:

1. 发送消息模拟键盘操作:

首先给出VC发送键盘消息模拟键盘操作的实际源码。

示例:

BYTE shortcut;            //快捷键
CWnd* hWnd;
hWnd->SendMessage(WM_KEYDOWN,(WPARAM)(shortcut),0);
hWnd->SendMessage(WM_KEYUP,(WPARAM)(shortcut),0);

该实例分别调用CWnd的成员函数SendMessage实现了指定快捷键的按下和抬起操作,SendMessage的第一个参数指定键盘操作的类型,本实例用到了WM_KEYDOWN和WM_KEYUP分别表示对应键的按下和抬起消息,SendMessage的第二个参数是对应快捷键的代码,第三个参数设置成0或者NULL即可。

发送消息的方法不需要窗体在前端,甚至最小化也可以使用,但是此方法并不是在所有场合有效,特别是对于不响应键盘消息消息的程序更是如此。在这种情况下,可以尝试使用Keybd_event这个api函数。

2. 使用api函数keybd_event:

Keybd_event能触发一个按键事件,也就是说回产生一个WM_KEYDOWN或WM_KEYUP消 息。Keybd_event函数的原型如下:

VOID keybd_event(      

    BYTE bVk,
    BYTE bScan,
    DWORD dwFlags,
    PTR dwExtraInfo
);

该函数共有四个参数,第一个为按键的虚拟键值,如回车键为 VK_RETURN, tab键为VK_TAB;第二个参数为扫描码,一般不用设置,用0代替就行;第三个参数为选项标志,如果为keydown则置0即 可,如果为keyup则设成“KEYEVENTF_KEYUP”,第四个参数一般也是置0即可。

用如下代码即可实现模拟按下键,其中的XX表示XX键的虚拟键值,在这里也就是各键对应的键码,如''A''=65:

keybd_event(65,0,0,0);
keybd_event(65,0,KEYEVENTF_KEYUP,0);

mouse_event最好配合SetCursorPos(x,y)函数一起使用,与Keybd_event类似,mouse_event有五个参数,第 一个为选项标志,为MOUSEEVENTF_LEFTDOWN时表示左键按下为MOUSEEVENTF_LEFTUP表示左键松开,向系统发送相应消息。 第二三个参数分别表示x,y
相对位置,一般可设为0,0,第四五个参数并不重要,一般也可设为0,0。若要得到Keybd_event和mouse_event函数的更详细的用法,可以查阅msdn或delphi帮助。  

注意,不管是模拟键盘还是鼠标事件,都要注意还原,即按完键要松开,一个keydown对应一个keyup;鼠标单击完也要松开, 不然可能影响程序的功能。如果你需要模拟组合按键,比如CTRL+A,那么你用两次KEYEVENTF_KEYDOWN,第一次模拟CTRL,第二次模拟H,然后在相反的顺序两次KEYEVENTF_KEYUP就可以了。

好了,关于VC模拟键盘操作的两种方法便讨论完了,希望本文能让你对模拟键盘和鼠标按键有个初步的了解,如果想更深入的了解可以查阅msdn在线帮助,并多多动手实践,也许会对你有很大的帮助。

发表评论0条 】
网友评论(共?条评论)..
VC使用API和发送键盘消息模拟键盘(组合键)操作