基本上,我正在尝试创建一个简单的GUI来与Robocopy一起使用。我用一个过程打开Robocopy,并将输出重定向到一个文本框,如下所示:
With MyProcess.StartInfo
.FileName = "c:windowssystem32robocopy.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过程。我希望通过表单上的暂停按钮来复制这种功能,但我很难找到任何可以成功发送按键的代码。我想这归结为不知道如何将信息发送到"看不见的"机器人复制过程。提前谢谢。如果我能提供任何其他信息,请告诉我。
您可以使用PSSuspend挂起进程,而无需发送键击-您可以从MyProcess对象中获取要传递的进程ID。
您应该试试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用于虚拟密钥代码。
由于您正在重定向StdIn和StdOut,我假设Robocopy.exe是一个console
应用程序。
如果是这种情况,那么按下暂停实际上是暂停托管robocopy的控制台。
我真的不知道你问题的实际答案,但这可能会让你走上正轨。也许SendKeys
功能会有所帮助。