2015-06-18 57 views
1

我想在Windows窗體應用程序中使用快捷方式,並找到以下內容code快捷方式在Visual Studio中 - Windows窗體應用程序在其他窗口處於活動狀態時

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { 
    if (keyData == (Keys.Enter)) { 
     MessageBox.Show("Hello World!"); 
     return true; 
    } 
    return base.ProcessCmdKey(ref msg, keyData); 
    } 

但是,這隻有在窗口處於活動狀態時纔有效。即使有其他窗口處於活動狀態,我如何使用快捷方式?

+0

在我的頭頂,你可以使用繼承和攔截基本窗體中的窗口消息,並從基本形式擴展。 –

回答

0

您可以使用單個入口點以基本形式進行消息捕獲和分派。

鹼形式

public class BaseForm : Form 
{ 
    public void MyMessage(hwnd:HWND) 
    { 
     ... 
     case MSG_SPECIFIC_ACTION_1 : handled=this.DoOnSpecificAction1(); 
     ... 
    } 

    protected bool DoOnSpecificAction1(){ return=false;} 
} 

鹼形式後裔

public class MyCustomForm : BaseForm 
{ 
    protected override bool DoOnSpecificAction1() 
    { 
     MessageBox.Show("Hello"); 
     return true;  
    } 
} 

編輯 - 全球的KeyboardHook

如果您正在尋找捕獲其他應用程序中的所有重要事件則你需要你選擇一個鍵盤掛鉤。 Here是一篇不錯的文章,用SetWindowsHookEx來描述。

+0

感謝您的回答。我還不明白。但我會在今天下午嘗試一下,看看我能否搞清楚。 – F2daB

+0

我不明白爲什麼我需要一個Visual Inheritance。活動窗口不會是一個不同的Windows窗體應用程序,而是一個CAD軟件。我想在使用3D模型時在第二個屏幕上顯示不同的信息。我希望這更清楚:-S – F2daB

+0

例如在TS3中,即使我在遊戲中,我也可以設置快捷方式並使用這些快捷方式。 – F2daB

相關問題