Win7/Win10下的进程操作

来源:互联网 发布:fifaonline3古利特数据 编辑:程序博客网 时间:2024/05/16 10:56

一、Win7下如何获取进程的全路径名?

1、程序必须包含配置UAC2、用以下函数代码取路径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
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


0 0
原创粉丝点击