Сейчас на форуме: r0lka, yashechka (+5 невидимых)

 eXeL@B —› Крэки, обсуждения —› Получение PID в Delphi
Посл.ответ Сообщение


Ранг: 138.1 (ветеран)
Активность: 0.090
Статус: Участник
Одепт ЭкзэЛаба

Создано: 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.290
Статус: Участник

Создано: 07 января 2006 00:42
· Личное сообщение · #2

g-l-u-k пишет:
wh:=findwindowex(0,0,0,pchar(edit1.text));


FindWindowEx юзается для поиска дочерних окон по хэндлу родительского окна, юзай FindWindow уж тогда..




Ранг: 122.3 (ветеран)
Активность: 0.050
Статус: Участник

Создано: 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.290
Статус: Участник

Создано: 07 января 2006 00:53
· Личное сообщение · #4

intty пишет:
тебе нужно запустить exe файл?

Гы, я просмотрел про запуск файла А поиск процесса по окну действительно не очень хороший вариант..



Ранг: 35.7 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 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.090
Статус: Участник

Создано: 08 января 2006 02:01
· Личное сообщение · #6

Вообще ответ можно нарыть на www.delphiworld.narod.ru
Ну например видел статью: delphiworld.narod.ru/base/kill_nt_task.html

-----
Никто не знает столько, сколько не знаю я




Ранг: 21.2 (новичок)
Активность: 0.010
Статус: Участник

Создано: 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.090
Статус: Участник
Одепт ЭкзэЛаба

Создано: 09 января 2006 15:00
· Личное сообщение · #8

Всем огромное спасибо,я уже разобрался что к чему.Оказывается огда читаешь справку много узнаешь


 eXeL@B —› Крэки, обсуждения —› Получение PID в Delphi
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати