| Посл.ответ | 
Сообщение | 
  Ранг: 138.1 (ветеран) Активность: 0.09↘0 Статус: Участник Одепт ЭкзэЛаба 
 
 | 
Создано: 07 января 2006 00:31   · Личное сообщение ·  #1 
Доброго времени суток.
 Мой вопрос заключается в следующем, есть некий *.exe файл, мне нужно запустить и затем получить Process ID запущенного процесса. Как это можно сделать? Чтобы получить PID, я делал так:
 Var
 Wh,pid,ph:integer;
 ……
 Begin
 wh:=findwindowex(0,0,0,pchar(edit1.text));
 pid:=getwindowthreadprocessid(wh,@pid);
 ph:=OpenProcess(PROCESS_VM_READ,false,pid);
 closehandle(wh); 
Пытался сделать так, но ничего не вышло:
 Var
 Wh,pid,ph:integer;
 H:Thandle;
 ……
 Begin
 H:=createfile(pchar(editFileName.text),GENERIC_READ,0,nil,OPEN_EXISTIN G,0,0);
 wh:=findwindowex(0,0,0,pchar(h));
 pid:=getwindowthreadprocessid(wh,@pid);
 ph:=OpenProcess(PROCESS_VM_READ,false,pid);
 closehandle(wh);
Помогите разобраться в чём ошибка.
   | Сообщение посчитали полезным:  | 
 | 
  Ранг: 1288.1 (!!!!), 273thx Активность: 1.29↘0 Статус: Участник 
 
 | 
Создано: 07 января 2006 00:42   · Личное сообщение ·  #2 
g-l-u-k пишет:
 wh:=findwindowex(0,0,0,pchar(edit1.text)); 
FindWindowEx юзается для поиска дочерних окон по хэндлу родительского окна, юзай FindWindow уж тогда..
   | Сообщение посчитали полезным:   | 
  Ранг: 122.3 (ветеран) Активность: 0.05↘0 Статус: Участник 
 
 | 
Создано: 07 января 2006 00:45 · Поправил: intty   · Личное сообщение ·  #3 
не очень корректно вопрос задан.
 тебе нужно запустить exe файл?
 BOOL CreateProcess(
   LPCTSTR lpApplicationName,
   LPTSTR lpCommandLine,
   LPSECURITY_ATTRIBUTES lpProcessAttributes,
   LPSECURITY_ATTRIBUTES lpThreadAttributes,
   BOOL bInheritHandles,
   DWORD dwCreationFlags,
   LPVOID lpEnvironment,
   LPCTSTR lpCurrentDirectory,
   LPSTARTUPINFO lpStartupInfo,
   LPPROCESS_INFORMATION lpProcessInformation
 );
обрати внимание на последний параметр, это указатель на структуру, куда вернется информация о созданном процессе, процесс ид в том числе, подробности смотри в msdn, platform SDK, msdn.microsoft.com.. etc.
 если же нужно получить процесс ид уже запущенного процесса, то можно воспользоваться функциями:
 CreateToolhelp32Snapshot получишь слепок всех процессов потом Process32First и Process32Next, пока pe32.szExeFile не будет равна имени твоего екзе на диске, где pe32 - структура типа PROCESSENTRY32
 в общем применое направление таково, куда копать понятно,  дальще разжовывать вломы
   | Сообщение посчитали полезным:  | 
  Ранг: 1288.1 (!!!!), 273thx Активность: 1.29↘0 Статус: Участник 
 
 | 
Создано: 07 января 2006 00:53   · Личное сообщение ·  #4 
intty пишет:
 тебе нужно запустить exe файл? 
Гы, я просмотрел про запуск файла    А поиск процесса по окну действительно не очень хороший вариант..
   | Сообщение посчитали полезным:   | 
 Ранг: 35.7 (посетитель) Активность: 0.02↘0 Статус: Участник 
 
 | 
Создано: 08 января 2006 00:52   · Личное сообщение ·  #5 
g-l-u-k
Скачай библиотеку adv_api_hook, Ms-Rem'a с сайта www.ms-rem.dot-link.net/ <--. Там есть такая функция как GetProcessId, очень удобно ее использовать в твоем случае.
   | Сообщение посчитали полезным:   | 
  Ранг: 110.0 (ветеран), 1thx Активность: 0.09↘0 Статус: Участник 
 
 | 
Создано: 08 января 2006 02:01   · Личное сообщение ·  #6 
Вообще ответ можно нарыть на www.delphiworld.narod.ru
 Ну например видел статью: delphiworld.narod.ru/base/kill_nt_task.html
 ----- Никто не знает  столько, сколько не знаю я  | Сообщение посчитали полезным:  | 
 Ранг: 21.2 (новичок) Активность: 0.01↘0 Статус: Участник 
 
 | 
Создано: 08 января 2006 17:36   · Личное сообщение ·  #7 
GetWindowModuleFileName(HWND hwnd,tchar* buff,DWORD buff_max) - имя exe-файла проги.
 DWORD GetWindowThreadProcessId(HWND hWnd,	DWORD* ProcessId) - результат: TID и PID.
 Не самый плохой вариант, но для поиска hwnd можно написать свою функцию (с использованием EnumWindows,EnumChildWindows), тогда можно найти окно с изменяющимся заголовком, даже если неизвестен класс окна). Правда если сам запускаешь процесс, то лучше использовать CreateProcess.
   | Сообщение посчитали полезным:  | 
  Ранг: 138.1 (ветеран) Активность: 0.09↘0 Статус: Участник Одепт ЭкзэЛаба 
 
 | 
Создано: 09 января 2006 15:00   · Личное сообщение ·  #8 
Всем огромное спасибо,я уже разобрался что к чему.Оказывается огда читаешь справку много узнаешь  
  | Сообщение посчитали полезным:  |