Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.48 MB
Время: 0.062 c
2-1147288748
zxcv
2006-05-10 23:19
2006.05.28
hex editor


2-1147432717
Andrey235
2006-05-12 15:18
2006.05.28
работа приложения в DOS e


15-1146722158
MrShadow_
2006-05-04 09:55
2006.05.28
Электронный справочник по Delphi


15-1146632993
Палтус
2006-05-03 09:09
2006.05.28
Browser Helper Object


15-1146597572
kilonet
2006-05-02 23:19
2006.05.28
Перевод книги в электронный формат