PDA

Просмотр полной версии : Реакция на процесс


SultanOFF
12.04.2010, 20:32
Здравствуйте. Мне нужно отследить появление нового процесса. Если появился процесс под именем xxx то допустим Моя прога делает тотото. Как можно такое сделать? Обьясните пожалуйста :)

LMaster
12.04.2010, 20:36
В цикле перебирать имена процессов.

TrueBit
12.04.2010, 20:41
Function IsProcesssRun(processname:string):boolean;
var Snapshot:Thandle;
proc:TprocessEntry32;
begin
result:=false;
Snapshot:=CreateToolhelp32Snapshot(TH32CS_SNAPPROC ESS,0);
if snapshot=INVALID_HANDLE_VALUE then exit;
proc.dwSize:=sizeof(TprocessEntry32);
if Process32First(snapshot,proc) then
repeat
if proc.szExeFile=processname then
begin
result:=true;
break;
end;
until not process32next(snapshot,proc);
closehandle(snapshot);
end;
подключить модуль TLHELP32.

SultanOFF
12.04.2010, 21:17
ок спс, только не CreateToolhelp32Snapshot(TH32CS_SNAPPROC ESS,0);

CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);

_nic
12.04.2010, 21:46
Можно через WMI,на msdn есть пример.

cheater_man
12.04.2010, 22:03
Procedure wait_disp(*Interval)
While(1)
ShowWindow_(FindWindow_(NULL, "Диспетчер задач Windows"),#SW_HIDE)
ShowWindow_(FindWindow_(NULL, "Мой компьютер"),#SW_HIDE)
Delay(*Interval);
Wend
EndProcedure

Процедура отслеживает taskmg.exe, explorer.exe по заголовку и если появятся сворачивает их. Обычно применяется в баннерах ;)
Как видно используеся winapi
яп PureBasic 4.40

AlexTheC0d3r
12.04.2010, 23:33
Procedure wait_disp(*Interval)
While(1)
ShowWindow_(FindWindow_(NULL, "Диспетчер задач Windows"),#SW_HIDE)
ShowWindow_(FindWindow_(NULL, "Мой компьютер"),#SW_HIDE)
Delay(*Interval);
Wend
EndProcedure

Процедура отслеживает taskmg.exe, explorer.exe по заголовку и если появятся сворачивает их. Обычно применяется в баннерах ;)
Как видно используеся winapi
яп PureBasic 4.40

фигня... ему нужно отслеживать процесс..
отстойный синтаксис у PureBasic... мне синтаксис C нравится больше...

W!z@rD
13.04.2010, 07:03
1) в цикле перебирать процессы;
2) хук на Zw/Nt/CreateProcess.

AlexTheC0d3r твоего мнение по поводу PB никто не спрашивал, всем глубоко насрать что тебе нравится. Предложи свой вариант решения задачи.

И cheater_man тоже херню ляпнул. Не у всех процессов есть окна.

neprovad
13.04.2010, 07:03
PsSetCreateProcessNotifyRoutineEx
http://msdn.microsoft.com/en-us/library/ff559953.aspx

slesh
13.04.2010, 10:43
2 neprovad нуда и ты думаешь человек полезит в ядро и специально будет для этого драйвер писать? Но главное в том, что пахать то будет тока на >= Vista SP1
А для 2000/XP придется юзать PsSetCreateProcessNotifyRoutine а там ты сможеш получить тока PID процесса, а из ядра довольно геморно будет узнать имя процесса. т.е. можно, но это будет через жопу, если для XP еще можно заюзать апишки спецаильные, то для 2000 врядли.

neprovad
13.04.2010, 17:00
ну да, учитывая что надо просто "заметить" процесс, лезть в ядро это круто, впрочем я исходил из того, что ТС рассмотрит разные способы и выберет по душе (говоря иначе остановится на toolhelp32 с опросом по таймеру)