gpt4 book ai didi

windows - 如何停止资源管理器启动我的应用程序最大化?

转载 作者:可可西里 更新时间:2023-11-01 09:28:42 27 4
gpt4 key购买 nike

Explorer 似乎总是以 SW_MAXIMIZE 启动我的应用程序(STARTF_USESHOWWINDOWSTARTUPINFO.dwFlags 中设置)。我知道 ShowWindow 将使用此值 the first time你/Windows 需要显示一个窗口,但不幸的是,它最大化了一个不应该最大化的窗口。

我的窗口是使用 CreateDialogIndirectParam 创建的,并具有以下样式:WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX|WS_CLIPCHILDREN|DS_MODALFRAME|DS_CENTER|WS_VISIBLE。为什么 ShowWindow 在允许 STARTF_USESHOWWINDOW 强制 SW_MAXIMIZE 之前不检查是否设置了 WS_MAXIMIZEBOX?这是 Windows 中的错误吗?

这发生在装有 Windows 8.1 的 HP Stream 7 上。我不确定 Explorer 这样做是因为它启用了触摸功能还是因为它的屏幕太小。

这个 Explorer 行为是否在任何地方都有记录,是否有办法将其关闭?阻止资源管理器(或任何其他父进程)影响我的初始窗口模式的最佳方法是什么? (我不想阻止人们以 SW_*MINIMIZE* 开头)

system32中的WinVer.exe也有同样的问题: enter image description here

最佳答案

我的第一个想法是在 PEB 中关闭 STARTF_USESHOWWINDOW 如果 parent 希望我开始最大化,但那太讨厌而且没有记录,所以我还没有尝试过。


防止任何类型的大小更改(这对我的应用程序来说是可以的,因为它只是一个“模态”对话框)的工作:

case WM_WINDOWPOSCHANGING:
((WINDOWPOS*)lp)->flags |= SWP_NOSIZE;
return true;

问题是窗口位置仍然像最大化窗口一样设置为 0 x 0。


更好的解决方案似乎是在 WM_INITDIALOG 之后检测并更正问题:

case WM_INITDIALOG:
PostMessage(hDlg, WM_APP, 0, 0);
break;
case WM_APP:
if (IsZoomed(hDlg)) ShowWindow(hDlg, SW_SHOWNOACTIVATE);
break;

关于windows - 如何停止资源管理器启动我的应用程序最大化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28930582/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com