首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 系統熱鍵註冊與處理完整指南:RegisterHotKey / UnregisterHotKey 實戰

     編輯:關於C語言

核心 API 引入

using System.Runtime.InteropServices;

[DllImport("user32.dll")]
public static extern bool RegisterHotKey(IntPtr hWnd, int id, uint fsModifiers, Keys vk);

[DllImport("user32.dll")]
public static extern bool UnregisterHotKey(IntPtr hWnd, int id);

修飾鍵枚舉定義

public enum KeyModifiers
{
    None = 0,
    Alt = 1,
    Control = 2,
    Shift = 4,
    Windows = 8
}

可透過位元運算組合:Control | Shift = 6

表單建構函式中註冊熱鍵

public MainForm()
{
    InitializeComponent();
    RegisterHotKey(Handle, 100, 2, Keys.Left);   // Ctrl + Left
    RegisterHotKey(Handle, 200, 2, Keys.Right);  // Ctrl + Right
    RegisterHotKey(Handle, 300, 2, Keys.Up);     // Ctrl + Up
    RegisterHotKey(Handle, 400, 2, Keys.Down);   // Ctrl + Down
}

重寫 WndProc 處理熱鍵訊息

protected override void WndProc(ref Message m)
{
    const int WM_HOTKEY = 0x0312;
    switch (m.Msg)
    {
        case WM_HOTKEY:
            ProcessHotkey(m);
            break;
    }
    base.WndProc(ref m);
}

熱鍵處理邏輯

private void ProcessHotkey(Message m)
{
    IntPtr id = m.WParam;
    string sid = id.ToString();
    
    switch (sid)
    {
        case "100": DecreaseVolume(); break;   // Ctrl + Left
        case "200": IncreaseVolume(); break;   // Ctrl + Right
        case "300": this.Visible = true; break;  // Ctrl + Up
        case "400": this.Visible = false; break; // Ctrl + Down
    }
}

表單關閉時註銷熱鍵

private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
    UnregisterHotKey(Handle, 100);
    UnregisterHotKey(Handle, 200);
    UnregisterHotKey(Handle, 300);
    UnregisterHotKey(Handle, 400);
}

完整流程總結

  1. 引入 System.Runtime.InteropServices
  2. 以 DllImport 宣告 RegisterHotKey/UnregisterHotKey
  3. 定義 KeyModifiers 列舉支援組合鍵
  4. 建構函式中註冊所需熱鍵
  5. 重寫 WndProc 攔截 WM_HOTKEY (0x0312)
  6. 實作 ProcessHotkey 依 ID 分派功能
  7. FormClosing 中全部註銷

注意事項

  • 熱鍵 ID 應唯一,避免衝突
  • 若註冊失敗 (false) 通常因熱鍵已被其他程式佔用
  • 修飾鍵組合需符合 Windows 熱鍵規範
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved