控制台应用程序的窗口标题

时间:2010-04-24 02:06:12

标签: visual-studio debugging process console title

在Visual Studio的“附加到进程”对话框中,“可用进程”列表中的一列是“标题”,其中列出了每个进程拥有的最顶层窗口的标题。

我们生成多个服务器进程的多个实例,以便划分工作。对于这些控制台进程,“标题”字段为空白,因此目前我们必须在管理工具中查找进程ID,以便找到正确的进程。

为了简化调试过程,我希望能够使用Title字段直接确定我想要的进程。

SetConsoleTitle没有诀窍,SetWindowText也没有hWnd。据我所知,控制台应用程序本身并不拥有我们可以传递给SetWindowText的任何窗口句柄。我们不想为这些服务器进程创建任何可见的窗口。

有什么建议可以合理地欺骗Visual Studio在这里显示一些有用的信息吗?

1 个答案:

答案 0 :(得分:1)

我想你可能运气不好。控制台窗口不属于控制台进程,而是属于系统进程(win7上的conhost.exe,也可能是vista,之前的csrss.exe),因此如果Visual Studio只是在寻找进程顶级窗口,它就赢了“找到控制台窗口。据我所知,探测器不支持proc,因此视觉工作室可能没有明智的方法来查看你所拥有的控制台窗口的标题。

一种可能的解决方案可能是在控制台进程中创建顶级窗口作为调试辅助工具。您可能希望有条件地编译它,因此它仅在您进行调试时可用。只需创建一个泵送消息的附加线程,并创建一个顶级窗口。如果设置正确的样式,窗口将不可见。您可能不希望在代码中附带窗口,因为在长时间运行的服务器代码中,窗口总是会增加攻击面,即使只是一点点。

这可能不是很有帮助,但值得一提的是,在Windows上,分配工作的首选方法是使用线程而不是多个进程。进程是一个昂贵的对象,线程在系统资源方面要便宜得多,而且更容易调试。