2012-04-02 68 views
0

我已经写在跟踪邮件的C#应用​​程序的代码...如何将窗口句柄传递给wndproc?

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

回答

1

你必须注册全局键盘钩子而不是传递不同的句柄。文章显示如何做到这一点。这背后的基本思想是,你注册你的函数轮询所有键盘相关的系统事件(针对每条消息)并只筛选出你需要的。

该功能是通过SetWindowsHookEx winapi函数实现的。

0

您可以通过在程序开始时调用Application.AddMessageFilter(IMessageFilter filter)来过滤应用程序中的所有消息。

IMessageFilter接口只有一个方法:

bool PreFilterMessage(ref Message m); 

这就是所谓的由应用程序处理的每个消息。您可以使用m.HWnd来识别程序的不同窗口。

+0

其实我想跟踪任何活动窗口的消息。有没有办法做到这一点? – user1304843 2012-04-02 06:34:23

+0

属于其他应用程序的Windows?那么你需要一个全球性的钩子,正如Dmitriy Reznik在他的回答中所说的那样。 – rodrigo 2012-04-02 07:56:06

+0

有没有其他选择或如何使用它? – user1304843 2012-04-02 09:04:59