例如一个程序的进程名称是:a.exe,请问要怎么介绍它。

解决方案 »

  1.   

    命令行执行“TASKKILL /IM a.exe”
      

  2.   

    use Tlhelp32function KillTask(ExeFileName: string): integer; 
    const 
      PROCESS_TERMINATE=$0001;
    var 
      ContinueLoop: BOOL;
      FSnapshotHandle: THandle;
      FProcessEntry32: TProcessEntry32;
    begin 
      result := 0;
      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(ExeFileName))or
          (UpperCase(FProcessEntry32.szExeFile) =UpperCase(ExeFileName))) then
          Result := Integer(TerminateProcess(OpenProcess(
        PROCESS_TERMINATE, BOOL(0),
        FProcessEntry32.th32ProcessID), 0));
        ContinueLoop := Process32Next(FSnapshotHandle,
        FProcessEntry32);
      end;  CloseHandle(FSnapshotHandle);
    end;
      

  3.   

    function KillProcess(const Process: string): Boolean;
    var
      PE32: TProcessEntry32;
      hSnap: THandle;
      hProc: THandle;
      ProcName: string;
      ProcPath: string;
      Path: array[0..MAX_PATH - 1] of Char;
      N: Integer;
    begin
      Result := False;
      N := 0;  // 创建进程快照
      hSnap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
      if hSnap = INVALID_HANDLE_VALUE then Exit;  // 遍历进程列表
      PE32.dwSize := SizeOf(PE32);
      if Process32First(hSnap, PE32) then
      begin
        repeat
          // 打开进程句柄
          hProc := OpenProcess(
            PROCESS_QUERY_INFORMATION
            or PROCESS_VM_READ
            or PROCESS_TERMINATE
            or SYNCHRONIZE,
            False, PE32.th32ProcessID
          );
          if hProc = 0 then Continue;      // 获取进程名称&路径
          ProcName := PE32.szExeFile;
          ProcPath := '';
          if GetModuleFileNameEx(hProc, 0, Path, MAX_PATH) > 0 then
          begin
            ProcPath := Path;
          end;      // 比较名称或路径
          if SameText(Process, ProcName) or SameText(Process, ProcPath) then
          begin
            Inc(N);
            // 强制结束进程
            if Integer(TerminateProcess(hProc, 0)) = 0 then Continue;
            // 等待进程结束
            while WaitForSingleObject(hProc, 0) <> WAIT_OBJECT_0 do Sleep(100);
          end;      // 关闭进程句柄
          CloseHandle(hProc);
        until not Process32Next(hSnap, PE32);
      end;  // 关闭进程快照
      CloseHandle(hSnap);  // 通过查询判断是否结束成功
      Result := (N = 0) or (not QueryProcess(Process));
    end;
      

  4.   

    用到了QueryProcess函数,补上
    function QueryProcess(const Process: string): Boolean;
    var
      PE32: TProcessEntry32;
      hSnap: THandle;
      hProc: THandle;
      ProcName: string;
      ProcPath: string;
      Path: array[0..MAX_PATH - 1] of Char;
    begin
      Result := False;  // 创建进程快照
      hSnap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
      if hSnap = INVALID_HANDLE_VALUE then Exit;  // 遍历进程列表
      PE32.dwSize := SizeOf(PE32);
      if Process32First(hSnap, PE32) then
      begin
        repeat
          // 打开进程句柄
          hProc := OpenProcess(
            PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,
            False, PE32.th32ProcessID
          );
          if hProc = 0 then Continue;      // 获取进程名称&路径
          ProcName := PE32.szExeFile;
          ProcPath := '';
          if GetModuleFileNameEx(hProc, 0, Path, MAX_PATH) > 0 then
          begin
            ProcPath := Path;
          end;      // 比较名称或路径
          if SameText(Process, ProcName) or SameText(Process, ProcPath) then
          begin
            Result := True;
            CloseHandle(hProc);
            Break;
          end;      // 关闭进程句柄
          CloseHandle(hProc);
        until not Process32Next(hSnap, PE32);
      end;  // 关闭进程快照
      CloseHandle(hSnap);
    end;
      

  5.   


    这个我试过,在win7下不管用
      

  6.   

    我的环境是xp,想要实现一个程序可以在win7结束一下进程,试了很多办法,但是不管用。希望有朋友知道
      

  7.   

    1. 下面这段存为requireAdmin.manifest
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <ms_asmv2:trustInfo xmlns:ms_asmv2="urn:schemas-microsoft-com:asm.v2">
    <ms_asmv2:security>
    <ms_asmv2:requestedPrivileges>
    <ms_asmv2:requestedExecutionLevel level="requireAdministrator">
    </ms_asmv2:requestedExecutionLevel>
    </ms_asmv2:requestedPrivileges>
    </ms_asmv2:security>
    </ms_asmv2:trustInfo>
    </assembly>2. 下面这段存为requireAdmin.rc
    1 24 "requireAdmin.manifest"3. 将requireAdmin.rc添加到你的程序(Project)当中,进行编译。4. 生成的程序在Win7下执行,要求启用管理员身份,输入密码即可完成结束任务等操作。
      

  8.   

    WinExec('TASKKILL /F /IM a.exe', SW_HIDE);