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);
}
}
}