C#全局熱鍵設置與窗體熱鍵設置實例。本站提示廣大學習愛好者:(C#全局熱鍵設置與窗體熱鍵設置實例)文章只能為提供參考,不一定能成為您想要的結果。以下是C#全局熱鍵設置與窗體熱鍵設置實例正文
本文實例講述了C#全局熱鍵設置與窗體熱鍵設置,分享給年夜家供年夜家參考。詳細完成辦法以下:
1、窗體熱鍵
起首要設置主窗體KeyPreview為true,可直接在屬性中停止設置,
或許在窗體加載中設置: this.KeyPreview = true;
然後添加窗體KeyDown事宜,以下:
private void FrmMain_KeyDown(object sender, KeyEventArgs e)
{
if (e.Alt && e.Shift && e.Control && e.KeyCode == Keys.S)
{
MessageBox.Show("我按了Control +Shift +Alt +S");
}
}
2、全局熱鍵設置
界說API函數 》 注冊熱鍵 》 卸載熱鍵
我這裡界說了AppHotKey類,全體代碼以下:
public class AppHotKey
{
[DllImport("kernel32.dll")]
public static extern uint GetLastError();
//假如函數履行勝利,前往值不為0。
//假如函數履行掉敗,前往值為0。要獲得擴大毛病信息,挪用GetLastError。
[DllImport("user32.dll", SetLastError = true)]
public static extern bool RegisterHotKey(
IntPtr hWnd, //要界說熱鍵的窗口的句柄
int id, //界說熱鍵ID(不克不及與其它ID反復)
KeyModifiers fsModifiers, //標識熱鍵能否在按Alt、Ctrl、Shift、Windows等鍵時才會失效
Keys vk //界說熱鍵的內容
);
[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函數,在窗口創立的時刻注冊熱鍵,窗口燒毀時燒毀熱鍵,代碼以下:
private const int WM_HOTKEY = 0x312; //窗口新聞-熱鍵
private const int WM_CREATE = 0x1; //窗口新聞-創立
private const int WM_DESTROY = 0x2; //窗口新聞-燒毀
private const int Space = 0x3572; //熱鍵ID
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
switch (m.Msg)
{
case WM_HOTKEY: //窗口新聞-熱鍵ID
switch (m.WParam.ToInt32())
{
case Space: //熱鍵ID
MessageBox.Show("我按了Control +Shift +Alt +S");
break;
default:
break;
}
break;
case WM_CREATE: //窗口新聞-創立
AppHotKey.RegKey(Handle, Space, AppHotKey.KeyModifiers.Ctrl | AppHotKey.KeyModifiers.Shift | AppHotKey.KeyModifiers.Alt, Keys.S);
break;
case WM_DESTROY: //窗口新聞-燒毀
AppHotKey.UnRegKey(Handle, Space); //燒毀熱鍵
break;
default:
break;
}
}
願望本文所述對年夜家的C#法式設計有所贊助。