将CTRL + C发送到进程而不会杀死我的窗口

时间:2013-04-10 15:56:07

标签: c# process cmd

我有一个控制台应用程序,它会生成“cmd mcast / recv ...> somefile.txt”

(process.standardoutputstream无法正常使用mcast,如果您想对此问题做出贡献,请参阅redirecting standard output, event is not raised

我需要向mcast发送一个ctrl + c并使用以下代码:

   [DllImport("kernel32.dll")]
   static extern bool GenerateConsoleCtrlEvent(
   uint dwCtrlEvent,
   uint dwProcessGroupId);

    void start(string path)
    {
        currentProcess = new Process();
        currentProcess.StartInfo.FileName = @"C:\WINDOWS\system32\cmd.exe";
        currentProcess.StartInfo.Arguments = "/C " + "mcast /recv /grps:239.255.0.1 /dump:3"
                    + " > " + path;
        currentProcess.StartInfo.UseShellExecute = false;
        currentProcess.Start();
     }

     void Stop()
     {
        Process mcast = Process.GetProcessesByName("mcast")[0];
        GenerateConsoleCtrlEvent(0 /*CTRL_C_EVENT*/, (uint)mcast.SessionId);
      }

然而mcast与我的程序共享控制台,mcasts sessionid为零。所以我的程序也会收到一个CTRL + C并终止(这真的不是我想做的),任何想法?

编辑:我的研究表明,不可能将CTRL + C事件发送给另一个进程。只能发送WIN_CLOSE事件,控制台进程会忽略这些事件

1 个答案:

答案 0 :(得分:0)

您可以尝试调用currentProcess.CloseMainWindow(),这应该关闭cmd.exe,并且cmd希望正确关闭正在执行的应用程序。