求助,C# 捕获组合键代码 本帖最后由 cejay 于 2010-06-16 02:09:34 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 以下代码我也是从CSDN 别人回答问题时拷贝过来的,按你的要求修改了一下,供你参考: private void button7_Click(object sender, EventArgs e) { this.Hide(); if (_RegisKey != null) { return; } _RegisKey = new RegisterHotKeyClass(); _RegisKey.Keys = Keys.Q; _RegisKey.ModKey = RegisterHotKeyClass.MODKEY.MOD_ALT; _RegisKey.WindowHandle = this.Handle; _RegisKey.HotKey += new RegisterHotKeyClass.HotKeyPass(_Regis_HotKey); _RegisKey.StarHotKey(); } private RegisterHotKeyClass _RegisKey; void _Regis_HotKey() { MessageBox.Show("You are pressed Alt + Q"); this.Show(); //Do something } public class RegisterHotKeyClass { private IntPtr m_WindowHandle = IntPtr.Zero; private MODKEY m_ModKey = MODKEY.MOD_CONTROL; private Keys m_Keys = Keys.A; private int m_WParam = 10000; private bool Star = false; private HotKeyWndProc m_HotKeyWnd = new HotKeyWndProc(); public IntPtr WindowHandle { get { return m_WindowHandle; } set { if (Star)return; m_WindowHandle = value; } } public MODKEY ModKey { get { return m_ModKey; } set { if (Star)return; m_ModKey = value; } } public Keys Keys { get { return m_Keys; } set { if (Star)return; m_Keys = value; } } public int WParam { get { return m_WParam; } set { if (Star)return; m_WParam = value; } } public void StarHotKey() { if (m_WindowHandle != IntPtr.Zero) { if (!RegisterHotKey(m_WindowHandle, m_WParam, m_ModKey, m_Keys)) { throw new Exception("注册失败!"); } try { m_HotKeyWnd.m_HotKeyPass = new HotKeyPass(KeyPass); m_HotKeyWnd.m_WParam = m_WParam; m_HotKeyWnd.AssignHandle(m_WindowHandle); Star = true; } catch { StopHotKey(); } } } private void KeyPass() { if (HotKey != null) HotKey(); } public void StopHotKey() { if (Star) { if (!UnregisterHotKey(m_WindowHandle, m_WParam)) { throw new Exception("卸载失败!"); } Star = false; m_HotKeyWnd.ReleaseHandle(); } } public delegate void HotKeyPass(); public event HotKeyPass HotKey; private class HotKeyWndProc : NativeWindow { public int m_WParam = 10000; public HotKeyPass m_HotKeyPass; protected override void WndProc(ref Message m) { if (m.Msg == 0x0312 && m.WParam.ToInt32() == m_WParam) { if (m_HotKeyPass != null) m_HotKeyPass.Invoke(); } base.WndProc(ref m); } } public enum MODKEY { MOD_ALT = 0x0001, MOD_CONTROL = 0x0002, MOD_SHIFT = 0x0004, MOD_WIN = 0x0008, } [DllImport("user32.dll")] public static extern bool RegisterHotKey(IntPtr wnd, int id, MODKEY mode, Keys vk); [DllImport("user32.dll")] public static extern bool UnregisterHotKey(IntPtr wnd, int id); } private void Form1_KeyDown(object sender, KeyEventArgs e) { switch (e.KeyCode) { case Keys.Control Or Keys.A: Button2_Click(sender, e); break; case Keys.B: Button4_Click(sender, e); break; default:break; } } 钩子函数protected override void WndProc(ref Message m) { } //全局按键 void keyboardHook_KeyDown(object sender, KeyEventArgs e) { if (e.Alt&& e.KeyCode == Keys.Q) { } }可到http://download.csdn.net/source/2046112下载例子 KeyboardHook keyboardHook = new KeyboardHook();//全局按键 public frmMonitor() { InitializeComponent(); keyboardHook.KeyDown += new KeyEventHandler(keyboardHook_KeyDown); keyboardHook.Start(); }结合上面即可完成,将GlobalHook.cs和KeyboardHook.cs复制到你的项目 这里是假设在 Button 里调用,后面的代码是放在和 button7_Click 同一级的IDE 窗口中,代码是通过了的,没有错误。至于有些有些不明白,我也一样,你不要太在乎,等你C#技术高了,再回过头来看,里面使用了属性,事件,委托 ,API,重载等等 字符串截取判断。。。 SplitString拆分出来的元素判断是否存在 谁能帮我将下面的Javascript代码改写成C# socket 问题 如何使datagrid中新添加的行的某列给定一个初值 Culture=neutral, PublicKeyToken=null”中加载类型 VS2010打开低版本项目~~~请教 字符串至对象 <ADO.NET程序设计>一书到底有没有附带的练习盘? 如何建立和调用数据库? Winform窗体最大化后,各个控件随着变换相应的大小。 C/S的水晶报表不能重复打印
private void button7_Click(object sender, EventArgs e)
{
this.Hide();
if (_RegisKey != null) { return; } _RegisKey = new RegisterHotKeyClass();
_RegisKey.Keys = Keys.Q;
_RegisKey.ModKey = RegisterHotKeyClass.MODKEY.MOD_ALT;
_RegisKey.WindowHandle = this.Handle;
_RegisKey.HotKey += new RegisterHotKeyClass.HotKeyPass(_Regis_HotKey);
_RegisKey.StarHotKey();
}
private RegisterHotKeyClass _RegisKey;
void _Regis_HotKey()
{
MessageBox.Show("You are pressed Alt + Q");
this.Show();
//Do something
}
public class RegisterHotKeyClass
{
private IntPtr m_WindowHandle = IntPtr.Zero;
private MODKEY m_ModKey = MODKEY.MOD_CONTROL;
private Keys m_Keys = Keys.A;
private int m_WParam = 10000;
private bool Star = false;
private HotKeyWndProc m_HotKeyWnd = new HotKeyWndProc(); public IntPtr WindowHandle
{
get { return m_WindowHandle; }
set { if (Star)return; m_WindowHandle = value; }
}
public MODKEY ModKey
{
get { return m_ModKey; }
set { if (Star)return; m_ModKey = value; }
}
public Keys Keys
{
get { return m_Keys; }
set { if (Star)return; m_Keys = value; }
}
public int WParam
{
get { return m_WParam; }
set { if (Star)return; m_WParam = value; }
} public void StarHotKey()
{
if (m_WindowHandle != IntPtr.Zero)
{
if (!RegisterHotKey(m_WindowHandle, m_WParam, m_ModKey, m_Keys))
{
throw new Exception("注册失败!");
}
try
{
m_HotKeyWnd.m_HotKeyPass = new HotKeyPass(KeyPass);
m_HotKeyWnd.m_WParam = m_WParam;
m_HotKeyWnd.AssignHandle(m_WindowHandle);
Star = true;
}
catch
{
StopHotKey();
}
}
}
private void KeyPass()
{
if (HotKey != null) HotKey();
}
public void StopHotKey()
{
if (Star)
{
if (!UnregisterHotKey(m_WindowHandle, m_WParam))
{
throw new Exception("卸载失败!");
}
Star = false;
m_HotKeyWnd.ReleaseHandle();
}
}
public delegate void HotKeyPass();
public event HotKeyPass HotKey;
private class HotKeyWndProc : NativeWindow
{
public int m_WParam = 10000;
public HotKeyPass m_HotKeyPass;
protected override void WndProc(ref Message m)
{
if (m.Msg == 0x0312 && m.WParam.ToInt32() == m_WParam)
{
if (m_HotKeyPass != null) m_HotKeyPass.Invoke();
} base.WndProc(ref m);
}
} public enum MODKEY
{
MOD_ALT = 0x0001,
MOD_CONTROL = 0x0002,
MOD_SHIFT = 0x0004,
MOD_WIN = 0x0008,
} [DllImport("user32.dll")]
public static extern bool RegisterHotKey(IntPtr wnd, int id, MODKEY mode, Keys vk); [DllImport("user32.dll")]
public static extern bool UnregisterHotKey(IntPtr wnd, int id); }
{
switch (e.KeyCode)
{
case Keys.Control Or Keys.A: Button2_Click(sender, e); break;
case Keys.B: Button4_Click(sender, e); break;
default:break;
}
}
钩子函数
protected override void WndProc(ref Message m)
{
}
void keyboardHook_KeyDown(object sender, KeyEventArgs e)
{
if (e.Alt&& e.KeyCode == Keys.Q)
{
}
}
可到http://download.csdn.net/source/2046112下载例子
{
InitializeComponent();
keyboardHook.KeyDown += new KeyEventHandler(keyboardHook_KeyDown);
keyboardHook.Start();
}结合上面即可完成,将GlobalHook.cs和KeyboardHook.cs复制到你的项目
这里是假设在 Button 里调用,后面的代码是放在和 button7_Click 同一级的IDE 窗口中,
代码是通过了的,没有错误。至于有些有些不明白,我也一样,你不要太在乎,等你C#技术高了,再回过头来看,里面使用了属性,事件,委托 ,API,重载等等