Изменить размер и изменить положение приложения, созданного с помощью createprocess? - PullRequest
1 голос
/ 12 декабря 2011

Я выполняю приложение, скажем, блокнот, используя createprocess.

Мне нужно переопределить размер и позицию по умолчанию для этого приложения, поэтому я изменил STARTUPINFO и указал dwX, dwY, dwYSize, dwXSize и добавил STARTF_USEPOSITION || STARTF_USESIZE для dwFlags.

Но приложение вообще не открывается.
Если я поставлю одну из STARTF_USEPOSITION и STARTF_USESIZE, приложение откроется, но не будет перемещено или изменено в размерах.

Есть ли в любом случае это сделать ??

{
STARTUPINFO         siStartupInfo;
PROCESS_INFORMATION piProcessInfo;


memset(&siStartupInfo, 0, sizeof(siStartupInfo));
memset(&piProcessInfo, 0, sizeof(piProcessInfo));

siStartupInfo.cb = sizeof(siStartupInfo);
siStartupInfo.dwFlags = STARTF_USEPOSITION|STARTF_USESIZE;//||STARTF_USESHOWWINDOW;
siStartupInfo.wShowWindow=SW_SHOWDEFAULT;
siStartupInfo.dwX=900;
siStartupInfo.dwY=300;
siStartupInfo.dwXSize=1000;
siStartupInfo.dwYSize=1000;

if(CreateProcess("H:\\WINXP\\system32\\notepad.exe",     // Application name
                 NULL ,                 // Application arguments
                 0,
                 0,
                 FALSE,
                 NORMAL_PRIORITY_CLASS,
                 0,
                 0,                              // Working directory
                 &siStartupInfo,
                 &piProcessInfo) )
    printf("Sucessful\n");
else
    printf("Error");
}

Ответы [ 2 ]

3 голосов
/ 12 декабря 2011

Приложение может игнорировать все данные в STARTUPINFO или использовать только wShowWindow.

Вы можете попробовать использовать WaitForInputIdle, затем FindWindow, а затем SetWindowPos.

0 голосов
/ 12 декабря 2011

Кажется, что блокнот не использует GetStartupInfo() для чтения STARTUPINFO, переданного при его создании.Что-то, что я сделал в прошлом, чтобы обойти это, - передать действительные значения PROCESS_INFORMATION на CreateProcess.

. После этого вы сможете получить PID созданного процесса.Затем вы можете опросить с EnumWindows и GetWindowThreadProcessId, пока не найдете окно.Это более точно, чем FindWindow, что потенциально может совпасть с другими экземплярами блокнота.

...