#region 设置快捷键
#region 1、注册API
//如果函数执行成功,返回值不为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
}
#endregion
#region 2、注册热键
/// <summary>
/// 窗体热键,仅在当前窗体时起作用
/// </summary>
void RegistHotKey()
{
//注册热键Ctrl+S,Id号为100。
RegisterHotKey(Handle, 100, KeyModifiers.Ctrl, Keys.S);
RegisterHotKey(Handle, 101, KeyModifiers.Ctrl, Keys.R);
RegisterHotKey(Handle, 102, KeyModifiers.Ctrl, Keys.Left);
RegisterHotKey(Handle, 103, KeyModifiers.Ctrl, Keys.Right);
RegisterHotKey(Handle, 104, KeyModifiers.Ctrl, Keys.Home);
RegisterHotKey(Handle, 105, KeyModifiers.Ctrl, Keys.End);
RegisterHotKey(Handle, 106, KeyModifiers.Ctrl, Keys.Delete);//删除历史记录
}
/// <summary>
/// 全局的热键,程序启动后就一直起作用
/// </summary>
void PublicRegistHotKey()
{
RegisterHotKey(Handle, 107, KeyModifiers.Alt, Keys.H);//隐藏/显示界面
}
//记得初始化的时间调用RegistHotKey 如:
/*
private void Form1_Load(object sender, EventArgs e)
{
RegistHotKey();
}
*/
#endregion
#region 3、重载WndProc方法,用于实现热键响应
/// <summary>
/// 重载WndProc方法,用于实现热键响应
/// </summary>
/// <param name="m"></param>
protected override void WndProc(ref Message m)
{
const int WM_HOTKEY = 0x0312;
//按快捷键
switch (m.Msg)
{
case WM_HOTKEY:
switch (m.WParam.ToInt32())
{
case 100: //按下的是Ctrl+S
//此处填写快捷键响应代码
tsBtnSave_Click(null, null);
break;
case 101: //按下的是Ctrl+R
//此处填写快捷键响应代码
tsBtnRun_Click(null, null);
break;
case 102: //按下的是Ctrl+Left
//此处填写快捷键响应代码
Init(currentIndex - 1);
break;
case 103: //按下的是Ctrl+Right
//此处填写快捷键响应代码
Init(currentIndex + 1);
break;
case 104: //按下的是Ctrl+ome
//此处填写快捷键响应代码
Init(0);
break;
case 105: //按下的是Ctrl+End
//此处填写快捷键响应代码
Init(0, false);
break;
case 106: //按下的是Ctrl+Delete
//此处填写快捷键响应代码
EmptyXml();//删除历史记录
break;
case 107: //按下的是Alt+H
//此处填写快捷键响应代码
this.Visible=!this.Visible;//显示/隐藏
break;
}
break;
}
base.WndProc(ref m);
}
#endregion
#region 4、注销热键
void UnregistHotKey()
{
//注销Id号为100的热键设定
UnregisterHotKey(Handle, 100);
//注销Id号为101的热键设定
UnregisterHotKey(Handle, 101);
//注销Id号为102的热键设定
UnregisterHotKey(Handle, 102);
UnregisterHotKey(Handle, 103);
UnregisterHotKey(Handle, 104);
UnregisterHotKey(Handle, 105);
UnregisterHotKey(Handle, 106);
}
void PublicUnregistHotKey()
{
UnregisterHotKey(Handle, 107);
}
//记得退出程序时需调用,如
/*
private void Form1_FormClosing(object sender, FormClosingEventArgs e) //退出程序时缷载热键
{
UnregistHotKey();
}
*/
#endregion
private void MainForm_Activated(object sender, EventArgs e)
{
RegistHotKey();
}
private void MainForm_Deactivate(object sender, EventArgs e)
{
UnregistHotKey();
}
#endregion