如何隐藏一个win32应用程序窗口?

6
我希望能够通过传递参数来以静默模式运行应用程序,否则将显示窗口。
5个回答

13

ShowWindow(... SW_HIDE ...)不能正常工作?

在这里,最好的做法是一开始就不要创建窗口。在InitInstance中实际上没有强制你必须创建一个窗口。但如果你正在使用MFC,那么你的应用程序/领域/业务逻辑可能会与MFC消息处理程序等紧密耦合在一起,此时窗口将需要存在。


这是真的,它是一个传统应用程序的克隆,以适应类似但不同的需求。有太多与域逻辑相关的内容,我不想去碰它们,因为我肯定会把一切都搞砸。 - Brian T Hannan
2
我决定硬着头皮把大量代码移动了。最终,当输入参数为/silent时,我没有创建窗口。感谢你的激励! - Brian T Hannan

6
如果您有基于MFC的CWnd显示,可以使用CWnd::ShowWindow(SW_HIDE);
如果您仅使用Win32,则使用ShowWindow(hWnd, SW_HIDE);。
根据您的目标,其他人可能会采取以下措施:
使窗口非常小 将窗口移动到可见桌面区域之外。

3

首先,如果传入了这个参数,你可以决定不创建窗口。否则,你可以尝试使用窗口句柄和 SW_HIDE 参数调用ShowWindow函数,看看是否能达到你的需求。

另一种隐藏窗口但仍然创建它的方法是,在使用 CreateWindow/CreateWindowEx 创建窗口时,不在 dwStyle 参数中设置 WS_VISIBLE 标志,并且永远不要调用 ShowWindow 函数来隐藏它。


2

我认为更好的解决方案是在不需要时不创建窗口。 看一下主要函数,你会看到创建窗口的代码。 只有在想要启动窗口时才调用它。


我真的希望它是那么简单。 - Brian T Hannan
但是这只是如此。除非您有设计问题并且逻辑与视图混合在一起。 - Dig
这是具有设计问题的旧代码,逻辑肯定混杂在视图中。我想我可以将两者分开,但是那样需要进行完整的回归测试,而且事情肯定会出错。 - Brian T Hannan
1
如果您期望通过该窗口进行IPC消息传递,那怎么样呢?这不一定是最佳的IPC方式,但有一个有效的理由来拥有一个窗口而不需要显示它。 - Greg Domjan

1
创建窗口时,省略WS_VISIBLE标志并且不要调用ShowWindow函数。
或者
在调用showWindow()函数时,添加SW_HIDE参数。
ShowWindow(hWnd, SW_HIDE);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接