Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Запуск/закрытие стороннего приложения


Ламот ©   (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 может быть только у окна, которое возможносоздала "программа", которая так же возможносоздала более чем одно окно ..


Наверх

Титульная страница Поиск, карта сайта Написать письмо