【发布时间】:2015-06-21 20:47:00
【问题描述】:
在我的 hello world 控制台应用程序中,Process.GetCurrentProcess().Id 属性返回与 Id 不同的值,用于创建用于显示应用程序的标准输出等的 Console 窗口。
我如何专门获取控制台窗口的进程 ID?
我循环浏览Process.GetProcesses() 中的进程并根据窗口标题检查控制台窗口。当它找到它时,我将它的进程 ID 打印出来,它与 GetCurrentProcess() 调用返回的不同。所以我得出结论,控制台应用程序进程和控制台窗口是两个不同的进程,也许控制台窗口是我的控制台应用程序的子进程,或者它可能是与在 Visual Studio 中运行控制台应用程序相关的特性。
Process[] processlist = Process.GetProcesses();
int origProcessId = Process.GetCurrentProcess().Id;
foreach ( Process p in processlist)
{
// get all window handles of title 'C:\Windows\system32\cmd.exe
if (!String.IsNullOrEmpty(p.MainWindowTitle) && p.MainWindowTitle.IndexOf("C:\\Windows\\system32\\cmd.exe") == 0 )
{
Console.WriteLine("Gets here ok, once & only once");
if(origProcessId == p.Id){
Console.WriteLine("Process: {0}", p.Id); // doesn't get here!!!
}
}
}
【问题讨论】:
-
你能补充更多细节吗?我很难理解你的意思。
-
为什么要关闭它?
-
对我来说,仍然不清楚你真正想要什么。您是否开始了第二个过程?你的第一个过程是什么样的?你为什么要找 cmd.exe?可以写Minimal, Complete, and Verifiable example.吗?
-
完成 - 我认为最好询问更多信息而不是关闭问题。有时我认为这里的游戏化真的无助于对话。
-
我正在寻找 cmd.exe,因为这是 Windows 控制台应用程序的默认标题。
标签: c# process console-application managed pid