3

Explorer 似乎总是用SW_MAXIMIZE(STARTF_USESHOWWINDOW设置在STARTUPINFO.dwFlags) 启动我的应用程序。我知道当你/Windows第一次需要显示一个窗口时ShowWindow会使用这个值,但它的不幸后果是最大化一个永远不应该被最大化的窗口。

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

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

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

system32 中的 WinVer.exe 也有同样的问题: 在此处输入图像描述

4

2 回答 2

2

My first thought was to turn off STARTF_USESHOWWINDOW in the PEB if the parent wanted me to start maximized but that is too nasty and undocumented so I have not tried that yet.


Preventing any kind of size change (which is OK for my application since it is just a "modal" dialog) sort of works:

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

The problem is that the window position is still set to 0 x 0 like a maximized window.


A better solution seems to be to detect and correct the problem after WM_INITDIALOG:

case WM_INITDIALOG:
  PostMessage(hDlg, WM_APP, 0, 0);
  break;
case WM_APP:
  if (IsZoomed(hDlg)) ShowWindow(hDlg, SW_SHOWNOACTIVATE);
  break;
于 2015-03-08T19:21:12.530 回答
0

我是几款 HP Stream 7 平板电脑的骄傲拥有者,我想在这里加我的 2 美分。微软做出了一个武断的决定,即屏幕尺寸小于 8 英寸的设备的行为将与标准不同。许多用户对此有所了解,但没有意识到这是您的问题的根源。

Windows 通过从屏幕读取 EDID 信息来确定屏幕的大小,其中包含大小信息,以厘米为单位。

如果 EDID 中没有尺寸信息,或者尺寸信息低于 Microsoft 任意选择的 8 英寸阈值,那么您会得到这种明显的不当行为,这至少会激怒那些注意到它并且不想要它的人。

解决方案是在设备管理器中使用通知 Windows 屏幕实际上是 8 英寸或更大的监视器覆盖默认驱动程序。

为此,您需要首先使用诸如 Deltacast 的 E-EDID 编辑器(免费,我上次检查)之类的工具从注册表中读取 EDID 信息,然后修改大小值并将修改后的文件保存在您可以找到的地方。

修改并保存 EDID 文件后,从 EnTech 下载 Monitor Asset Manager(也是免费的)并使用它来创建 INF 文件。

创建 INF 文件后,您需要使用高级设置菜单重新启动 Windows 并选择禁用驱动程序签名强制,因为您创建的 INF 文件不会进行数字签名。禁用后,在 Windows 中打开设备管理器并使用您创建的 INF 文件更新显示器的驱动程序。您需要确认您确实想要安装未签名的驱动程序文件。

重新启动,Windows 现在将正常运行,但屏幕键盘现在将显示不同的大小,并且将有更多可用选项。

可悲的是,微软可以在未来改变这种行为,所以不能保证通过他们最初用来实现这一点的同样有缺陷的决策过程,他们不会再次强迫我们这样做,使用更困难的来抵消方法。

于 2016-01-05T05:32:08.443 回答