如今,当Windows流行时,大多数用户都欢迎Windows接口程序。这些程序的操作只不过是键盘输入控件和鼠标输入控件两种。有时,对于复杂或重复性的输入操作,是否可以通过编程代替手动输入并使用该程序模拟键盘和鼠标输入?答案是肯定的。这主要是通过两个Windows API函数来实现的。让我们以vc ++为例,介绍如何实现这两个功能。
本文中的示例代码
我们使用Keybd_event api函数模拟键盘,并使用mouse_event函数模拟鼠标按钮。在vc中调用api函数既简单又方便。
首先介绍Keybd_event函数。 Keybd_event可以触发按键事件,这意味着将生成WM_KEYDOWN或WM_KEYUP消息。当然,这两个消息也可以用于模拟击键,但是直接使用此功能并不方便。 Keybd_event共有四个参数,第一个是键的虚拟键值,例如Enter键是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帮助。
以下是有关mouse_event的示例代码:
POINT lpPoint;
GetCursorPos(&lpPoint);
SetCursorPos(lpPoint.x,lpPoint.y);
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
上面的代码代表双击鼠标。要表示一次单击,请使用两个mouse_events(一次释放,一次释放)。
注意,无论是模拟键盘事件还是鼠标事件,都必须注意还原,即按下后释放键,按下一次对应于一次按下;单击后释放鼠标,否则可能会影响程序的功能。
好的,我希望本文能使您对模拟键盘和鼠标按钮有一个初步的了解。如果您想更深入地了解,可以参考msdn联机帮助并进行更多练习。这可能对您有很大帮助。
玩keybd_event
DELPHI 2005-8-24 15:51
模拟键盘不是很常用,但是当调用某些快捷键以执行某些功能时,确实非常方便。你不相信吗看一下下面的实现,您会大喊:为什么不早点告诉我?哈哈,没有博客,所以我依靠这些来赚取积分。
1)显示桌面:
许多软件都具有显示桌面的功能,每个人的方法都是遍历窗口,然后将其最小化。实际上,win系统为我们提供了非常方便的WIN键(即键盘位于CTRL键和ALT键之间。带有win徽标的按钮),借助它,您可以轻松完成显示桌面的功能
keybd_event(VK_LWIN,0,0,0);
keybd_event('M',0,0,0);
keybd_event('M',0,KEYEVENTF_KEYUP,0);
keybd_event(VK_LWIN,0,KEYEVENTF_KEYUP,0);
其他操作类似,例如直接显示启动操作,只需将上面的'M'替换为'R'。
直接keybd_event(VK_LWIN,0,0,0);
keybd_event(VK_LWIN,0,KEYEVENTF_KEYUP,0);
直接显示“开始”对话框。
2)全部实现快速选择

例如,很多时候listctrl实现全选,您可以使用listctrl将每个项目的状态设置为selected,这是Dorotho的事情。尝试使用快捷键CTRL + A,与其他快捷键的用法相同,哈哈,你知道该怎么办吗?
keybd_event(VK_CONTROL,(BYTE)0,0,0);
keybd_event('A',(BYTE)0,0,0); //您可以在此处使用'A',(BYTE)65,使用'a'不起作用。
keybd_event('A',(BYTE)0,KEYEVENTF_KEYUP,0);
keybd_event(VK_CONTROL,(BYTE)0,KEYEVENTF_KEYUP,0);
3)执行一些特殊键,例如数字键,大小写,以下是数字键的示例
bool bState = true; // true表示按NumLock,否则返回false
BYTE keyState [256];
GetKeyboardState((LPBYTE)&keyState);
if((bState &&!(keyState [VK_NUMLOCK]&1))||
(!bState &&(keyState [VK_NUMLOCK]&1)))
{
//模拟按键操作
keybd_event(VK_NUMLOCK,
0x45,
KEYEVENTF_EXTENDEDKEY | 0,
0);
//模拟密钥释放
keybd_event(VK_NUMLOCK,
0x45,
KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,
0);
}
4)您要同时按CTRL + ALT + DELETE,
keybd_event(VK_CONTROL,0,0,0);
keybd_event(VK_MENU,0,0,0);
keybd_event(VK_DELETE,0,0,0);
keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0);
keybd_event(VK_MENU,0,KEYEVENTF_KEYUP,0);
keybd_event(VK_DELETE,0,KEYEVENTF_KEYUP,0);
呵呵,它行不通,因为这些键被操作系统直接拦截并执行,并且模拟键盘只能发送到应用程序,因此此方法不起作用(如果要显示锁,对话框中,使用LockWorkStation();)
5) Window2000 / NT / XP不再主张使用此功能。上面的方法只是为了让您拓宽思路。怎么更换呢?哈哈,请看下面的内容,这样就可以完成以上所有代码
//在2000年以下,请改用它,包括“ winable.h”
INPUT输入[4];
memset(input,0,sizeof(input));
input [0] .type =输入[1] .type =输入[2] .type =输入[3] .type = INPUT_KEYBOARD;
input [0] .ki.wVk =输入[3] .ki.wVk = VK_LWIN;
input [1] .ki.wVk =输入[2] .ki.wVk ='R';
//接下来释放它很重要。
input [2] .ki.dwFlags = input [3] .ki.dwFlags = KEYEVENTF_KEYUP;
input [0] .ki.time =输入[1] .ki.time =输入[2] .ki.time =输入[3] .ki.time = GetTickCount();
SendInput(4,input,sizeof(INPUT));
感觉比罗索好一点,哈哈。
===================
一些带有WIN键的快捷键:
WIN key + D =快速剪切到桌面,再次单击以返回
WIN key + E =快速打开资源管理器
WIN键+ R =“运行”。
WIN键+ M =最小化所有窗口。
WIN键+ Shift + M =取消所有窗口的最小化。
WIN键+ F1 =帮助。
WIN键+ F =“查找”。
WIN键+ Ctrl + F =显示“查找计算机”。
WIN key + Tab =切换任务栏的程序。
WIN key + Break =显示系统内容。
键盘键和虚拟键代码的比较表
字母和数字键数字键盘键功能键其他键
键密钥代码密钥密钥代码密钥密钥密钥密钥代码
A65 0 96 F1 112退格8
B66 1 97 F2 113表9
C67 2 98 F3 114透明12
D68 3 99 F4 115输入13
E69 4 100F5 116 Shift 16
F70 5 101F6 117控件17
G71 6 102F7 118 Alt 18
H72 7 103F8 119大写锁定20
I73 8 104F9 120 Esc 27
J74 9 105F10121空格键32
K75 * 106F11122上一页33
L76 + 107F12123下一页34
M77输入108---结束35
N78-109---Home36
O79。 110---向左箭头37
P80 / 111---向上箭头38
Q81------右箭头39
R82------向下箭头40
S83------插入45
T84------删除46
U85------帮助47
V86------Num Lock 144
W87
X88
Y89
Z90
048
149
250
351
452
553
654
755
856
957
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/bofangqi/article-370046-1.html
全面备战搞点气势出来