向记事本发送键盘消息

上午还在实验室的时候,龙哥短信说我们的门锁坏了,开不了,他们出不来,我只好回来。回来后,试了很久,还是打不开,于是一脚踹开了。然后发现门傍貌似裂了,锁的弹簧断了…打电话找了木工,修了很久终于可以用了,由于时间比较晚,也就没去实验室了。
打电话让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++还可以查看进程的消息队列,功能很强大。

Spy++查看记事本比编辑控件窗口

Spy++查看记事本比编辑控件窗口

One Comment

  1. Miuc said on: 2009年07月11日 10:27

    以前因为玩flash懒的手点..写了个时控模拟鼠标循环点击的…

    [回复]

    boluor 回复  于   

    也是获得flash中的焦点,然后发送消息?

    [回复]

    miuc 回复  于   

    直接点 :sad:

    [回复]

Post a Comment

Your email is never published nor shared. Required fields are marked *

*

*