C# Winform编程如何向外部程序发送模拟按键空格键(按住一定的时间)

2024-12-16 07:48:50
推荐回答(5个)
回答1:

模拟键盘我们用Keybd_event这个api函数,模拟鼠标按键用mouse_event函数。在VC里调用api函数是既简单又方便不过的事了。
首先介绍一下Keybd_event函数。Keybd_event能触发一个按键事件,也就是说回产生一个WM_KEYDOWN或WM_KEYUP消息。当然也可以用产生这两个消息来模拟按键,但是没有直接用这个函数方便。Keybd_event共有四个参数,第一个为按键的虚拟键值,如回车键为vk_return, tab键为vk_tab。第二个参数为扫描码,一般不用设置,用0代替就行第三个参数为选项标志,如果为keydown则置0即可,如果为keyup则设成“KEYEVENTF_KEYUP”,第四个参数一般也是置0即可。用如下代码即可实现模拟按下键,其中的XX表示XX键的虚拟键值,在这里也就是各键对应的键码,如’A’=65
keybd_event(65,0,0,0);
keybd_event(65,0,KEYEVENTF_KEYUP,0); ...

回答2:

using System.Runtime.InteropServices;
02

03
引入键盘事件函数
04

05
[DllImport("user32.dll")]
06
public static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);
07
参数:
08

09
bVk:定义一个虚拟键码。键码值必须在1~254之间。
10

11
bScan:定义该键的硬件扫描码。
12

13
dwFlags:定义函数操作的名个方面的一个标志位集。应用程序可使用如下一些预定义常数的组合设置标志位。
14

15
KEYEVENTF_EXETENDEDKEY:若指定该值,则扫描码前一个值为OXEO(224)的前缀字节。KEYEVENTF_KEYUP:若指定该值,该键将被释放;若未指定该值,该键交被接下。dwExtralnfo:定义与击键相关的附加的32位值。
16

17
返回值:该函数无返回值。
18

19
备注:尽管keybd_event传递一个与OEM相关的硬件扫描码给系统,但应用程序不能用此扫描码。系统在内部将扫描码转换成虚拟键码,并且在传送给应用程序前清除键码的UP/down位。应用程序可以摸拟PRINTSCREEN键的按下来获得一个屏幕快照,并把它存放到剪切板中。若要做到这一点,则要将keybd_event的bVk参数置为VK_SNAPSHOT,bScan参数置为0(用以获得全屏快照)或hScan置为1(仅获得活动窗口的快照)。Windows CE:WindowsCE支持dwFlags参数附加的标志位。即使用KEYEVENTF_SILENT标志模拟击键,而不产生敲击的声音。Windows CE不支持KEYEVENTF_EXTENDEDKEY标志。
20

21

22

23
keybd_event(13, 0, 0, 0);//模拟发送回车消息
空格按键是类似的道理
你怎么不知道所云,都把代码发上来了还要干啥

回答3:

现在就有一个软件叫做按键精灵功能相当强大,其中就包括这个功能
你要是说要自己编程的话,偶没弄过额

按键精灵就可以做按键的功能啊,就不用再写程序了

回答4:

跨程序跨进程沟通是不是可以考虑pipe
学.NET 3天的新人推理飘过
如果不对,麻烦指正,如果太荒谬,请砸砖

回答5:

SendKeys
http://msdn.microsoft.com/zh-cn/library/system.windows.forms.sendkeys(v=VS.80).aspx

这是链接 MSDN 的!
请注意 页面上黄色的部分