2012-04-02 11 views
0

私はどのように私はWNDPROCする別のウィンドウハンドルを渡すことができ、私は別のウィンドウのメッセージを追跡する...メッセージを追跡するための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); 
} 

をこのコードを書かれていますか?助けてください...

答えて

1

別のハンドルを渡す代わりに、グローバルキーボードフックを登録する必要があります。それを行う方法を示すのはThisの記事です。その背後にある基本的な考え方は、すべてのキーボード関連のシステムイベント(すべてのメッセージ用)をポーリングする機能を登録し、必要なものだけをフィルタリングすることです。

機能はSetWindowsHookEx winapi機能で実現されます。

0

プログラムの最初にApplication.AddMessageFilter(IMessageFilter filter)を呼び出して、アプリケーション内のすべてのメッセージをフィルタリングできます。

IMessageFilterインターフェースは、単に1つの方法がありますアプリケーションが扱うすべてのメッセージのために呼び出され

bool PreFilterMessage(ref Message m); 

。そこで、m.HWndを使用して、プログラムのさまざまなウィンドウを識別できます。

+0

実際には、アクティブなウィンドウからのメッセージをトラッキングする必要があります。そうする方法はありますか? – user1304843

+0

他のアプリケーションに属するWindows?その後、Dmitriy Reznik氏が答えたように、グローバルフックが必要です。 – rodrigo

+0

それを使用する方法はありますか? – user1304843

関連する問題