我想中断通过 cmd.exe 运行的命令。在下面的代码中,我使用 ping www.stackoverflow.com -t 作为示例。
public void Run()
{
System.Diagnostics.ProcessStartInfo si = new System.Diagnostics.ProcessStartInfo("cmd.exe");
si.RedirectStandardInput = true;
si.RedirectStandardOutput = true;
si.RedirectStandardError = true;
si.UseShellExecute = false;
si.CreateNoWindow = false;
//si.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
System.Diagnostics.Process console = new Process();
console.StartInfo = si;
console.EnableRaisingEvents = true;
console.OutputDataReceived += proc_OutputDataReceived;
console.ErrorDataReceived += proc_ErrorDataReceived;
console.Start();
console.BeginOutputReadLine();
console.BeginErrorReadLine();
console.StandardInput.WriteLine("ping www.stackoverflow.com -t");
Thread.Sleep(4000);
bool success = GenerateConsoleCtrlEvent((uint)0, (uint)console.SessionId);
if (!success)
{
MessageBox.Show("Error Code: " + Marshal.GetLastWin32Error().ToString());
}
char asdf = (char)0x3;
console.StandardInput.WriteLine('\x3');
console.StandardInput.WriteLine(asdf);
console.StandardInput.Write(asdf);
//console.StandardInput.Close();
console.StandardInput.WriteLine(@"exit");
console.WaitForExit();
}
来自GenerateConsoleCtrlEvent的错误代码是6。
我已按照以下指示进行操作:
我可以向 Windows 上的应用程序发送 ctrl-C (SIGINT) 吗? https://stackoverflow.com/questions/813086/can-i-send-a-ctrl-c-sigint-to-an-application-on-windows
http://pastebin.com/vQuWQD8F http://pastebin.com/vQuWQD8F
如何向进程发送键而不是字符? https://stackoverflow.com/questions/2274668/how-to-send-keys-instead-of-characters-to-a-process
但是,我无法中断该过程。
非常感谢任何帮助,
这可能是向应用程序发送密钥以及其他一些消息时非常常见的问题。请记住,如果您要发送到的应用程序具有比您的程序更高的权限评估,则它通常不会成功发送密钥或消息。尝试在管理权限下运行您的程序。或者,如果您通过 Visual Studio 进行调试,请在管理权限下运行 Visual Studio。
EDIT:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)