zoukankan      html  css  js  c++  java
  • Win7/Win10下的进程操作

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

    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
    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
    
    


  • 相关阅读:
    NSRunloop-基本概念
    GCD—NSThread-多线程的基本用法
    NSURLConnection-网络访问(同步异步)
    ASIHttpRequest网络使用框架
    XML与JSON解析
    iOS 设置系统音量和监听系统音量变化
    iOS_字典数组 按key分组和排序
    iOS 自定义字体设置
    日期选择和输入弹框
    iOS 耳机线控
  • 原文地址:https://www.cnblogs.com/xieyunc/p/9126517.html
Copyright © 2011-2022 走看看