Проблема с shellexecute
От: DeusNoxious http://noxious.ru
Дата: 23.08.02 20:07
Оценка:
Всем привет!

Пытаюсь запустить программу в минимизированном виде:
   shellexecute(0,nil,'C:\WINDOWS\system32\calc.exe', '','',SW_MINIMIZE);//или SW_SHOWMINIMIZED или SW_SHOWMINNOACTIVE


запускается не минимизированно
пробую через createprocess:

var
   StartInfo   : TStartupInfo;
   ProcInfo    : TProcessInformation;
begin
   GetStartupInfo(StartInfo);
   StartInfo.wShowWindow := SW_SHOWMINNOACTIVE;//или SW_SHOWMINIMIZED или SW_SHOWMINNOACTIVE
   StartInfo.dwFlags:=STARTF_USESHOWWINDOW;
   CreateProcess(nil, 'C:\WINDOWS\system32\calc.exe', nil, nil, false, 0, nil, nil, StartInfo, ProcInfo);

тажа фигня.
Пишу в D5 under XP
Как же всё-таки запустить его минимизированно??
Re: Проблема с shellexecute
От: ua1zcl Россия www.alexklm.ru
Дата: 24.08.02 13:47
Оценка:
Здравствуйте DeusNoxious, Вы писали:

DN>Всем привет!


DN>Пытаюсь запустить программу в минимизированном виде:

DN>
DN>   shellexecute(0,nil,'C:\WINDOWS\system32\calc.exe', '','',SW_MINIMIZE);//или SW_SHOWMINIMIZED или SW_SHOWMINNOACTIVE
DN>


DN>запускается не минимизированно

DN>пробую через createprocess:

DN>
DN>var
DN>   StartInfo   : TStartupInfo;
DN>   ProcInfo    : TProcessInformation;
DN>begin
DN>   GetStartupInfo(StartInfo);
DN>   StartInfo.wShowWindow := SW_SHOWMINNOACTIVE;//или SW_SHOWMINIMIZED или SW_SHOWMINNOACTIVE
DN>   StartInfo.dwFlags:=STARTF_USESHOWWINDOW;
DN>   CreateProcess(nil, 'C:\WINDOWS\system32\calc.exe', nil, nil, false, 0, nil, nil, StartInfo, ProcInfo);
DN>

DN>тажа фигня.
DN>Пишу в D5 under XP
DN>Как же всё-таки запустить его минимизированно??

Если программа так решила то ничего не поделаешь. Редактировать код этой програмы надо.
Александр
Re[2]: Проблема с shellexecute
От: DeusNoxious http://noxious.ru
Дата: 24.08.02 21:04
Оценка:
Здравствуйте ua1zcl, Вы писали:

U>Если программа так решила то ничего не поделаешь. Редактировать код этой програмы надо.

Видимо так :((
Некторые программы правильно запускаются, как им и было сказано.
Хотя есть тому же калькулятору потом послать WM_MINIMIZE, то он всё делает беспрекословно.
Отсель вытекает следующий вопрос:
как отправить сиё сообщение звежезапущенному приложению?
ShellExecute возвращает только свой код возврата,
CreateProcess — hProcess, hThread, dwProcessId, dwThreadId.
Как получить HWND главного окна?
Перебирать все окна и сравнивать hProcess ооочень не хочется.....
:???:
Re[3]: Проблема с shellexecute
От: Алекс Россия http://wise-orm.com
Дата: 25.08.02 04:18
Оценка:
Здравствуйте DeusNoxious, Вы писали:

DN>Здравствуйте ua1zcl, Вы писали:


U>>Если программа так решила то ничего не поделаешь. Редактировать код этой програмы надо.

DN>Видимо так (
DN>Некторые программы правильно запускаются, как им и было сказано.
DN>Хотя есть тому же калькулятору потом послать WM_MINIMIZE, то он всё делает беспрекословно.
DN>Отсель вытекает следующий вопрос:
DN>как отправить сиё сообщение звежезапущенному приложению?
DN>ShellExecute возвращает только свой код возврата,
DN>CreateProcess — hProcess, hThread, dwProcessId, dwThreadId.
DN>Как получить HWND главного окна?
DN>Перебирать все окна и сравнивать hProcess ооочень не хочется.....
DN>

если твое окно стопроцентно становиться активным — GetGUIThreadInfo()
Re[4]: Проблема с shellexecute
От: ua1zcl Россия www.alexklm.ru
Дата: 25.08.02 05:29
Оценка:
Здравствуйте Алекс, Вы писали:

А>Здравствуйте DeusNoxious, Вы писали:


DN>>Здравствуйте ua1zcl, Вы писали:



А>если твое окно стопроцентно становиться активным — GetGUIThreadInfo()


GetGUIThreadInfo() не будет работать в Windows < W98.
Попробуйте послать сообщение после CreateProcess:
PostThreadMessage(ProcInfo->dwThreadId,WM_SYSCOMMAND,SC_MINIMIZE,0);
Последний параметр (координаты окна) нам пока неизвестен, но для пробы ноль послать можно.
Александр
Re[5]: Проблема с shellexecute
От: Алекс Россия http://wise-orm.com
Дата: 25.08.02 06:36
Оценка:
Здравствуйте ua1zcl, Вы писали:

U>Здравствуйте Алекс, Вы писали:


А>>Здравствуйте DeusNoxious, Вы писали:


DN>>>Здравствуйте ua1zcl, Вы писали:



А>>если твое окно стопроцентно становиться активным — GetGUIThreadInfo()


U>GetGUIThreadInfo() не будет работать в Windows < W98.


тогда GetForegroundWindow()
Re[5]: Проблема с shellexecute
От: Аноним  
Дата: 25.08.02 08:10
Оценка:
А>>если твое окно стопроцентно становиться активным — GetGUIThreadInfo()

U>GetGUIThreadInfo() не будет работать в Windows < W98.

U>Попробуйте послать сообщение после CreateProcess:
PostThreadMessage(ProcInfo->>dwThreadId,WM_SYSCOMMAND,SC_MINIMIZE,0);
U>Последний параметр (координаты окна) нам пока неизвестен, но для пробы ноль послать можно.

Не работает.
В цикле делаю PostThreadMessage пока не вернёт True. True возвращает, но окно не минимизируется и GetLastError говорит 'Invalid Thread identifier'...
Re[4]: Проблема с shellexecute
От: Аноним  
Дата: 25.08.02 08:34
Оценка:
А>если твое окно стопроцентно становиться активным — GetGUIThreadInfo()
Насколько я понимаю, активным окно должно быть, только если в idThread передавать NULL. А если передавать ThreadProcessId, то имхо,
это не важно.
Она отрабатывает ОК, но в GUITHREADINFO возвращаются нули....
Re: Проблема с shellexecute
От: DeusNoxious http://noxious.ru
Дата: 27.08.02 13:50
Оценка: 6 (1)
Стал пробовать перебирать окна.

Для процесса SciCalc GetWindowThreadProcessId возвращает 588(DEC).
А CreateProcess в TProcessInformation возвращает:
ProcInfo.hProcess:=1932
ProcInfo.hThread:=1932
ProcInfo.dwProcessId:=1932
ProcInfo.dwThreadId:=1932

Чего то я не понимаю.... :???: :???: :???:
Re[2]: Проблема с shellexecute
От: ua1zcl Россия www.alexklm.ru
Дата: 03.08.08 07:54
Оценка:
Здравствуйте, DeusNoxious, Вы писали:

DN>Чего то я не понимаю....


Ответа на этот вопрос я тоже пока не нашел, за что и поздравляю Вас как победителя, вопрос что называется — на засыпку!
Александр
Re: Проблема с shellexecute
От: x64 Россия  
Дата: 03.08.08 12:45
Оценка:
Пиши DLL и вешай хук через SetWindowsHookEx(), это по крайне мере документированный путь, в отличие от тех грязнохаков, которые тут предлагаются.
Re: Проблема с shellexecute
От: Аноним  
Дата: 03.08.08 13:03
Оценка: 3 (1)
DN>тажа фигня.
DN>Пишу в D5 under XP
DN>Как же всё-таки запустить его минимизированно??
Процесс не может быть минимизированным. Минимизированным бывает только окно. Окон у процесса может не быть, может быть, может быть иногда, может быть много. Окно создается приожением гдето во время работы, а не при создании процесса.
То что передается в ShellExecute это лишь хинт запускаемому приложению. Это значит что приложение перед созданием окна должно позвать GetStartupInfo и создать окно с теми флагами что вы попросили. Вы делаете так в своих оконных приложениях? Вот и авторы калькулятора значит не сделали и ваш SW_MINIMIZE никто и не смотрит просто. Единственный выход — дожидаться пока приложение создаст окно и минимизировать его явно послав ему WM_SYSCOMMAND, SC_MINIMIZE например. Но сколько ждать появления окна и вообще появиться ли окно — никто не скажет.
Re[2]: Проблема с shellexecute
От: Аноним  
Дата: 03.08.08 13:09
Оценка:
DN>Для процесса SciCalc GetWindowThreadProcessId возвращает 588(DEC).
DN>А CreateProcess в TProcessInformation возвращает:
DN>ProcInfo.hProcess:=1932
DN>ProcInfo.hThread:=1932
DN>ProcInfo.dwProcessId:=1932
DN>ProcInfo.dwThreadId:=1932
DN>Чего то я не понимаю....
у вас гдето ошибка.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.