我的程序(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