我已在c#应用程序中编写此代码以跟踪消息...
protected override void WndProc(ref Message m)
{
// Listen for operating system messages.
switch (m.Msg)
{
case WM_CHAR:
FileStream fs = new FileStream("d:/Type.txt",FileMode.Append,FileAccess.Write);
//set up a streamwriter for adding text
StreamWriter sw = new StreamWriter(fs);
sw.BaseStream.Seek(0, SeekOrigin.End);
int no=(int)m.WParam;
sw.Write(Convert.ToChar(no));
sw.Flush();
sw.Close();
break;
}
base.WndProc(ref m);
}
我想跟踪不同窗口的消息,那么如何将不同的窗口句柄传递给wndproc?请帮帮我......
答案 0 :(得分:1)
您必须注册全局键盘钩子而不是传递不同的句柄。 This文章介绍了如何做到这一点。这背后的基本思想是,您注册函数以轮询所有与键盘相关的系统事件(针对每条消息)并仅过滤掉您需要的那些事件。
使用SetWindowsHookEx winapi函数实现功能。
答案 1 :(得分:0)
您可以在程序开头调用Application.AddMessageFilter(IMessageFilter filter)
来过滤应用程序中的所有邮件。
IMessageFilter
界面只有一种方法:
bool PreFilterMessage(ref Message m);
对于应用程序处理的每条消息都会调用它。在那里,您可以使用m.HWnd
来识别程序的不同窗口。