2014-01-15 5 views
0

내 프로그램 (C#)은 작업 표시 줄이며 해당 메뉴에서 호환 가능한 XP를 8.1로 시작할 수 있습니다. 특정 응용 프로그램 (OpenOffice, LibreOffice ...)이 처음 시작할 때 평평하게 시작하는 응용 프로그램이 거의 없기 때문에 특정 창 크기의 응용 프로그램을 시작하고 싶습니다.특정 크기를 응용 프로그램의 창에 프로그래밍 방식으로 설정하십시오.

ShellExecute(IntPtr.Zero, "open", executablePath, executableParam, "", ShowCommands.SW_MAXIMIZE); 

을하지만 윈도우의 "복원"버튼을 클릭하면, 윈도우가 평평 같은 문제가 :

나는 ShowCommands.SW_MAXIMIZE 매개 변수 ShellExecute이 창을 최대화하기 위해 테스트했습니다.

"복원 된"크기는 수동 크기 조정으로 구성되지 않지만 사용 된 값은 각 응용 프로그램마다 다릅니다.

대신 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); 

를하지만 한 가지 문제가있다, 우리는 파일 -> 새와 함께 다른 오픈 오피스/LibreOffice와 프로세스를 시작할 수 있습니다 -> ...이에서 내 기본 크기가 적용되지 않도록 응용 프로그램이 내 프로그램에서 실행되지 않는 경우

내가 전에이 값을 변경 한 후 Windows 레지스트리를 확인했지만, 두 개의 키가 변경됩니다

전에 :

"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 

[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: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

이 답변은 최종 솔루션을 사용하거나 프로그래밍 방식으로 수행하는 방법이 있습니까?

미리 감사드립니다.

편집 : 윈도우가 복원 될 때 사용자가 죽일 때까지

는 사실, 내가 처음에만 크기를 조정합니다. 내 프로그램은 모든 윈도우의 핸들을 boolean으로 객체에 유지하여 false로 초기화하여 내 윈도우의 크기를 조정했는지 여부를 지정합니다. 나는 GetForegroundWindow을 사용한 다음 GetWindowPlacement을 사용합니다. WINDOWPLACEMENT .flags가 == WindowPlacementFlag.WPF_NONE인지 확인합니다.이 경우 부울 값이 항상 false 인 경우 GetWindowRect 및 SetWindowPos를 사용하여 같은 크기의 특정 크기를 설정하고 내 부울을 true로 할당합니다.우리가 크기 조정을 본 내가 생각

좋은 솔루션입니다,하지만 사용자가 저장된 위치를 풀어 ... (윈도우의 크기가 특정 값에 따라하지만 여전히 문제는 때 나는 그것을 할 수 있습니다)

+1

각 응용 프로그램은 자체 방식으로 창 위치를 결정합니다. 응용 프로그램의 결정을 재정의하는 표준은 없습니다. –

+0

그건 내가 두려워하는거야. 귀하의 답변에 감사드립니다. – OhMyGeo

답변

0

이 문제는 대개 코더가 GetWindowPos을 사용하여 위치를 저장하지만 최소화 된 상태에서 창을 닫아서 작업 표시 줄에 숨겨진 작은 창으로 표시되기 때문에 발생합니다. 이것은 다음에 저장된 위치입니다. 올바른 방법은 GetWindowPlacement을 사용하여 위치를 저장하는 것입니다.

모든 최상위 창을 열거 할 수 있습니다. GetWindowPlacement을 확인하여 표시 및 복원되었지만 부적절한 크기 또는 위치 (예 : 화면이 너무 작음)가 있는지 확인하십시오. 그런 다음 SetWindowPlacement으로 전화하여 해당 창을 적절한 최소 크기의 화면으로 다시 이동할 수 있습니다.

다시 말해서 위치를 다시 저장하면 새로운 위치가 저장됩니다.

설문 조사를하지 마십시오. 대신 사용자가 필요할 때 실행할 수있는 유틸리티로 만드십시오. (예외 목록이 필요할 수도 있습니다. 일부 유틸리티는 의도적으로 화면을 벗어난 창을 만들 수 있습니다.)

+0

답변 해 주셔서 감사합니다. 내 게시물을 수정했습니다. 나는이 방법으로 거의 완벽한 솔루션을 사용한다. 어딘가에 기본값이 없다는 것이 유감입니다. – OhMyGeo