首先祝各位新年快乐!!!我的需求:
模拟键盘上某个键长按一段时间。
也就是你在键盘上按着"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
这个我不多说了,很经典的东西
同样有键盘事件,但是诸多不便,需要窗口句柄,不满足我的要求问题仍然没有解决,请各位大侠指点一二,谢谢

解决方案 »

  1.   

    循环SendKeys.Send("A"); 模拟长按
      

  2.   

    DllImport("user32.dll", EntryPoint = "keybd_event", CharSet = CharSet.Auto, ExactSpelling = true)]
    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);//抬起
      

  3.   

    利用标志位,处理keydown和keyup事件
    这里的标志位用于控制是否按下某个键,按下状态下不断send就是你要的长按
      

  4.   

    我尝试了连续发送keydown事件,但输出并不如长按的效果么,请问有具体点的代码么?谢谢了
      

  5.   

    俺只记得sendmessage发送WM_KEYCHAR消息这个可以实现长按键盘,需要窗口句柄··排除··
    循环send肯定和长按不是一个效果,也排除···
    试试3楼梦哥的代码吧,希望不是无解
      

  6.   

    算了梦哥的代码提到了值为1的那个参数,但是网上怎么搜都没有这个的相关资料,只是msdn的中文乱翻译或者是我菜看不懂
      

  7.   

    哪位实现了?
      [email protected]