Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.045 c
2-1147193334
BAngel
2006-05-09 20:48
2006.05.28
свой указатель мышки


2-1147263208
VOIDER
2006-05-10 16:13
2006.05.28
вызов процедуры из dpr


15-1146423589
Yanis
2006-04-30 22:59
2006.05.28
Какие могут быть траблы?


1-1145370011
Darvin
2006-04-18 18:20
2006.05.28
Отловить изменение текстовых свойств компонента


15-1146634114
fast2
2006-05-03 09:28
2006.05.28
Как избавится от постоянно всплывающих окон?




   Наверх