Реакция на процесс

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by SultanOFF, 12 Apr 2010.

  1. SultanOFF

    SultanOFF Member

    Joined:
    4 Jun 2009
    Messages:
    155
    Likes Received:
    6
    Reputations:
    0
    Здравствуйте. Мне нужно отследить появление нового процесса. Если появился процесс под именем xxx то допустим Моя прога делает тотото. Как можно такое сделать? Обьясните пожалуйста :)
     
  2. LMaster

    LMaster Member

    Joined:
    15 Jun 2008
    Messages:
    14
    Likes Received:
    8
    Reputations:
    0
    В цикле перебирать имена процессов.
     
  3. TrueBit

    TrueBit Member

    Joined:
    21 Nov 2009
    Messages:
    71
    Likes Received:
    19
    Reputations:
    4
    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,procthen
    repeat
    if proc.szExeFile=processname then
    begin
      result
    :=true;
      break;
    end;
    until not process32next(snapshot,proc);
    closehandle(snapshot);
    end;
    подключить модуль TLHELP32.
     
  4. SultanOFF

    SultanOFF Member

    Joined:
    4 Jun 2009
    Messages:
    155
    Likes Received:
    6
    Reputations:
    0
    ок спс, только не
     
  5. _nic

    _nic Elder - Старейшина

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    Можно через WMI,на msdn есть пример.
     
  6. cheater_man

    cheater_man Member

    Joined:
    13 Nov 2009
    Messages:
    651
    Likes Received:
    44
    Reputations:
    7
    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
     
  7. AlexTheC0d3r

    AlexTheC0d3r Elder - Старейшина

    Joined:
    25 Jul 2008
    Messages:
    388
    Likes Received:
    179
    Reputations:
    18
    фигня... ему нужно отслеживать процесс..
    отстойный синтаксис у PureBasic... мне синтаксис C нравится больше...
     
  8. W!z@rD

    W!z@rD Борец за русский язык

    Joined:
    12 Feb 2006
    Messages:
    973
    Likes Received:
    290
    Reputations:
    43
    1) в цикле перебирать процессы;
    2) хук на Zw/Nt/CreateProcess.

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

    И cheater_man тоже херню ляпнул. Не у всех процессов есть окна.
     
    #8 W!z@rD, 13 Apr 2010
    Last edited: 13 Apr 2010
  9. neprovad

    neprovad Elder - Старейшина

    Joined:
    19 Oct 2007
    Messages:
    899
    Likes Received:
    274
    Reputations:
    59
    PsSetCreateProcessNotifyRoutineEx
    http://msdn.microsoft.com/en-us/library/ff559953.aspx
     
    1 person likes this.
  10. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    2 neprovad нуда и ты думаешь человек полезит в ядро и специально будет для этого драйвер писать? Но главное в том, что пахать то будет тока на >= Vista SP1
    А для 2000/XP придется юзать PsSetCreateProcessNotifyRoutine а там ты сможеш получить тока PID процесса, а из ядра довольно геморно будет узнать имя процесса. т.е. можно, но это будет через жопу, если для XP еще можно заюзать апишки спецаильные, то для 2000 врядли.
     
  11. neprovad

    neprovad Elder - Старейшина

    Joined:
    19 Oct 2007
    Messages:
    899
    Likes Received:
    274
    Reputations:
    59
    ну да, учитывая что надо просто "заметить" процесс, лезть в ядро это круто, впрочем я исходил из того, что ТС рассмотрит разные способы и выберет по душе (говоря иначе остановится на toolhelp32 с опросом по таймеру)