怎么终止某个外部程序??

解决方案 »

  1.   

    var
      h:handle;
    begin
      h:=你要关闭的外部程序的句柄;
      sendmessage(h,WM_CLOSE,0,0);
    end;
      

  2.   

    EnumWindows(@closeApp, integer(pchar('应用)));
    function closeApp(wnd: HWND; cap:pchar)  : boolean ;stdcall;
    var Caption: array[0..256] of Char;
    begin
      if GetWindowText  (wnd, Caption, SizeOf(Caption)-1) <> 0 then
      begin
        if copy(strPas(Caption),1,length(strPas(cap)))=strPas(cap) then
           PostMessage(wnd,wm_close,0,0);
      end;
      Result :=True;
    end;
      

  3.   

    {For Windows 9x/ME/2000/XP } uses 
      Tlhelp32; function 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; procedure TForm1.Button1Click(Sender: TObject); 
    begin 
      KillTask('notepad.exe'); 
    end; { For Windows NT/2000/XP } procedure KillProcess(hWindowHandle: HWND); 
    var 
      hprocessID: INTEGER; 
      processHandle: THandle; 
      DWResult: DWORD; 
    begin 
      SendMessageTimeout(hWindowHandle, WM_CLOSE, 0, 0, 
        SMTO_ABORTIFHUNG or SMTO_NORMAL, 5000, DWResult);   if isWindow(hWindowHandle) then 
      begin 
        // PostMessage(hWindowHandle, WM_QUIT, 0, 0);     { Get the process identifier for the window} 
        GetWindowThreadProcessID(hWindowHandle, @hprocessID); 
        if hprocessID <> 0 then 
        begin 
          { Get the process handle } 
          processHandle := OpenProcess(PROCESS_TERMINATE or PROCESS_QUERY_INFORMATION, 
            False, hprocessID); 
          if processHandle <> 0 then 
          begin 
            { Terminate the process } 
            TerminateProcess(processHandle, 0); 
            CloseHandle(ProcessHandle); 
          end; 
        end; 
      end; 
    end; procedure TForm1.Button2Click(Sender: TObject); 
    begin 
      KillProcess(FindWindow('notepad',nil)); 
    end;