我有一个控制台应用程序,它产生一个“cmd mcast /recv ... > somefile.txt”
(process.standardoutputstream 不能与 mcast 一起正常工作,如果您想对此问题做出贡献,请参阅重定向标准输出,未引发事件)
我需要向 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 与我的程序共享控制台,并且 mcast 的 sessionid 为零。所以我的程序也收到一个 CTRL+C 并终止(这真的不是我想要做的),有什么想法吗?
编辑:我所有的研究表明,不可能将 CTRL+C 事件发送到另一个进程。只能发送 WIN_CLOSE 事件,控制台进程会忽略这些事件