Waf*_*les 5 .net c# keyboard input process
我试图让 C# 启动一个应用程序(在本例中是开放办公室),并开始发送该应用程序按键,这样它看起来就像有人正在打字一样。因此,理想情况下,我能够向正在运行的 Open Office 进程发送字母“d”的按键,然后 Open Office 会在纸上键入 d。谁能给我指导如何解决这个问题?我尝试执行以下操作:
p = new Process();
p.StartInfo.UseShellExecute = true;
p.StartInfo.CreateNoWindow = false;
p.StartInfo.FileName = processNames.executableName;
p.Start();
p.StandardInput.Write("hello");
Run Code Online (Sandbox Code Playgroud)
但这并没有达到我想要的效果——我没有看到在开放式办公室中输入的文本。
您必须通过 Win32 sendmessages 来执行此操作:基本思想如下:
首先,您需要一个指向启动的进程窗口的指针:
using System.Runtime.InteropServices;
[DllImport("user32.dll", SetLastError = true)]
private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
private void button1_Click(object sender, EventArgs e)
{
// Find a window with the name "Test Application"
IntPtr hwnd = FindWindow(null, "Test Application");
}
Run Code Online (Sandbox Code Playgroud)
然后使用 SendMessage 或 PostMessage (我猜在你的情况下首选):
http://msdn.microsoft.com/en-us/library/ms644944(v=VS.85).aspx
在此消息中指定正确的消息类型(例如 WM_KEYDOWN)来发送按键:
http://msdn.microsoft.com/en-us/library/ms646280(VS.85).aspx
查看PInvoke.net以获取 PInvoke 源代码。
或者,您可以在使用 FindWindow 将该窗口置于前台后使用 SendKeys.Send (.Net) 方法。不过这有些不靠谱。