Текущий архив: 2006.05.28;
Скачать: CL | DM;
ВнизЗапуск/закрытие стороннего приложения Найти похожие ветки
← →
Ламот (2006-05-12 15:39) [0]Подскажите пож.
Запускаю стороннее приложение:
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 запущенной программы – разные вещи – тогда как быть?!
← →
Сергей М. © (2006-05-12 15:44) [1]
> подозреваю, что hProcess и HVND запущенной программы
Правильно подозреваешь.
Более того, "HVND запущенной программы" не имеет права на жизнь, поскольку у программы нет никаких HVND.
HWND может быть только у окна, которое возможно создала "программа", которая так же возможно создала более чем одно окно ..
← →
Ламот (2006-05-12 16:13) [2]2 Сергей М. © - sorry за опечатку, по сути - программа создает окно, причем только одно (чест. слово!)
Одновременно запущено несколько копий программы - в конкретном месте мне нужно удалить конкретную копию программы.
Вопрос: может запускать ее как-то по другому, чтоб можно было отследить HWND запускаемого?
← →
Сергей М. © (2006-05-12 16:18) [3]
> Одновременно запущено несколько копий программы
Проще не допустить это.
← →
Игорь Шевченко © (2006-05-12 16:18) [4]
> Вопрос: может запускать ее как-то по другому, чтоб можно
> было отследить HWND запускаемого?
FindWindow + GetWindowThreadProcessId + сравнение полученного ProcessId с ProcessId из CreateProcess. После этого можно посылать WM_CLOSE (через PostMessage), и WaitForSingleObject(hProcess, какое-то время)
← →
Ламот (2006-05-12 16:34) [5]2 Сергей М. © - неподходит!!!
2 Игорь Шевченко © - ПАСИБА! щас пробую... ))))
← →
Игорь Шевченко © (2006-05-12 16:58) [6]Ламот (12.05.06 16:34) [5]
Если несколько одинаковых окон (один класс окна, один заголовок), тогда лучше EnumWindows
← →
begin...end © (2006-05-12 17:03) [7]А если у процесса один поток (который в PROCESS_INFORMATION.dwThreadId), то EnumThreadWindows :)
Страницы: 1 вся ветка
Текущий архив: 2006.05.28;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.012 c