怎么监控程序的启动、关闭!也就是截获应用程序的启动、关闭动作!?

解决方案 »

  1.   

    用TIMER定时扫描启动、关闭的进程:
    procedure TForm1.Button1Click(Sender: TObject);
    var lppe: TProcessEntry32;
        found : boolean;
        Hand : THandle;
    begin
      Hand := CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
      found := Process32First(Hand,lppe);
      while found do
      begin
        ListBox1.Items.Add(StrPas(lppe.szExeFile));
        found := Process32Next(Hand,lppe);
      end;
    end;
      

  2.   

    怎么监控程序的启动、关闭?
    如果该程序是自己写得话,可以向指定监控窗口发送消息。或者输出文件。如果不是的话,可以如cg1120(代码最优化-§雪是冷的,人是暖的§) 。
    同时,是否可以考虑hook监控消息。
      

  3.   

    用GetWindow 可以获得handle
    是不是自己写的程序,是的话好办,findwindow, 
    不是的话,你也得知道窗口类名或者title, 也得用findwindow
    的到handle
      

  4.   

    hook 方式当然好,但具体怎样使用?
      

  5.   

    HHOOK SetWindowsHookEx(    WH_SHELL , // type of hook to install
        HOOKPROC lpfn, // address of hook procedure
        HINSTANCE hMod, // handle of application instance
        DWORD dwThreadId  // identity of thread to install hook for 
       );
     在 lnfn中处理,这两个消息
    HSHELL_WINDOWCREATED
    HSHELL_WINDOWDESTROYED
    使用
    GetModuleFileName(GetModulehandle, buf, sizeOf(buf)-1)
    获得程序名字