2015-03-08 76 views
2

資源管理器似乎總是以SW_MAXIMIZESTARTF_USESHOWWINDOW設置在STARTUPINFO.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(或任何其他父進程)影響我的初始窗口模式的最佳方法是什麼? (我不想阻止人們開始我SW_*MINIMIZE*

WINVER.EXE system32中有同樣的問題: enter image description here

+0

你確定你直接點擊實際的.exe,而不是在具有**「Run:maximized」**設置的快捷方式上? – 2015-03-08 20:58:09

+0

@RemyLebeau是的,我直接雙擊.exe。即使這是一個快捷方式,我的主要問題仍然適用,我如何防止第一次調用ShowWindow以最大化沒有設置WS_MAXIMIZEBOX的窗口? – Anders 2015-03-08 21:58:10

+0

'cmd.exe/c start/MAX c:\ myapp.exe'也有同樣的問題... – Anders 2015-03-08 22:03:54

回答

2

我首先想到的是在PEB關閉STARTF_USESHOWWINDOW如果父母想要我開始最大化,但這是太討厭和無證,所以我還沒有嘗試過。


防止任何類型的尺寸變化(這是我的應用程序確定,因爲它僅僅是一個「模式」對話框)排序作品:

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; 
+0

修改PEB似乎不起作用,也許內核方有它自己的STARTUPINFO副本... – Anders 2015-03-13 17:43:32

0

我的幾個HP流7片驕傲的主人,我想在這裏補充我的2美分。微軟已經作出任意決定,屏幕尺寸小於8英寸的設備的行爲將與標準不同。很多用戶都知道這一點,但並不知道這是您的問題發源地。

Windows通過以釐米爲單位從屏幕上讀取EDID信息來確定屏幕尺寸,其中包含尺寸信息。

如果在EDID中沒有尺寸信息,或者尺寸信息低於微軟任意選擇的8英寸閾值,那麼您至少會看到這種明顯的不當行爲,對那些注意到它並且不想要的人感到憤怒它。

解決方法是在設備管理器中覆蓋顯示器的默認驅動程序,並通知Windows該屏幕實際上爲8英寸或更大。

爲此,您需要先使用Deltacast的E-EDID編輯器(免費,上次檢查時)從註冊表中讀取EDID信息,然後修改大小值並將修改後的文件保存在某個位置可以找到它。

修改EDID文件並保存後,從EnTech下載Monitor Asset Manager(也是免費的),並使用它創建INF文件。

創建INF文件後,您需要使用高級設置菜單重新啓動Windows,並選擇禁用驅動程序簽名實施,因爲您創建的INF文件不會進行數字簽名。禁用後,打開Windows中的設備管理器,並使用您創建的INF文件更新顯示器的驅動程序。您需要確認您確實需要安裝未簽名的驅動程序文件。

重新啓動和Windows現在可以正常運行,屏幕鍵盤現在將顯示不同的大小,並且將提供更多選項。不幸的是,微軟可以在將來改變這種行爲,所以我們不能保證通過他們曾經實施過的同樣有缺陷的決策過程來實現這一點,他們不會再次強迫我們的喉嚨,使用更難以抵消的方法。

相關問題