日期:2014-05-17  浏览次数:20854 次

键盘钩子。
在做一个小程序,用了键盘钩子。现在问题是:

当我监听到系统OnKeyPress事件后,对某些按键进行处理,
处理完后,要让系统接收处理后的按键响应,就这,出了问题。


public void OnKeyPress(KeyboardHook.HookStruct hookStruct, out bool handle)
{
handle = false; //预设不拦截任何键

String keys = this.keys.Text.ToUpper();
Keys key = (Keys)hookStruct.vkCode;
//设定的键
if (keys.IndexOf(key.ToString()) != -1)
{
handle = true;

Test t = new Test();
Thread thre = new Thread(t.Continuous);
thre.IsBackground = true;
thre.Start('x');
}
}


public class Test
{
[DllImport("user32.dll", EntryPoint = "keybd_event")]
public static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtralnfo);

public void Continuous(object key)
{
//int key1 = (int)key;
byte key2 = (byte)Convert.ToByte(key);
for (var i = 0; i < 5; i++)
{

keybd_event(key2, 0, 0, 0);
//Thread.Sleep(0);
}
}
}


KeyboardHook是全局的键盘钩子。钩子已经安装。监听系统OnKeyPresss事件成功。
比如进入IF的键是 X 。
现在是,监听到 X 键后,我想让他返回给系统,Test类的Continuous方法没效果,
在文本框还是没有 X 输入。
简单来说,这个功能就是类似一个键盘连按的效果。
键盘 钩子 连按

------解决方案--------------------
参考下这个两个文章:
http://www.cnblogs.com/Charles2008/archive/2010/04/05/1700094.html
http://www.cnblogs.com/luluping/archive/2010/08/27/1809886.html