C#全局熱鍵設(shè)置與窗體熱鍵設(shè)置實例
本文實例講述了C#全局熱鍵設(shè)置與窗體熱鍵設(shè)置,分享給大家供大家參考。具體實現(xiàn)方法如下:
1、窗體熱鍵
首先要設(shè)置主窗體KeyPreview為true,可直接在屬性中進(jìn)行設(shè)置,
或者在窗體加載中設(shè)置: this.KeyPreview = true;
然后添加窗體KeyDown事件,如下:
{
if (e.Alt && e.Shift && e.Control && e.KeyCode == Keys.S)
{
MessageBox.Show("我按了Control +Shift +Alt +S");
}
}
2、全局熱鍵設(shè)置
定義API函數(shù) 》 注冊熱鍵 》 卸載熱鍵
我這里定義了AppHotKey類,全部代碼如下:
{
[DllImport("kernel32.dll")]
public static extern uint GetLastError();
//如果函數(shù)執(zhí)行成功,返回值不為0。
//如果函數(shù)執(zhí)行失敗,返回值為0。要得到擴展錯誤信息,調(diào)用GetLastError。
[DllImport("user32.dll", SetLastError = true)]
public static extern bool RegisterHotKey(
IntPtr hWnd, //要定義熱鍵的窗口的句柄
int id, //定義熱鍵ID(不能與其它ID重復(fù))
KeyModifiers fsModifiers, //標(biāo)識熱鍵是否在按Alt、Ctrl、Shift、Windows等鍵時才會生效
Keys vk //定義熱鍵的內(nèi)容
);
[DllImport("user32.dll", SetLastError = true)]
public static extern bool UnregisterHotKey(
IntPtr hWnd, //要取消熱鍵的窗口的句柄
int id //要取消熱鍵的ID
);
//定義了輔助鍵的名稱(將數(shù)字轉(zhuǎn)變?yōu)樽址员阌谟洃?,也可去除此枚舉而直接使用數(shù)值)
[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的熱鍵設(shè)定
UnregisterHotKey(hwnd, hotKey_id);
}
}
重寫窗體的WndProc函數(shù),在窗口創(chuàng)建的時候注冊熱鍵,窗口銷毀時銷毀熱鍵,代碼如下:
private const int WM_CREATE = 0x1; //窗口消息-創(chuàng)建
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: //窗口消息-創(chuàng)建
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#程序設(shè)計有所幫助。
相關(guān)文章
C#通過cmd調(diào)用7z軟件實現(xiàn)壓縮和解壓文件
這篇文章介紹了C#通過cmd調(diào)用7z軟件實現(xiàn)壓縮和解壓文件的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-04-04
C#?winform實現(xiàn)中英文切換功能的四種方式
這篇文章主要介紹了在C#?winform應(yīng)用程序中實現(xiàn)中英文切換功能的四種方式,資源文件(Resources),本地化(Localization),動態(tài)設(shè)置控件字體和切換語言環(huán)境這四種方式,下面將詳細(xì)介紹每種方式及其具體實現(xiàn),并討論它們的優(yōu)缺點,需要的朋友可以參考下2024-04-04
利用C#/VB.NET實現(xiàn)將PDF轉(zhuǎn)為Word
眾所周知,PDF 文檔支持特長文件,集成度和安全可靠性都較高,可有效防止他人對 PDF 內(nèi)容進(jìn)行更改,所以在工作中深受大家喜愛。本文將分為兩部分介紹如何以編程的方式將 PDF 轉(zhuǎn)換為 Word,需要的可以參考一下2022-12-12

