我的程序(C#)是一個任務欄,並且在其菜單中我可以啓動應用程序,兼容XP到8.1。我想用特定的窗口大小啓動任何應用程序,因爲很少有應用程序(OpenOffice,LibreOffice ...)在第一次啓動時就開始變平。以編程方式將特定大小設置爲應用程序窗口
我已經測試,以最大限度地利用這一窗口ShellExecute與ShowCommands.SW_MAXIMIZE參數:
ShellExecute(IntPtr.Zero, "open", executablePath, executableParam, "", ShowCommands.SW_MAXIMIZE);
但是當我點擊該窗口中的「恢復」按鈕,出現同樣的問題,窗口被夷爲平地。
儘管「還原」大小未通過手動調整大小進行配置,但所用值是特定於每個應用程序的。
相反的ShellExecute,我用CreateProcess指定大小:
const uint NORMAL_PRIORITY_CLASS = 0x0020;
STARTUPINFO si = new STARTUPINFO();
si.dwY = 50;
si.dwX = 50;
si.dwXSize = 200;
si.dwYSize = 800;
si.dwFlags = 0x00000006; //STARTF_USESIZE + STARTF_USEPOSITION
PROCESS_INFORMATION pi = new PROCESS_INFORMATION();
CreateProcess(programPath, programParams, IntPtr.Zero, IntPtr.Zero, true, NORMAL_PRIORITY_CLASS, IntPtr.Zero, null, ref si, out pi);
但是有一個問題,我們可以啓動與文件 - >新建一個其他的OpenOffice/LibreOffice的過程 - > ...在這種如果應用程序不是由我的程序啓動的,所以我的默認大小不適用。
我以前和更改此值後,檢查Windows註冊表中,兩個鍵被改變:
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpenSavePidlMRU\reg]
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist\{CEBFF5CD-ACE2-4F4F-9178-9926F41749EA}\Count]
這些鍵包含六值(第一密鑰):
前:
"MRUListEx"=hex:00,00,00,00,04,00,00,00,01,00,00,00,05,00,00,00,03,00,00,00,02,\00,00,00,ff,ff,ff,ff
之後:
"MRUListEx"=hex:01,00,00,00,00,00,00,00,04,00,00,00,05,00,00,00,03,00,00,00,02,\00,00,00,ff,ff,ff,ff
這對我來說是不可理解的,所以我仍然在搜索是否存在一種編程方式,以將程序的特定窗口大小/所有應用程序或其他規範設置到Windows註冊表中。我不是在尋找解決方案來調整或移動已啓動的窗口,如SetWindowPos。
但很多網站解釋這裏只有一個解決方案來定義窗口的大小:「在拖動窗口的大小,然後關閉窗口,並重新啓動」
http://help.wfu.edu/public/computers/standard-load-software/windows-7---set-default-window-size http://www.tomshardware.co.uk/forum/28659-45-change-default-window-size
這個答案是最後解決方案還是有一種方法來編程?
在此先感謝。
編輯:
事實上,在恢復窗口時,我調整僅在第一次直到用戶殺死它。 我的程序將每個窗口的句柄保存在一個布爾值初始化爲false的對象中,以指定我的窗口是否已被調整大小。我使用GetForegroundWindow然後GetWindowPlacement我檢查是否WINDOWPLACEMENT .flags == WindowPlacementFlag.WPF_NONE,如果我的布爾值總是egals爲false,那麼我使用GetWindowRect和SetWindowPos設置具有相同位置的特定大小並將我的布爾值賦給true。
我認爲這是一個很好的解決方案,但我失去用戶保存的位置(我可以做到這一點時,窗口的大小是根據一個特定的值,但仍存在問題),我們看到的大小調整...
每個應用程序都以自己的方式決定如何定位其窗口。重申申請的決定沒有標準。 –
這就是我害怕的。感謝您的回答。 – OhMyGeo