以一个Form程序为例
public class Form1 : Form
{
private void Form1_Load(object sender, System.EventArgs e)
{
SetHotKey(false, false, false, true, Keys.Right, 100); // 设置多个热键
SetHotKey(false, false, false, true, Keys.Space, 101);
SetHotKey(false, false, false, true, Keys.Up, 102);
SetHotKey(false, false, false, true, Keys.Down, 103);
}
private bool key_Ctrl = false;
private bool key_Shift = false;
private bool key_Alt = false;
private bool key_Windows = false;
private Keys key_other;
public void SetHotKey(bool bCtrl,bool bShift,bool bAlt,bool bWindows,Keys nowKey,int keyId)
{
try
{
this.key_Alt = bAlt;
this.key_Ctrl = bCtrl;
this.key_Shift = bShift;
this.key_Windows = bWindows;
this.key_other = nowKey;
WinHotKey.KeyModifiers modifier = WinHotKey.KeyModifiers.None;
if( this.key_Ctrl )
modifier |= WinHotKey.KeyModifiers.Control;
if(this.key_Alt )
modifier |= WinHotKey.KeyModifiers.Alt;
if(this.key_Shift)
modifier |= WinHotKey.KeyModifiers.Shift;
if(this.key_Windows)
modifier |= WinHotKey.KeyModifiers.Windows;
WinHotKey.RegisterHotKey(Handle,keyId,modifier,nowKey);
}
catch
{
MessageBox.Show ("快捷键定义错误!");
}
}
protected override void WndProc(ref Message msg )
{
const int WM_HOTKEY = 0x0312; // 热键消息
if (msg.Msg != WM_HOTKEY)
{
base.WndProc(ref msg);
}
else
{
//激活热键,在此可以添加处理程序
if (100 == (int)msg.WParam)
{
//Dosomething
}
else if (101 == (int)msg.WParam)
{
//Dosomething
}
else if (102 == (int)msg.WParam)
{
//Dosomething
}
else
{
//Dosomething
}
}
}
private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
WinHotKey.UnregisterHotKey(Handle, 100); // 注销热键
WinHotKey.UnregisterHotKey(Handle, 101); // 注销热键
WinHotKey.UnregisterHotKey(Handle, 102); // 注销热键
WinHotKey.UnregisterHotKey(Handle, 103); // 注销热键
}
public class WinHotKey
{
public WinHotKey()
{
}
[DllImport("user32.dll",SetLastError=true)]
public static extern bool RegisterHotKey(
IntPtr hWnd,
int id,
KeyModifiers fsModifiers,
Keys vk
);
[DllImport("user32.dll",SetLastError=true)]
public static extern bool UnregisterHotKey(
IntPtr hWnd,
int id
);
[Flags()]
public enum KeyModifiers
{
None = 0,
Alt = 1,
Control =2,
Shift = 4,
Windows = 8
}
}
这样就完成了热键的定义