Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何模拟按键_C# - Fatal编程技术网

C# 如何模拟按键

C# 如何模拟按键,c#,C#,我知道如何使用SendKeys(),但如果我想模拟按住ESCAPE键5秒钟,该如何操作?尝试使用计时器。。。使用System.Forms.Timer。。。5000毫秒。。。然后,如果5000ms结束,关闭计时器。您可以PInvokekeybd\u event并按住Escape键5秒钟,然后释放它: [DllImport("user32.dll")] static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, UIntPtr

我知道如何使用SendKeys(),但如果我想模拟按住ESCAPE键5秒钟,该如何操作?

尝试使用计时器。。。使用System.Forms.Timer。。。5000毫秒。。。然后,如果5000ms结束,关闭计时器。

您可以PInvoke
keybd\u event
并按住Escape键5秒钟,然后释放它:

[DllImport("user32.dll")]
static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, UIntPtr dwExtraInfo);


keybd_event(VK_ESCAPE, 0, 0, 0) // KEY_DOWN

System.Threading.Thread.Sleep(5000);

keybd_event(VK_ESCAPE, 0, KEYEVENTF_KEYUP, 0) // KEY_UP

再次阅读问题,这不是关于阅读长按键,而是关于发送一个。我猜他想通过编程生成类似于
KeyDown
的内容,5秒钟后生成
keydup
事件,而不是发送按键并等待5秒钟……只是出于好奇,我可以理解从用户输入中检测此类事件的需要,但为什么要以编程方式进行模拟?如何在我的项目中使用/添加VK_ESCAPE和KEYEVENTF_KEYUP?const int VK_ESCAPE=27;const int keyevent fu KEYUP=2;嗯。。。看看这个:我在测试一个abit,如果我用VK_a替换VK_ESCAPE,我应该在文本字段中得到“aaaaaaaaaa”,如果我睡眠X秒,我应该吗?我一次只得到一个(用定时器循环测试)你正在使用KEYEVENTF\U KEYUP=0x02对吗?
KEYEVENTF\U KEYUP
应该是
2
0x02
。我认为,当您在按住A键后休眠应用程序线程时,它不会响应keybd_事件(因此只有一个
A
写在应用程序的文本框中)。使用计时器或制作另一个线程。