如果我运行了一个名为program.exe的文件,如何根据program.exe这个进程名来获取这个文件的路径?望各位高手赐教!谢谢!

解决方案 »

  1.   

    uses
      TlHelp32,psapi;
    function GetPathFileofModule(ModuleName:String):String;
    var
      hProcSnap: THandle;
      pProcess: THandle;
      pe32: TProcessEntry32;
      s: string;
      buf:array[0..MAX_PATH] of char;
      hMod:HMODULE;
      cbNeeded:DWORD;
    begin
      hProcSnap := CreateToolHelp32SnapShot(TH32CS_SNAPALL, 0);
      if hProcSnap = INVALID_HANDLE_VALUE then Exit;
      pe32.dwSize := SizeOf(ProcessEntry32);
      if Process32First(hProcSnap, pe32) = True then
        while Process32Next(hProcSnap, pe32) = True do
        begin
            if uppercase(pe32.szExeFile)=uppercase(ModuleName) then
            begin
               pProcess:=OpenProcess(PROCESS_QUERY_INFORMATION or
                                           PROCESS_VM_READ,
                                           FALSE,
                                           pe32.th32ProcessID);
               if pProcess<>0 then
               begin
                  if EnumProcessModules( pProcess,@hMod,sizeof(hMod),cbNeeded) then
                  begin
                     ZeroMemory(@buf,MAX_PATH+1);
                     GetModuleFileNameEx(pProcess, hMod,buf,MAX_PATH+1);
                     Result:=strpas(buf);
                  end;
               end;
            end;
        end;
      CloseHandle(hProcSnap);
    end;
    ------------------------------------
    调用方法:
    ShowMessage(GetPathFileofModule('program.exe'));
      

  2.   

    unsigned(僵哥) 
    的方法在98系统下测试未通过,怎么办
      

  3.   

    呵呵
    我的Blog都有的9X?一早就淘汰了http://lysoft.7u7.net
      

  4.   

    ly_liuyang(Liu Yang) 
    我一直对你有种疑惑,大部分的帖子都有你的口水。俺要登录了你的http://lysoft.7u7.net看了,也看了你的简历,你的技术水平让俺刮目相看。
    可是象你这样的高水平的人怎么会有这么多的时间来灌水呢,你的简历里写道:
    -----------月薪要求:  全职:使用期4000,正式不低于5000 ----------------------------
    你这样的水平还没找到如此好薪水的工作,我们这些虾米怎么混呀
      

  5.   

    //98下不支持PsApi,参考如下代码,已经在98下调试过uses TlHelp32, PsApi;function GetPathFileOfModule(mModuleName: string): string;
    var
      vProcSnap: THandle;
      vProcess: THandle;
      vProcessEntry32: TProcessEntry32;
      vBuffer: array[0..MAX_PATH] of char;
      T: string;
      L: Integer;
    begin
      Result := '';
      vProcSnap := CreateToolHelp32SnapShot(TH32CS_SNAPALL, 0);
      mModuleName := UpperCase(mModuleName);
      vProcessEntry32.dwSize := SizeOf(ProcessEntry32);
      if Process32First(vProcSnap, vProcessEntry32) then
        while Process32Next(vProcSnap, vProcessEntry32) do
        begin
          vProcess := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,
            False, vProcessEntry32.th32ProcessID);
          try
            if GetModuleFileNameEx(vProcess, 0, vBuffer, SizeOf(vBuffer)) <> 0 then
              T := vBuffer
            else T := vProcessEntry32.szExeFile;
            L := Length(mModuleName);
            if FileExists(T) and
              (Pos(mModuleName, UpperCase(T)) = Length(T) - L + 1) and
              (Copy(T, Length(T) - L, 1) = '\') then
              begin
                Result := T;
                Break;
              end;
          finally
            CloseHandle(vProcess);
          end;
        end;
      CloseHandle(vProcSnap);
    end; { GetPathFileOfModule }