C#注册系统热键、快捷键需要使用RegisterHotKey、UnregisterHotKey调用方法。
在调用以上两个函数时,我们要先引用 using System.Runtime.InteropServices;
----------------
C#代码如下:
----------------
//注册热键的api
[DllImport("user32")]
public static extern bool RegisterHotKey(IntPtr hWnd, int id, uint control, Keys vk);
//解除注册热键的api
[DllImport("user32")]
public static extern bool UnregisterHotKey(IntPtr hWnd, int id);
private void Form1_Load(object sender, System.EventArgs e)
{
//注册热键 (窗体句柄,热键ID,辅助键,实键)
//辅助键说明: None = 0, Alt = 1, crtl= 2, Shift = 4, Windows = 8
//如果有多个辅助键则,例如 alt+crtl是3 直接相加就可以了
RegisterHotKey(this.Handle, 123, 2, Keys.Q);
RegisterHotKey(this.Handle, 456, 2, Keys.W);
}
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
UnregisterHotKey(this.Handle, 123);
UnregisterHotKey(this.Handle, 456);
}
protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case 0x0312: //这个是window消息定义的注册的热键消息
if (m.WParam.ToString() == "123") // 按下CTRL+Q隐藏
{
this.Hide();
}
else if (m.WParam.ToString() == "456") // 按下CTRL+W显示
{
this.Visible = true;
}
break;
}
base.WndProc(ref m);
}
对于注册热键,我们也可以这样利用:
private void Form1_Load(object sender, EventArgs e)
{
//注册热键Shift+S,Id号为100。HotKey.KeyModifiers.Shift也可以直接使用数字4来表示。
HotKey.RegisterHotKey(Handle, 100, HotKey.KeyModifiers.Shift, Keys.S);
//注册热键Ctrl+B,Id号为101。HotKey.KeyModifiers.Ctrl也可以直接使用数字2来表示。
HotKey.RegisterHotKey(Handle, 101, HotKey.KeyModifiers.Ctrl, Keys.B);
//注册热键Ctrl+Alt+D,Id号为102。HotKey.KeyModifiers.Alt也可以直接使用数字1来表示。
HotKey.RegisterHotKey(Handle, 102, HotKey.KeyModifiers.Alt | HotKey.KeyModifiers.Ctrl, Keys.D);
//注册热键F5,Id号为103。
HotKey.RegisterHotKey(Handle, 103, HotKey.KeyModifiers.None, Keys.F5);
}
参考:
http://blog.csdn.net/YanMang/article/details/4246595 上面的代码可以正确的设置 Ctrl + Shift + Alt + A, Ctrl + Shift + B, Alt + C 这样的系统热键,但是我还不知道如何设置多个非功能键比如 Ctrl + Shift + A + B,Shift + Alt + C + D +E 类似这样的,等待更新吧。