首先祝各位新年快乐!!!我的需求:
模拟键盘上某个键长按一段时间。
也就是你在键盘上按着"a"键不放的效果。网上找的模拟键盘东西,我总结下,有三种:1.最简单的,.net的方法SendKeys.Send("A");
但是熟悉的大侠都知道,这只是一个按下,弹起的过程,也就单击一个键。2.windows api keybd_event[DllImport("user32.dll", EntryPoint = "keybd_event")]
public static extern void keybd_event(
byte bVk, //虚拟键值
byte bScan,// 一般为0
int dwFlags, //这里是整数类型 0 为按下,2为释放
int dwExtraInfo //这里是整数类型 一般情况下设成为 0
);
这是转换到C#后的形式
keybd_event((byte)Keys.A, 0, 0,0);//按下
Thread.Sleep(3000);
keybd_event((byte)Keys.A, 0, 2,0);//弹起这样做,我用记事本测试了一下,如果长按,应该是出现aaaaaa,但是问题是只出现了2个a,
分别是开头和结束的时候两个操作出现2个a3.windows api sendmessage
这个我不多说了,很经典的东西
同样有键盘事件,但是诸多不便,需要窗口句柄,不满足我的要求问题仍然没有解决,请各位大侠指点一二,谢谢
模拟键盘上某个键长按一段时间。
也就是你在键盘上按着"a"键不放的效果。网上找的模拟键盘东西,我总结下,有三种:1.最简单的,.net的方法SendKeys.Send("A");
但是熟悉的大侠都知道,这只是一个按下,弹起的过程,也就单击一个键。2.windows api keybd_event[DllImport("user32.dll", EntryPoint = "keybd_event")]
public static extern void keybd_event(
byte bVk, //虚拟键值
byte bScan,// 一般为0
int dwFlags, //这里是整数类型 0 为按下,2为释放
int dwExtraInfo //这里是整数类型 一般情况下设成为 0
);
这是转换到C#后的形式
keybd_event((byte)Keys.A, 0, 0,0);//按下
Thread.Sleep(3000);
keybd_event((byte)Keys.A, 0, 2,0);//弹起这样做,我用记事本测试了一下,如果长按,应该是出现aaaaaa,但是问题是只出现了2个a,
分别是开头和结束的时候两个操作出现2个a3.windows api sendmessage
这个我不多说了,很经典的东西
同样有键盘事件,但是诸多不便,需要窗口句柄,不满足我的要求问题仍然没有解决,请各位大侠指点一二,谢谢
public static extern void Keybd_event(byte vk, byte scan, int flags, int extrainfo);
const int KEYEVENTF_EXTENDEDKEY = 0x1;
const int KEYEVENTF_KEYUP = 0x2;
//VK_MENU 相当于Alt键
Keybd_event((byte)12, 0x45, KEYEVENTF_EXTENDEDKEY, 0);//按下,有KEYEVENTF_KEYUP即为长按
Keybd_event((byte)12, 0x45, KEYEVENTF_KEYUP, 0);//抬起
这里的标志位用于控制是否按下某个键,按下状态下不断send就是你要的长按
循环send肯定和长按不是一个效果,也排除···
试试3楼梦哥的代码吧,希望不是无解
[email protected]