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

沒有留言:

張貼留言

您可以使用一些 HTML 標記,例如 <b>, <i>, <a>