delphi 如何获取进程的全路径名


本文整理自网络,侵删。

 一、Win7下如何获取进程的全路径名?
[delphi] 
1、程序必须包含配置UAC  
  
2、用以下函数代码取路径  
uses TLHelp32,psapi;  
  
function FindProcess(AFileName: string;var ID:Cardinal): boolean;  
var  
   hSnapshot: THandle;//用于获得进程列表  
   lppe: TProcessEntry32;//用于查找进程  
   Found: Boolean;//用于判断进程遍历是否完成  
begin  
   Result :=False;  
   hSnapshot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);//获得系统进程列表  
   lppe.dwSize := SizeOf(TProcessEntry32);//在调用Process32First API之前,需要初始化lppe记录的大小  
   Found := Process32First(hSnapshot, lppe);//将进程列表的第一个进程信息读入ppe记录中  
   while Found do  
   begin  
     if ((UpperCase(ExtractFileName(lppe.szExeFile))=UpperCase(AFileName)) or (UpperCase(lppe.szExeFile )=UpperCase(AFileName))) then  
     begin  
       ID:=lppe.th32ProcessID;  
  
       Result :=True;  
     end;  
     Found := Process32Next(hSnapshot,lppe);//将进程列表的下一个进程信息读入lppe记录中  
   end;  
  
end;  
  
   
function GetProcessPath(ProcessID: DWORD): string;  
var  
     Hand: THandle;  
     ModName: Array[0..Max_Path-1] of Char;  
     hMod: HModule;  
     n: DWORD;  
begin  
     Result:='';  
     Hand:=OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,False,ProcessID);  
     if Hand>0 then  
     try  
       ENumProcessModules(Hand,@hMod,Sizeof(hMod),n);  
       if GetModuleFileNameEx(Hand,hMod,ModName,Sizeof(ModName))>0 then  
         Result:=ExtractFilePath(ModName);  
     except  
     end;  
end;  
  
  
procedure TForm1.Button1Click(Sender: TObject);  
var  
  Test:Dword;  
  Path:string;  
begin  
  FindProcess('Test.exe',Test);  
  Path:= GetProcessPath(Test);  
  ShowMessage(Path);  
end;  

二、参考代码2
[delphi] 
function TfUpdate.FindProcess(AFileName: string): boolean;  
var  
  hSnapshot: THandle;//用于获得进程列表  
  lppe: TProcessEntry32;//用于查找进程  
  Found: Boolean;//用于判断进程遍历是否完成  
  KillHandle: THandle;//用于杀死进程  
begin  
  Result :=False;  
  hSnapshot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);//获得系统进程列表  
  lppe.dwSize := SizeOf(TProcessEntry32);//在调用Process32First API之前,需要初始化lppe记录的大小  
  Found := Process32First(hSnapshot, lppe);//将进程列表的第一个进程信息读入ppe记录中  
  while Found do  
  begin  
    if ((UpperCase(ExtractFileName(lppe.szExeFile))=UpperCase(AFileName)) or (UpperCase(lppe.szExeFile )=UpperCase(AFileName))) then  
    begin  
      {if MsShow('发现打开Excel,是否将其关闭?',2)=6 then 
      begin 
      //由于我的操作系统是xp,所以在调用TerminateProcess API之前 
      //我必须先获得关闭进程的权限,如果操作系统是NT以下可以直接中止进程 
      KillHandle := OpenProcess(PROCESS_TERMINATE, False, lppe.th32ProcessID); 
      TerminateProcess(KillHandle, 0);//强制关闭进程 
      CloseHandle(KillHandle); 
      end;}  
      Result :=True;  
    end;  
    Found := Process32Next(hSnapshot, lppe);//将进程列表的下一个进程信息读入lppe记录中  
  end;  
end;  
  
procedure TfUpdate.EndProcess(AFileName: string);  
const  
  PROCESS_TERMINATE = $0001;  
var  
  ContinueLoop: BOOL;  
  FSnapShotHandle: THandle;  
  FProcessEntry32: TProcessEntry32;  
begin  
  FSnapShotHandle := CreateToolhelp32SnapShot(TH32CS_SNAPPROCESS, 0);  
  FProcessEntry32.dwSize := SizeOf(FProcessEntry32);  
  ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);  
  while integer(ContinueLoop) <> 0 do  
  begin  
    if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile))=UpperCase(AFileName)) or (UpperCase(FProcessEntry32.szExeFile )=UpperCase(AFileName))) then  
    TerminateProcess(OpenProcess(PROCESS_TERMINATE, BOOL(0),FProcessEntry32.th32ProcessID), 0);  
    ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);  
  end;  
end;  
  
备注: TProcessEntry32 需要引用单元 uses TLHelp32  

相关阅读 >>

Delphi从路径中分离文件名

Delphi 实现软件版验证码

Delphi tidhttp 超时的解决方案

Delphi tclientdataset用法详解

Delphi中如何用image控件显示网络图片

Delphi xe5 android实现繁体字到简体字的转换函数

Delphi 字符串反转函数

Delphi中几种注释方法

Delphi 的链式代码

Delphi xe5 android 解决ide真机调试不起问题

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...