C#下如何实现多重热键? 本帖最后由 cqbigun 于 2011-02-27 02:30:10 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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); } 谢谢楼上两位。难道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=3110732Processing Global Mouse and Keyboard Hooks in C# Utilities这个类库,你google下这个类库。 webbrowser控件内存泄露 急!!……报表设计问题!! 问一个关于数据库异地连接的问题. radioButton 取值 一道选择题(速度给答案啊) 关于线程的问题. 如何获得Reporting Server 2005上的报表及目录列表? 判断鼠标是否在某一区域的问题? 请教treeview节点展开问题 急 求一段GridView里行后面加按妞,将本行数据存入另一个表的代码 平板windows7 中 电容屏 窗体 如何知道是滑动了屏幕 呢 Timer 定时接收邮件
SendKeys.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);
}
} 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
http://www.codeproject.com/KB/cs/globalhook.aspx?msg=3110732
Processing Global Mouse and Keyboard Hooks in C#