写了个小程序,用到了Acrobat的PDF控件
现在运行的时候会加载一个Acrobat.exe进程
但是退出的时候Acrobat.exe进程不会自己退出
再打开程序的时候就无法打开了
现在是想在退出时关闭Acrobat.exe这个进程
但是对windows方面不熟悉,网上的代码看了些也没看懂
请问一下这个具体该怎么解决?

解决方案 »

  1.   

    使用api:找到acrobat.exe的进程id,再kill掉
      

  2.   

    找了段帖上去貌似能解决问题,我贴上来高手帮忙解释一下吧function TMainForm.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);
       Found := Process32First(hSnapshot, lppe);
       while Found do
       begin
         if ((UpperCase(ExtractFileName(lppe.szExeFile))=UpperCase(AFileName)) or (UpperCase(lppe.szExeFile )=UpperCase(AFileName))) then
         begin
           Result :=True;
         end;
         Found := Process32Next(hSnapshot, lppe);
       end;
    end;procedure TMainForm.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;procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    begin
      if Messagebox(handle,'确定退出吗?','提示',MB_YESNO+MB_ICONQUESTION)=IDYES then
       begin
          if FindProcess('Acrobat.exe') then //调用
           begin
            EndProcess('Acrobat.exe');
           end;
          CanClose:=true;
       end
       else
       CanCLose:=false;end;
      

  3.   

    http://hi.baidu.com/yangvb/blog/item/a2fcf7f2a995c515b17ec52e.html
    找了一段與你貼出來的代碼相似的,里面有注釋,看看吧
      

  4.   

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

  5.   

    先用FindWindowex找到hwnd,然后用TerminateProcess来关闭,或者用消息机制SendMessage,WM_CLOSE也可以