其实如果知道进程ID之后就可以结束这个进程了,方法如下:
其中dwID为PID
HANDLE hHandle = NULL;
hHandle = ::OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwID);
::TerminateProcess(hHandle, 0);
::WaitForSingleObject(hHandle, INFINITE);
::CloseHandle(hHandle);

解决方案 »

  1.   

    KERNEL32.DLL的函数Process32First、Process32Next
      

  2.   

    看下面的代码,若有邮箱,我发给你 the Application
       SetWindowText(hwnd, TEXT(""));   // Clear the output box   CToolhelp th(TH32CS_SNAPALL, dwProcessID);   // Show Process details
       PROCESSENTRY32 pe = { sizeof(pe) };
       BOOL fOk = th.ProcessFirst(&pe);
       for (; fOk; fOk = th.ProcessNext(&pe)) {
          if (pe.th32ProcessID == dwProcessID) {
             AddText(hwnd, TEXT("Filename: %s\r\n"), pe.szExeFile);
             AddText(hwnd, TEXT("   PID=%08X, ParentPID=%08X, ")
                TEXT("PriorityClass=%d, Threads=%d, Heaps=%d\r\n"),
                pe.th32ProcessID, pe.th32ParentProcessID, 
                pe.pcPriClassBase, pe.cntThreads,
                th.HowManyHeaps());
             break;   // No need to continue looping
          }
       }
       // Show Modules in the Process
       // Number of characters to display an address
       const int cchAddress = sizeof(PVOID) * 2;
       AddText(hwnd, TEXT("\r\nModules Information:\r\n")
          TEXT("  Usage  %-*s(%-*s)  %8s  Module\r\n"),
          cchAddress, TEXT("BaseAddr"),
          cchAddress, TEXT("ImagAddr"), TEXT("Size"));   MODULEENTRY32 me = { sizeof(me) };
       fOk = th.ModuleFirst(&me);
       for (; fOk; fOk = th.ModuleNext(&me)) {
          if (me.ProccntUsage == 65535) {
             // Module was implicitly loaded and cannot be unloaded
             AddText(hwnd, TEXT("  Fixed"));
          } else {
             AddText(hwnd, TEXT("  %5d"), me.ProccntUsage);
          }
          PVOID pvPreferredBaseAddr = 
             GetModulePreferredBaseAddr(pe.th32ProcessID, me.modBaseAddr);
          if (me.modBaseAddr == pvPreferredBaseAddr) {
             AddText(hwnd, TEXT("  %p %*s   %8u  %s\r\n"), 
                me.modBaseAddr, cchAddress, TEXT(""), 
                me.modBaseSize, me.szExePath);
          } else {
             AddText(hwnd, TEXT("  %p(%p)  %8u  %s\r\n"), 
                me.modBaseAddr, pvPreferredBaseAddr, me.modBaseSize, me.szExePath);
          }
       }   
       // Show threads in the process
       AddText(hwnd, TEXT("\r\nThread Information:\r\n")
          TEXT("      TID     Priority\r\n"));
       THREADENTRY32 te = { sizeof(te) };
       fOk = th.ThreadFirst(&te);
       for (; fOk; fOk = th.ThreadNext(&te)) {
          if (te.th32OwnerProcessID == dwProcessID) {
             int nPriority = te.tpBasePri + te.tpDeltaPri;
             if ((te.tpBasePri < 16) && (nPriority > 15)) nPriority = 15;
             if ((te.tpBasePri > 15) && (nPriority > 31)) nPriority = 31;
             if ((te.tpBasePri < 16) && (nPriority <  1)) nPriority =  1;
             if ((te.tpBasePri > 15) && (nPriority < 16)) nPriority = 16;
             AddText(hwnd, TEXT("   %08X       %2d\r\n"), 
                te.th32ThreadID, nPriority);
          }
       }
      

  3.   

    I got it, thank you
      

  4.   

    code_cold(玉米)可以给我发么?我的邮箱是[email protected],谢谢先!
      

  5.   

    谢谢了,给分。邮箱[email protected]
      

  6.   

    tangyuyong(逸云) 看看你的邮箱 
      

  7.   

    procedure MyApp.TerminateApplication(AppString:string);
    var
      FSnapshotHandle:THandle;//快照句柄
      FProcessEntry32:TProcessEntry32;//快照进程结构
      Ret : BOOL;//进程队列检测结束标志
      ProcessID : integer; //进程ID
      ProcessHndle : THandle; //进程句柄
      s:string;
    begin
      if FSnapshotHandle > 0 then CloseHandle(FSnapshotHandle);//检测快照句柄
      FSnapshotHandle:=CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);//创建系统快照
      FProcessEntry32.dwSize:=Sizeof(FProcessEntry32);//先初始化 FProcessEntry32 的大小
      Ret:=Process32First(FSnapshotHandle,FProcessEntry32);//是否进程列表结束
      while Ret do
      begin
        s:=ExtractFileName(FProcessEntry32.szExeFile);//取应用的名称
        if uppercase(s)=uppercase(AppString) then //比较应用名称
        begin
          ProcessID:=FProcessEntry32.th32ProcessID;//取需要应用进程的ID
          s:='';
          break;
        end;
        Ret:=Process32Next(FSnapshotHandle,FProcessEntry32);
      end; //循环枚举出系统开启的所有进程,找出“AppString”
      ProcessHndle:=OpenProcess(PROCESS_ALL_ACCESS,false,ProcessID);//按照进程ID查找句柄
      TerminateProcess(ProcessHndle,0);//终断进程
      CloseHandle(FSnapshotHandle);//关闭快照句柄变量
      CloseHandle(ProcessHndle);//关闭句柄变量
    end;