欢迎来到天天文库
浏览记录
ID:37829220
大小:130.97 KB
页数:8页
时间:2019-06-01
《vc模拟键盘按键模拟键盘按键》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、vc模拟键盘按键:模拟键盘按键自动输入文字疯狂代码http://CrazyCoder.cn/ĵ:http:/CrazyCoder.cn/VC/Article13761.html模拟键盘按键自动输入文字 键盘对于每个操作电脑人员来说是最熟悉不过了键盘上按键可分为两类按下后会在电脑输入窗口上出现对应按键如字母键和数字键等我们称的为键;按下后虽然看不到但会产生控制作用按键如回车键、光标键等我们称的为控制键 对于员来说键盘上每个按键都样无非是区别按键产生键盘扫描码区别在区别操作系统下键盘扫描码常常被转换为区别编码以方便应用比如在DOS系统下ASCII码在Windows系统下虚拟键盘码等
2、等 有时我们希望能以方式模拟键盘按键以达到自动输入文字或者控制操作目在DOS系统下通常使用中断产生键盘扫描码思路方法来实现在Windows系统下由于Windows本身些限制和特点般不直接使用中断 了解点Windows编程朋友应该知道Windows系统是通过消息传递(或称事件发生)来控制各个应用执行和数据通信例如:应用打开和关闭会产生相应窗口消息鼠标移动、点击动作会产生相应鼠标消息同样键盘按下、弹起也会产生相应键盘消息那么如果用产生键盘消息也就达到了模拟键盘按键目 有了这样思路我们现在就来实验下 首先要知道在Windows系统中和键盘按键相关消息有:WM_KEYDOWN、WM
3、_KEYUP、WM_SYSKEYDOWN、WM_SYSKEYUP、WM_CHAR等其中WM_KEYDOWN为键按下WM_KEYUP为键弹起WM_SYSKEYDOWN为系统键按下WM_SYSKEYUP为系统键弹起WM_CHAR为按键对应 要模拟键盘产生键盘消息我们就发送条键盘消息给指定窗口比如要模拟个字母键“A”可以这样PostMessage(hWnd,WM_CHAR,'A',0);模拟按个回车:PostMessage(hWnd,WM_KEYDOWN,VK_RETURN,0)这里关键问题是要确定窗口句柄(hWnd)使用GetFocus可以得到键盘光标所在窗口句柄但该只能得到当前
4、进程内窗口句柄 如果要得到其他应用键盘光标所在窗口句柄需要AttachThreadInput该作用就是将其他窗口线程输入附加到本窗口线程输入操作中这样就可以GetFocus得到其他窗口句柄了 和2001年第24期谷刊登如何写个聊天辅助文中作者使用ChildWindowFromPoEx思路方法相比使用AttachThreadInput似乎更能够使键盘模拟具有通用性AttachThreadInput原形如下BOOLAttachThreadInput(DWORDidAttach,需要附加线程IDDWORDidAttachTo,附加到线程IDBOOLfAttachtrue附加false
5、取消);使用过程大致如下HWNDhWnd;hWnd=GetForegroundWindow;得到当前窗口(hWndForm1-Handle);排除本身窗口DWORDFormThreadID=GetCurrentThreadId;本线程ID当前窗口线程IDDWORDCWndThreadID=GetWindowThreadProcessId(hWnd,NULL);附加输入线程AttachThreadInput(CWndThreadID,FormThreadID,true);得到当前键盘光标所在窗口hWnd=GetFocus;取消附加输入线程AttachThreadInput(CWndT
6、hreadID,FormThreadID,false); hWnd就是当前键盘光标所在窗口句柄另外经过测试发现在Windows2000系统下发送消息(WM_CHAR)时如果是个汉字则该对应虚拟键盘码高位不为0这样得到就不正确解决办法是做个“和”运算ch&0xFF就可以了下面又到了给出例程时间了例程“刷刷刷”能够在键盘光标所在文本输入框中自动输入文字(中文、英文、数字)使用CBuilder5开发首先运行CBuilder并新建工程接着将窗体Form1边框样式(BorderStyle)改为对话框(bsDialog)并放置相应Control控件如图所示其中SS_Text是个用于输入文本T
7、ComboBoxControl控件当然你可以在设计阶段预先向Control控件中输入些常用文本以便运行后可以直接选用;txtTimes和txtDelay为TEditControl控件分别用于控制发送文本次数和间隔时间;chkAutoWrap和chkAutoNumber为TCheckBoxControl控件决定是否在每行发送文本后面自动回车或自动加记数编号;以上Control控件包含在Panel1(TPanelControl控件)中;Timer1用于控制循环发送和时间间
此文档下载收益归作者所有