SW_MAXIMIZED和无法最大化的应用

时间:2014-01-18 00:04:18

标签: windows winapi shell32

我正在使用ShellExecuteEx从我自己的应用程序启动应用程序。我的应用程序的一个特点就是允许它启动的应用程序在打开时最大化... 99%的时间工作正常,因为我可以将SW_SHOWMAXIMIZED标志添加到SHELLEXECUTEINFO结构中的nShow字段。

现在,有些应用程序不允许自己最大化(标题栏区域中的最大化按钮显示为灰色)。在这组应用程序中,有些应用程序(如calc.exe)将忽略SW_MAXIMIZE标志并以默认大小启动。不幸的是,其他应用程序 - 例如charmap.exe - 无论如何都设法打开最大化(并因此而看起来很奇怪)。

我正在试图决定是否(1)这是我必须忍受的那些特定应用程序中的错误,(2)我可以做些更好的事情来阻止这种情况发生,或者(3)我需要来一些非明显的解决方法。任何帮助表示赞赏。

   SHELLEXECUTEINFO info = { 0 };

   info.cbSize = sizeof(SHELLEXECUTEINFO);
   info.lpVerb = L"open";
   info.lpFile = appPathEx.c_str();
   info.nShow = SW_SHOWMAXIMIZED;
   info.fMask = SEE_MASK_DOENVSUBST |
                SEE_MASK_FLAG_NO_UI;

   BOOL ok = ShellExecuteEx(&info);

1 个答案:

答案 0 :(得分:0)

MSDN:ShowWindow

  

如nCmdShow参数的讨论中所述,如果启动应用程序的程序在结构中指定启动信息,则在第一次调用ShowWindow时将忽略nCmdShow值。

但许多程序员不了解这个功能,所以这是这些应用程序中的一个错误。