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

C# 熱鍵簡易封裝 (1):TextBox 熱鍵輸入介面與註冊邏輯完整實作

     編輯:關於C語言

設計動機

鑑於 RegisterHotKey 穩定性優於鍵盤 Hook 且無額外系統開銷,採用 WinAPI 封裝。包含:TextBox 熱鍵輸入 UI、API 封裝類 (見第 2 篇)、自動解除重複 ID、表單關閉統一釋放。

TextBox 按鍵處理 (KeyDown/KeyPress/KeyUp/LostFocus)

Keys hotkeyVk = Keys.None;

private void txbHotKey_KeyDown(object sender, KeyEventArgs e)
{
    txbHotKey.Text = string.Empty;
    if (e.Control) txbHotKey.Text += "Ctrl+";
    if (e.Alt) txbHotKey.Text += "Alt+";
    if (e.Shift) txbHotKey.Text += "Shift+";

    if (e.KeyCode >= Keys.A && e.KeyCode <= Keys.Z)
    {
        if (e.Modifiers != Keys.None) { txbHotKey.Text += e.KeyCode; hotkeyVk = e.KeyCode; }
    }
    else if (e.KeyCode >= Keys.D0 && e.KeyCode <= Keys.D9)
    {
        if (e.Modifiers != Keys.None) { txbHotKey.Text += e.KeyCode.ToString().Substring(1); hotkeyVk = e.KeyCode; }
    }
    else if (e.KeyCode >= Keys.NumPad0 && e.KeyCode <= Keys.NumPad9)
    {
        if (e.Modifiers != Keys.None) { txbHotKey.Text += e.KeyCode.ToString().Replace("Pad", ""); hotkeyVk = e.KeyCode; }
    }
    else if (e.KeyCode >= Keys.F1 && e.KeyCode <= Keys.F12)
    {
        txbHotKey.Text += e.KeyCode; hotkeyVk = e.KeyCode;
    }
    e.SuppressKeyPress = false; e.Handled = true;
}

private void txbHotKey_KeyPress(object sender, KeyPressEventArgs e) => e.Handled = true;

private void txbHotKey_KeyUp(object sender, KeyEventArgs e) => CheckHotkey();
void txbHotKey_LostFocus(object sender, EventArgs e) => CheckHotkey();

private void CheckHotkey()
{
    if (txbHotKey.Text.EndsWith("+") || txbHotKey.Text == string.Empty)
        txbHotKey.Text = "無";
}

註冊按鈕點擊邏輯

private void btnHotKey_Click(object sender, EventArgs e)
{
    string hotkey = txbHotKey.Text.Replace("+", "");
    if (hotkey != "無" && hotkey != string.Empty)
    {
        uint modifiers = 0;
        if (hotkey.Contains("Ctrl")) { modifiers |= HotkeyHelper.MOD_CONTROL; hotkey = hotkey.Replace("Ctrl", ""); }
        if (hotkey.Contains("Alt"))  { modifiers |= HotkeyHelper.MOD_ALT; hotkey = hotkey.Replace("Alt", ""); }
        if (hotkey.Contains("Shift")){ modifiers |= HotkeyHelper.MOD_SHIFT; hotkey = hotkey.Replace("Shift", ""); }

        GameProvider.HotkeyHelper.RegisterHotKey(this.Handle, hotkeyId, modifiers, (uint)hotkeyVk);
    }
}

關鍵點

  • 支援 Ctrl/Alt/Shift 組合、字母/數字/小鍵盤/功能鍵。
  • KeyPress 設 Handled=true 避免字元輸入干擾。
  • 失去焦點/按鍵釋出時檢查格式,尾碼為「+」視為無效。
  • 註冊前解析修飾鍵位元遮罩,呼叫 HotkeyHelper.RegisterHotKey。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved