【问题标题】:C# send arrow keys to a ProccessC# 向进程发送箭头键
【发布时间】:2015-03-15 22:26:00
【问题描述】:

我正在使用以下代码来运行程序,同时我可以向它发送字母按键、\n 空格作为输入。但是我无法发送箭头键,因为它们没有 ASCII 值。

string yourApp = "C:\\program";
ProcessStartInfo processInfo = new ProcessStartInfo();
processInfo.RedirectStandardInput = true;processInfo.UseShellExecute = false;
processInfo.WindowStyle = ProcessWindowStyle.Normal;
processInfo.FileName = "cmd.exe";
processInfo.WorkingDirectory = yourApp;
processInfo.Arguments = "/c abcdef";

Process cmd = Process.Start(processInfo);

cmd.StandardInput.Write(" "); // press space
cmd.StandardInput.Flush();

cmd.StandardInput.Write("\n"); // press enter
cmd.StandardInput.Flush();

cmd.StandardInput.Write("a"); // press a
cmd.StandardInput.Flush();

有什么想法吗?

【问题讨论】:

  • 无法重定向非键入键,如功能键和箭头键。您需要大量详细介绍您尝试自动化的程序,以便有机会获得有用的帮助。
  • @HansPassant 除了exe 本身,我还能提供什么有用的数据

标签: c#


【解决方案1】:

如果你的其他进程是一个窗口,你可以使用SendMessagePostMessage 将箭头键事件消息放入其他进程使用的窗口的消息队列中。这将模拟其他进程中的实际键盘箭头键事件,而不是通过StandardInput。这不会是微不足道的。

PInvoke.net 是一个很好的资源,可以为您必须使用的非托管 Windows API 找到必要的签名。您首先必须在其他进程中识别正确的窗口句柄,然后初始化必要的事件参数并调用SendMessage(同步)或PostMessage(异步)。

【讨论】: