.Net,发送按键/消息到没有窗口运行的命令行进程?

时间:2013-12-02 22:28:37

标签: .net command-line process keypress

基本上我正在尝试创建一个与Robocopy一起使用的简单GUI。我正在使用一个进程打开Robocopy并将输出重定向到文本框,如下所示:

    With MyProcess.StartInfo
        .FileName = "c:\windows\system32\robocopy.exe"
        .Arguments = Chr(34) & srce & Chr(34) & " " & Chr(34) & dest & Chr(34)"
        .UseShellExecute = False
        .CreateNoWindow = True
        .RedirectStandardOutput = True
        .RedirectStandardError = False
    End With
    MyProcess.Start()
    MyProcess.BeginOutputReadLine()  

您可以使用暂停/中断键暂停Robocopy进程。我正在寻找使用表单上的暂停按钮复制该功能,但我有一段时间试图找到任何适合的代码来成功发送按键。我想这归结为不知道如何将信息发送到“隐形”Robocopy流程。提前致谢。如果我能提供任何其他信息,请告诉我。

3 个答案:

答案 0 :(得分:3)

您可以使用PSSuspend暂停进程而无需发送击键 - 您可以从MyProcess对象get the processId to pass

答案 1 :(得分:1)

由于您正在重定向StdIn和StdOut,我将假设Robocopy.exe是console应用程序。

如果是这种情况,那么按 Pause 实际上会暂停托管robocopy的控制台。

我真的不知道你问题的实际答案,但这可能会让你走上正轨。也许SendKeys函数会有所帮助。

答案 2 :(得分:1)

你应该试试PostMessage。我相信即使窗口被隐藏,你也可以得到窗口句柄。

[DllImport("user32.dll", SetLastError = true)]
static extern bool PostMessage(IntPtr hWnd, uint Msg, int wParam, int lParam);

然后:

PostMessage(MyProcess.MainWindowHandle, 0x100, 0x13, 0);
PostMessage(MyProcess.MainWindowHandle, 0x101, 0x13, 0);

0x100表示按键,0x101表示按键,0x13表示暂停。检查http://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx是否有虚拟密钥代码。