1、如何检查出程序的父进程?
2、操作系统不同会有什么不同?

解决方案 »

  1.   

    用ToolHelp函数集枚举
    PROCESSENTRY32结构的th32ParentProcessID元素就是父进程ID
      

  2.   

    http://blog.csdn.net/online/archive/2004/08/05/66373.aspx
      

  3.   

    在VB的安装目录下有一个工程:
    C:\Program Files\Microsoft Visual Studio\VB98\Wizards\PDWizard\Setup1
    那里面有如何判断不同操作系统的。
      

  4.   

    不同的系统枚举进程的方法不同,在98下可以采用toolhelp32snap函数来枚举进程。
    而在nt下用enmuprocess
      

  5.   

    procedure CheckParentProc;
      var //检查自己的进程的父进程
        Pn: TProcesseNtry32;
        sHandle: THandle;
        H, ExplProc, ParentProc: Hwnd;
        Found: Boolean;
        Buffer: array[0..1023] of Char;
        Path: string;
        begin
          H := 0;
          ExplProc := 0;
          ParentProc := 0;
          //得到Windows的目录
          SetString(Path,
                    Buffer,
                    GetWindowsDirectory(Buffer, Sizeof(Buffer) - 1));
          Path := UpperCase(Path) + '\EXPLORER.EXE'; //得到Explorer的路径
          //得到所有进程的列表快照
          sHandle := CreateToolHelp32SnapShot(TH32CS_SNAPALL, 0);
          Found := Process32First(sHandle, Pn); //查找进程
          while Found do //遍历所有进程
          begin
            if Pn.szExeFile = ParamStr(0) then //自己的进程
            begin
              ParentProc := Pn.th32ParentProcessID; //得到父进程的进程ID
              //父进程的句柄
              H := OpenProcess(PROCESS_ALL_ACCESS, True, Pn.th32ParentProcessID);
            end
            else if UpperCase(Pn.szExeFile) = Path then
              ExplProc := Pn.th32ProcessID;      //Explorer的PID
            Found := Process32Next(sHandle, Pn); //查找下一个
          end;
             end;
      

  6.   

    怎么DELPHI也出来啦。弄错地方了吧,哈哈