模拟另一个应用程序中的按键和按键释放?

问题描述 投票:3回答:4

我需要与正在运行的外部应用程序进行交互,并发送特定的按键和发布。我尝试使用SendKeys类,但是它只完成一半的工作,因为按键是通过立即释放按键的方式发送到外部应用程序的。

我需要能够为外部应用程序模拟“按键按下”。我现在正在尝试使用SendMessage东西,但是现在它根本不起作用:(而且我什至都没有收到错误。

c# keyboard sendmessage
4个回答
3
投票

好,案例解决了。我实际上安装了VC ++来尝试核心的keybd_event()函数,并且在工作之后,我可以在C#中使用[[wisely。

这是代码,令人惊讶的是,它非常简单。您将需要使用将此添加到您的代码中,以便能够导入dll:

using System.Runtime.InteropServices;

此代码将按住'1'按钮3秒钟,然后释放1秒钟并重复该过程。

(代码高亮部分被弄乱了:/,从'namespace ...'复制到最后一个括号'}')

public class Program { [DllImport("user32.dll")] private static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, UIntPtr dwExtraInfo); private static void Main(string[] args) { while (true) { keybd_event((byte)0x31, (byte)0x02, 0, UIntPtr.Zero); Thread.Sleep(3000); keybd_event((byte)0x31, (byte)0x82, (uint)0x2, UIntPtr.Zero); Thread.Sleep(1000); } } }


1
投票
您是否曾尝试使用PostMessage发送WM_KEYDOWNWM_KEYDOWN

编辑

您将以这种方式使用它(我正在用C ++编写,但是您可以轻松使用WM_KEYUP和..NET)

WM_KEYUP


1
投票
您可以使用WSH脚本外壳执行此操作:

PInvoke

您需要做的就是将COM引用添加到1.0版的“ Windows脚本宿主对象”。一切都在名称空间HWND hwnd = FindWindow(NULL,_T("Mywindow"));
PostMessage(hwnd,WM_KEYDOWN,VK_A,0);
中。

0
投票
[官方API为var shell = new WshShellClass(); var missing = System.Reflection.Missing.Value; shell.SendKeys("MOO!!!", ref missing);
© www.soinside.com 2019 - 2024. All rights reserved.