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