C#的 WinForm 如何注册系统热键,就像QQ那样
其实很简单,只要调用api就成,代码如下:
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); } } }
分享到: | |
没有评论