首页 / 软件开发 / C# / C#的Hotkey简单封装
C#的Hotkey简单封装2010-08-14叶子的家本来听说winapi里面的RegisterHotKey有时候不好使,于是打算用hook键盘消 息来做hook key,结果发现hook那里处理消息那里还挺麻烦,也想会不会造成系 统的额外开销比较大,所以最后用RegisterHotKey来封装了一下,测试没有问题 ,还是可以的。(winform)下面的代码包括一个Textbox的处理,和一个 封装了api的类。Textbox那里就是处理用户定义的热键的界面表示,比如用户按 键的时候会出现"Ctrl+Alt+A"之类的,Api封装那里做了处理,只管 Register好了,不用管UnRegister,当注册一个一样的Id的hotkey,会自动先 UnRegister原来的,然后最后关闭窗口的时候,调用一下HotkeyHelper.Dispose ()就可以了。还希望多加建议。here we go..----------------------- ---------------------------------------------------------Textbox 部分:(Key hotkeyVk = null; )private void txbHotKey_KeyDown(object sender, KeyEventArgs e)
{
txbHotKey.Text = string.Empty;
if (e.Control)
{
txbHotKey.Text += "Ctrl+";
}
if (e.Alt)
{
txbHotKey.Text += "Alt+";
}
if (e.Shift)
{
txbHotKey.Text += "Shift+";
}
if (e.KeyCode >= Keys.A && e.KeyCode <= Keys.Z)
{
if (e.Modifiers != Keys.None)
{
txbHotKey.Text += e.KeyCode.ToString();
hotkeyVk = e.KeyCode;
}
}
else if (e.KeyCode >= Keys.D0 && e.KeyCode <= Keys.D9)
{
if (e.Modifiers != Keys.None)
{
txbHotKey.Text += e.KeyCode.ToString().Remove(0, 1);
hotkeyVk = e.KeyCode;
}
}
else if (e.KeyCode >= Keys.NumPad0 && e.KeyCode <= Keys.NumPad9)
{
if (e.Modifiers != Keys.None)
{
txbHotKey.Text += e.KeyCode.ToString ().Replace("Pad", "");
hotkeyVk = e.KeyCode;
}
}
else if (e.KeyCode >= Keys.F1 && e.KeyCode <= Keys.F12)
{
txbHotKey.Text += e.KeyCode.ToString();
hotkeyVk = e.KeyCode;
}
e.SuppressKeyPress = false;
e.Handled = true;
}
private void txbHotKey_KeyPress(object sender, KeyPressEventArgs e)
{
e.Handled = true;
}
private void txbHotKey_KeyUp (object sender, KeyEventArgs e)
{
CheckHotkey();
}
void txbHotKey_LostFocus(object sender, EventArgs e)
{
CheckHotkey();
}
private void CheckHotkey()
{
if (txbHotKey.Text.EndsWith("+") || txbHotKey.Text == string.Empty)
{
txbHotKey.Text = "无";
}
}
private void btnHotKey_Click(object sender, EventArgs e)
{
string hotkey = txbHotKey.Text.Replace("+", "");
if (hotkey != "无" && hotkey != string.Empty)
{
uint modifies = 0;
if (hotkey.Contains ("Ctrl"))
{
modifies |= HotkeyHelper.MOD_CONTROL;
hotkey = hotkey.Replace ("Ctrl", "");
}
if (hotkey.Contains ("Alt"))
{
modifies |= HotkeyHelper.MOD_ALT;
hotkey = hotkey.Replace("Alt", "");
}
if (hotkey.Contains("Shift"))
{
modifies |= HotkeyHelper.MOD_SHIFT;
hotkey = hotkey.Replace("Shift", "");
}
GameProvider.HotkeyHelper.RegisterHotKey(this.Handle, hotkeyId, modifies, (uint)hotkeyVk);
}
}