在 Visual C++ 中切换子进程窗口可见性而不重新启动子进程
Posted
技术标签:
【中文标题】在 Visual C++ 中切换子进程窗口可见性而不重新启动子进程【英文标题】:Toggle child process window visibility in Visual C++ without relaunching the child 【发布时间】:2017-11-27 20:45:16 【问题描述】:使用 Visual Studio 2017。
我用
siStartInfo.dwFlags &= STARTF_USESHOWWINDOW;
siStartInfo.wShowWindow = SW_HIDE;
创建一个带有隐藏窗口的子进程(通过 CreateProcess())。效果很好。
如果可能的话,我希望能够切换子进程窗口的可见性状态,创建后,从主程序按需(按下例如一个按钮)。我想控制子进程的窗口可见性而不通过 CreateProcess() 重新启动它。
修改子进程代码不是一种选择——它可以是许多不同的程序,不一定有可用的源代码。
提前致谢。
【问题讨论】:
siStartInfo.dwFlags |= STARTF_USESHOWWINDOW;
需要使用
不清楚visual-studio
与这一切的关系。子进程可以完全忽略启动信息。
您必须找到子进程窗口并显示它。
【参考方案1】:
如果您知道子进程的唯一窗口类或标题,则可以使用FindWindow()
查找该窗口。
对于更通用的方法,使用EnumWindows()
枚举所有***窗口。对每个窗口调用GetWindowThreadProcessId()
检查是否属于子进程。
致电ShowWindow()
以切换可见性。
【讨论】:
如果生成的应用程序是单线程的(或者至少,有问题的窗口属于主线程),请考虑使用EnumThreadWindows()
而不是EnumWindows()
+GetWindowThreadProcessId()
。 CreateProcess()
返回新进程的主线程的线程ID。以上是关于在 Visual C++ 中切换子进程窗口可见性而不重新启动子进程的主要内容,如果未能解决你的问题,请参考以下文章
visual C++ 创建一个窗口却无法显示窗口的原因是啥?