![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Запуск/закрытие стороннего приложения
Ламот © (2006-05-12 15:39:00)Подскажите пож.
Запускаю стороннее приложение:
Var Reg:Tregistry;
s:tstrings;
i:integer;
si:STARTUPINFO;
DopPrg:PROCESS_INFORMATION;
Path1S:string;
…
ZeroMemory(@si,sizeof(si));
si.cb:=SizeOf(si);
Reg:=TRegistry.Create;
s:=tstringlist.Create;
reg.RootKey:=HKEY_LOCAL_MACHINE;
reg.OpenKeyReadOnly('\Software\init\Param\');
reg.GetValueNames(s);
for i:=0 to s.Count-1 do
if s.Strings[i]='My program' then
Path1S:=reg.ReadString(s.Strings[i]);
s.Clear;
reg.Free;
CreateProcess( nil,PChar(Path1S),nil,nil,False,0,nil,nil,si,DopPrg);
…
Дальше какие-то действия и по итогу – пытаюсь закрыть запущенную ранее прогр.:
SendMessage(DopPrg.hProcess,WM_CLOSE,0,0);
или
PostMessage(DopPrg.hProcess,WM_CLOSE,0,0);
Не то и не то – не закрывает… я так подозреваю, что hProcess и HVND запущенной программы – разные вещи – тогда как быть?!
begin...end (2006-05-12 17:03:00) [1]А если у процесса один поток (который в PROCESS_INFORMATION.dwThreadId), то EnumThreadWindows :)
Игорь Шевченко (2006-05-12 16:58:00) [2]Ламот (12.05.06 16:34) [5]
Если несколько одинаковых окон (один класс окна, один заголовок), тогда лучше EnumWindows
Ламот (2006-05-12 16:34:00) [3]2 Сергей М. © - неподходит!!!
2 Игорь Шевченко © - ПАСИБА! щас пробую... ))))
Сергей М. (2006-05-12 16:18:00) [4]
> Одновременно запущено несколько копий программы
Проще не допустить это.
Игорь Шевченко (2006-05-12 16:18:00) [5]
> Вопрос: может запускать ее как-то по другому, чтоб можно
> было отследить HWND запускаемого?
FindWindow + GetWindowThreadProcessId + сравнение полученного ProcessId с ProcessId из CreateProcess. После этого можно посылать WM_CLOSE (через PostMessage), и WaitForSingleObject(hProcess, какое-то время)
Ламот (2006-05-12 16:13:00) [6]2 Сергей М. © - sorry за опечатку, по сути - программа создает окно, причем только одно (чест. слово!)
Одновременно запущено несколько копий программы - в конкретном месте мне нужно удалить конкретную копию программы.
Вопрос: может запускать ее как-то по другому, чтоб можно было отследить HWND запускаемого?
Сергей М. (2006-05-12 15:44:00) [7]
> подозреваю, что hProcess и HVND запущенной программы
Правильно подозреваешь.
Более того, "HVND запущенной программы" не имеет права на жизнь, поскольку у программы нет никаких HVND.
HWND может быть только у окна, которое возможносоздала "программа", которая так же возможносоздала более чем одно окно ..