基本上我正在尝试创建一个与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流程。提前致谢。如果我能提供任何其他信息,请告诉我。
答案 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是否有虚拟密钥代码。