向记事本发送键盘消息
上午还在实验室的时候,龙哥短信说我们的门锁坏了,开不了,他们出不来,我只好回来。回来后,试了很久,还是打不开,于是一脚踹开了。然后发现门傍貌似裂了,锁的弹簧断了…打电话找了木工,修了很久终于可以用了,由于时间比较晚,也就没去实验室了。
打电话让FM帮我带回来本子。突然想起来前天和Sandy的关于魔兽改键工具的讨论,我需要确定war3到底是怎么接受键盘信息的。于是迫不及待地想写个给其他程序发送键盘消息的程序。我选择了记事本做测试。
思路很简单,FindWindow获得句柄,然后SendMessage或者PostMessage。至于其中遇到的问题,还需要仔细探究消息队列,SendMessage和PostMessage的区别,下次再讨论。
1 2 3 4 5 6 7 8 9 10 11 12 | void CSendMessageTestDlg::OnBnClickedButton1() { // TODO: 在此添加控件通知处理程序代码 HWND hwnd = ::FindWindow(NULL,"无标题 - 记事本"); HWND hedit = ::GetDlgItem(hwnd,0x0000000F);//编辑框控件ID。用spy++可以看到。 //HWND hedit = ::FindWindowEx(hwnd,NULL,"edit",NULL); //::SendMessage(hedit,WM_KEYDOWN,'1',0);//SendMessage时只有用WM_CHAR才有用。 ::PostMessage(hedit,WM_CHAR,'1',0); //PostMessage用WM_KEYUP,WM_KEYDOWN或者WM_CHAR都可以。 } |
要了解在MFC工程中,用::FindWindow和不使用::的区别。当不使用时,调用的是当前类的成员函数。
发张用Spy++查看窗口句柄的的截图.Spy++还可以查看进程的消息队列,功能很强大。
看完了^.^,如果觉得这篇文章对你有用或者有
问题,请留言告诉我,thank you !
文章为原创的话,转载请注明出处.不敢流泪-《向记事本发送键盘消息》

One Comment
以前因为玩flash懒的手点..写了个时控模拟鼠标循环点击的…
[回复]
boluor 回复 于 七月 11th, 2009 at 16:42
也是获得flash中的焦点,然后发送消息?
[回复]
miuc 回复 于 七月 21st, 2009 at 11:00
直接点
[回复]