Здравствуйте. Мне нужно отследить появление нового процесса. Если появился процесс под именем xxx то допустим Моя прога делает тотото. Как можно такое сделать? Обьясните пожалуйста
PHP: Function IsProcesssRun(processname:string):boolean; var Snapshot:Thandle; proc:TprocessEntry32; begin result:=false; Snapshot:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,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.
Code: 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 нравится больше...
1) в цикле перебирать процессы; 2) хук на Zw/Nt/CreateProcess. AlexTheC0d3r твоего мнение по поводу PB никто не спрашивал, всем глубоко насрать что тебе нравится. Предложи свой вариант решения задачи. И cheater_man тоже херню ляпнул. Не у всех процессов есть окна.
2 neprovad нуда и ты думаешь человек полезит в ядро и специально будет для этого драйвер писать? Но главное в том, что пахать то будет тока на >= Vista SP1 А для 2000/XP придется юзать PsSetCreateProcessNotifyRoutine а там ты сможеш получить тока PID процесса, а из ядра довольно геморно будет узнать имя процесса. т.е. можно, но это будет через жопу, если для XP еще можно заюзать апишки спецаильные, то для 2000 врядли.
ну да, учитывая что надо просто "заметить" процесс, лезть в ядро это круто, впрочем я исходил из того, что ТС рассмотрит разные способы и выберет по душе (говоря иначе остановится на toolhelp32 с опросом по таймеру)