C#下如何实现多重热键?
--------------------编程问答-------------------- sendkeysSendKeys.Send("+a");
SHIFT +
CTRL ^
ALT %
[DllImport("USER32 ", SetLastError = true)]
static extern short GetKeyState(int nVirtKey);
[DllImport("user32")]
public static extern bool RegisterHotKey(IntPtr hWnd, int id, uint control, Keys vk);//注册热键
[DllImport("user32")]
public static extern bool UnregisterHotKey(IntPtr hWnd, int id);//解除热键
public const int WM_HOTKEY = 0x312;
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
RegisterHotKey(this.Handle, 1, 4 | 2, Keys.A);
}
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_HOTKEY)
{
MessageBox.Show("ctrl+shift+a");
}
base.WndProc(ref m);
}
--------------------编程问答-------------------- --------------------编程问答--------------------
谢谢回复,你这种还是实现不了我说的效果呀,我说的是一个键盘辅助键加上两个普通键,或者三个都是普通键这种,而且是一次按下,在VS环境里的很多快捷键都是一个辅助键加上两个普通键。
--------------------编程问答--------------------
谢谢帮顶。。。 --------------------编程问答-------------------- 除了 监听还有什么好办法呢? --------------------编程问答-------------------- 没好办法了 --------------------编程问答-------------------- 谢谢楼上两位。难道user32.dll提供的热键注册api只能是辅助键加普通键的组合方式? --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 晕,楼上的,你在刷分????
--------------------编程问答-------------------- 推荐使用Gma.UserActivityMonitor来处理键盘消息。封装的不错。
HookManager.KeyUp -= HookManager_KeyUp;
}
void HookManager_KeyDown(object sender, KeyEventArgs e)
{
ProcessMultiKey(e.KeyCode, true);
}
void HookManager_KeyUp(object sender, KeyEventArgs e)
{
ProcessMultiKey(e.KeyCode, false);
}
private void ProcessMultiKey(Keys MultiKey, bool DownOrUp)
{
if (MultiKey == Keys.C)
isCDown = DownOrUp;
else if (MultiKey == Keys.W)
isWDown = DownOrUp;
else if (MultiKey == Keys.LControlKey || MultiKey == Keys.RControlKey)
isCtrlDown = DownOrUp;
if (isCDown && isCtrlDown)
CopyToClipBoard();
else if (isWDown && isCtrlDown)
SwitchDisplayMode();
}
部分代码示例 --------------------编程问答--------------------
谢谢推荐
我去google一下,找到一篇tw的mvp的blog
参考如下:http://www.dotblogs.com.tw/nobel12/archive/2010/03/26/14230.aspx --------------------编程问答-------------------- 另外还有codeproject上的这一篇
http://www.codeproject.com/KB/cs/globalhook.aspx?msg=3110732
Processing Global Mouse and Keyboard Hooks in C# --------------------编程问答-------------------- Utilities这个类库,你google下这个类库。
补充:.NET技术 , C#