2012-04-02 69 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