如何将窗口句柄传递给wndproc?

时间:2012-04-02 05:10:35

标签: winapi

我已在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?请帮帮我......

2 个答案:

答案 0 :(得分:1)

您必须注册全局键盘钩子而不是传递不同的句柄。 This文章介绍了如何做到这一点。这背后的基本思想是,您注册函数以轮询所有与键盘相关的系统事件(针对每条消息)并仅过滤掉您需要的那些事件。

使用SetWindowsHookEx winapi函数实现功能。

答案 1 :(得分:0)

您可以在程序开头调用Application.AddMessageFilter(IMessageFilter filter)来过滤应用程序中的所有邮件。

IMessageFilter界面只有一种方法:

bool PreFilterMessage(ref Message m);

对于应用程序处理的每条消息都会调用它。在那里,您可以使用m.HWnd来识别程序的不同窗口。