Q:WinForm 如何注册热键?
A:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.DirectoryServices;

using System.Runtime.InteropServices;

namespace test
... {
public partial class Form1 : Form
... {
class HotKey
... {
// 如果函数执行成功,返回值不为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
}
}
public Form1()
... {
InitializeComponent();
HotKey.RegisterHotKey( this .Handle, 100 , 0 , Keys.F1);
}
protected override void WndProc( ref Message m)
... {
const int WM_HOTKEY = 0x0312 ;
// 按快捷键
switch (m.Msg)
... {
case WM_HOTKEY:
switch (m.WParam.ToInt32())
... {
case 100 :
MessageBox.Show( " Press F1 " );
break ;
}
break ;
}
base .WndProc( ref m);
}
}
}