本文實例講述了C#全局熱鍵設置與窗體熱鍵設置,分享給大家供大家參考。具體實現方法如下:
1、窗體熱鍵
首先要設置主窗體KeyPreview為true,可直接在屬性中進行設置,
或者在窗體加載中設置: this.KeyPreview = true;
然后添加窗體KeyDown事件,如下:
2、全局熱鍵設置
定義API函數 》 注冊熱鍵 》 卸載熱鍵
我這里定義了AppHotKey類,全部代碼如下:
[DllImport("user32.dll", SetLastError = true)]
public static extern bool UnregisterHotKey(
IntPtr hWnd, //要取消熱鍵的窗口的句柄
int id //要取消熱鍵的ID
);
//定義了輔助鍵的名稱(將數字轉變為字符以便于記憶,也可去除此枚舉而直接使用數值)
[Flags()]
public enum KeyModifiers
{
None = 0,
Alt = 1,
Ctrl = 2,
Shift = 4,
WindowsKey = 8
}
/// <summary>
/// 注冊熱鍵
/// </summary>
/// <param name="hwnd">窗口句柄</param>
/// <param name="hotKey_id">熱鍵ID</param>
/// <param name="keyModifiers">組合鍵</param>
/// <param name="key">熱鍵</param>
public static void RegKey(IntPtr hwnd, int hotKey_id, KeyModifiers keyModifiers, Keys key)
{
try
{
if (!RegisterHotKey(hwnd, hotKey_id, keyModifiers, key))
{
if (Marshal.GetLastWin32Error() == 1409) { MessageBox.Show("熱鍵被占用 !"); }
else
{
MessageBox.Show("注冊熱鍵失??!");
}
}
}
catch (Exception) { }
}
/// <summary>
/// 注銷熱鍵
/// </summary>
/// <param name="hwnd">窗口句柄</param>
/// <param name="hotKey_id">熱鍵ID</param>
public static void UnRegKey(IntPtr hwnd, int hotKey_id)
{
//注銷Id號為hotKey_id的熱鍵設定
UnregisterHotKey(hwnd, hotKey_id);
}
}
重寫窗體的WndProc函數,在窗口創建的時候注冊熱鍵,窗口銷毀時銷毀熱鍵,代碼如下:
希望本文所述對大家的C#程序設計有所幫助。
新聞熱點
疑難解答