自訂搜尋

2010/10/19

C# 攔截系統訊息

最近寫很多視窗程式都有用到這方面的東西
東西真多...

windows無論你做甚麼動作他都會產生一個訊息
比如說 按下鍵盤,放開鍵盤,移動滑鼠,按下滑鼠,移動視窗,最小化視窗..
所以可以透過覆寫WndProc Method可以處理所有你想處理的訊息~

有關這方面的文章可以看看蔡學鏞的-揭開訊息迴圈的神秘面紗



Control.WndProc 方法

 處理 Windows 訊息。

範例


下列程式碼範例將示範如何覆寫 WndProc 方法以處理 Message 結構中所示的作業系統訊息。在這個範例中處理的 WM_ACTIVATEAPP 作業系統訊息可以讓您知道另一個應用程式將成為作用中的時間。

protected override void WndProc(ref Message m) 
{
    const int WM_ACTIVATEAPP = 0x001C;
    // Listen for operating system messages.
    switch (m.Msg)
    {
        // The WM_ACTIVATEAPP message occurs when the application
        // becomes the active application or becomes inactive.
        case WM_ACTIVATEAPP:
            // The WParam value identifies what is occurring.
            appActive = (((int)m.WParam != 0));
            // Invalidate to get new text painted.
            this.Invalidate();
            break;
       //case.......more message you want to process
    }

    base.WndProc(ref m);
}

備註


所有訊息在透過 PreProcessMessage 方法過濾後,都會被傳送至 WndProc
WndProc 方法完全對應於 Windows WindowProc 函式。如需有關處理 Windows 訊息的詳細資訊,請參閱 WindowProc 函式 (英文)。
繼承者注意事項
繼承的控制項應呼叫基底類別的 WndProc 方法,以處理控制項本身不處理的任何訊息。


以下是一些事件的訊息代碼

Window Notifications

Mouse Input Notifications

Keyboard Input Notifications

沒有留言:

張貼留言

讀取中…