Посл.ответ |
Сообщение |
 Ранг: 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
Всем огромное спасибо,я уже разобрался что к чему.Оказывается огда читаешь справку много узнаешь
| Сообщение посчитали полезным: |