首頁 >後端開發 >C++ >如何在C#中捕捉全域熱鍵?

如何在C#中捕捉全域熱鍵?

Barbara Streisand
Barbara Streisand原創
2025-01-24 05:27:08571瀏覽

How to Capture Global Hotkeys in C#?

在C#中捕捉全域熱鍵

在C#中,即使程式未處於焦點狀態,也要捕捉按鍵,需要特殊的處理方法。本文將引導您完成設定全域熱鍵的過程,使您的程式即使在其他視窗處於活動狀態時也能響應按鍵組合。

使用平台呼叫

為了與Windows作業系統交互,C#使用平台呼叫(DllImport)。以下DLL函數對於設定熱鍵至關重要:

  • RegisterHotKey(IntPtr hwnd, int id, int fsModifiers, int vk):向Windows註冊熱鍵。
  • UnregisterHotKey(IntPtr hwnd, int id):登出Windows的熱鍵。

建立鍵盤鉤子類別

要處理全域熱鍵,請建立一個繼承自IDisposable的KeyboardHook類別:

<code class="language-csharp">public sealed class KeyboardHook : IDisposable
{
    // ...
}</code>

在這個類別中,您需要建立一個嵌套的Window類別來接收熱鍵訊息:

<code class="language-csharp">private class Window : NativeWindow, IDisposable
{
    // ...
}</code>

註冊熱鍵

要註冊熱鍵,請在KeyboardHook類別中使用RegisterHotKey方法:

<code class="language-csharp">public void RegisterHotKey(ModifierKeys modifier, Keys key)
{
    // ...
}</code>

此方法將遞增內部計數器(_currentId),然後使用指定的修飾符和鍵向Windows註冊熱鍵。

響應熱鍵按下

按下熱鍵時,將觸發事件處理程序KeyPressed。您可以在主應用程式中訂閱此事件,並在觸發熱鍵時執行所需的操作。

範例用法

在提供的範例中,建立了一個帶有標籤的窗體來顯示按下的按鍵:

<code class="language-csharp">public partial class Form1 : Form
{
    // ...
}</code>

在窗體的建構子中,建立一個KeyboardHook實例,並註冊ControlAltF12的熱鍵組合:

<code class="language-csharp">hook.RegisterHotKey(ModifierKeys.Control | ModifierKeys.Alt, Keys.F12);</code>

按下熱鍵時,將呼叫hook_KeyPressed事件處理程序,並使用按下的修飾鍵和鍵更新標籤。

以上是如何在C#中捕捉全域熱鍵?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn