通過(guò)這個(gè)代碼可以實(shí)現(xiàn)軟件的快捷方式的調(diào)用:
class HotKey
{
//如果函數(shù)執(zhí)行成功,返回值不為0。
//如果函數(shù)執(zhí)行失敗,返回值為0。要得到擴(kuò)展錯(cuò)誤信息,調(diào)用GetLastError。
[DllImport("user32.dll", SetLastError = true)]
public static extern bool RegisterHotKey(
IntPtr hWnd, //要定義熱鍵的窗口的句柄
int id, //定義熱鍵ID(不能與其它ID重復(fù))
KeyModifiers fsModifiers, //標(biāo)識(shí)熱鍵是否在按Alt、Ctrl、Shift、Windows等鍵時(shí)才會(huì)生效
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
}
}
在form中, 啟用Form1_Activated 和 Form1_Deactivate
private void Form1_Activated(object sender, EventArgs e)
{
HotKey.RegisterHotKey(Handle, 100, HotKey.KeyModifiers.Ctrl, Keys.A);
HotKey.RegisterHotKey(Handle, 101, HotKey.KeyModifiers.Ctrl, Keys.B);
HotKey.RegisterHotKey(Handle, 102, HotKey.KeyModifiers.Ctrl, Keys.C);
HotKey.RegisterHotKey(Handle, 103, HotKey.KeyModifiers.Ctrl, Keys.D);
//自行更改快捷鍵按鈕代碼
}
private void Form1_Deactivate(object sender, EventArgs e)
{
HotKey.UnregisterHotKey(Handle, 100);
HotKey.UnregisterHotKey(Handle, 101);
HotKey.UnregisterHotKey(Handle, 102);
HotKey.UnregisterHotKey(Handle, 103);
//自行補(bǔ)充自定義增加的快捷鍵
}
只用重寫(xiě) wndProc:
protected override void WndProc(ref Message m)
{
const int WM_HOTKEY = 0x0312;
//按快捷鍵
switch (m.Msg)
{
case WM_HOTKEY:
switch (m.WParam.ToInt32())
{
case 100:
this.Text = "CTRL+A;";
break;
case 101:
this.Text = "CTRL+B;";
break;
default:
// MessageBox.Show("按下了"+ m.WParam.ToInt32().ToString());
break;
}
break;
}
base.WndProc(ref m);
}
按下 ctrl + A,ctrl + B之后, 就能看到變化了。
該文章在 2024/10/14 12:21:48 編輯過(guò)