全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1710
推到 Plurk!
推到 Facebook!

請問如何獲得應用程序的PID

尚未結案
blck
一般會員


發表:17
回覆:19
積分:12
註冊:2003-08-02

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-10-27 00:12:59 IP:61.187.xxx.xxx 未訂閱
假如我運行了一個叫project.exe的應用程序,那麽我在關閉牠的時候如果出現異常,管不掉的話,我就強行結束這個應用程序並且把這個進程給kill了,請問如何實現? 謝謝
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-10-27 00:22:11 IP:61.221.xxx.xxx 未訂閱
引言: 假如我運行了一個叫project.exe的應用程序,那麽我在關閉牠的時候如果出現異常,管不掉的話,我就強行結束這個應用程序並且把這個進程給kill了,請問如何實現? 謝謝
blck 你好:
(1)可利用 Win32 API CreateProcess 執行外部 Application
(2)如果關不掉的話,可以用 Win32 API TerminateProcess 把它關掉
   http://delphi.ktop.com.tw/topic.php?TOPIC_ID=39031
(3)如何偵測外部 Application 已經無回應,請參考以下的連結文章
   http://delphi.ktop.com.tw/topic.php?TOPIC_ID=30344
備註: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/createprocess.asp http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/terminateprocess.asp http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/messagesandmessagequeues/messagesandmessagequeuesreference/messagesandmessagequeuesfunctions/sendmessagetimeout.asp -- Enjoy Researching & Developing -- 發表人 - RaynorPao 於 2003/10/27 00:24:14
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
fangback
初階會員


發表:4
回覆:47
積分:40
註冊:2002-06-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-10-27 17:41:08 IP:61.218.xxx.xxx 未訂閱
看看是否是合你用的  
 
void KillSelectedProcess(DWORD PID)
{
   HANDLE PH;
   Cardinal hProcess;
   DWORD lpExistCode;
   hProcess = __int64(PID);
   PH = OpenProcess(PROCESS_ALL_ACCESS, FALSE, hProcess);
   if(PH!=NULL)
   {
      ::TerminateProcess(PH, lpExistCode);
      if(GetWindowThreadProcessId(PH, &lpExistCode))
      {
         ShowMessage(String().sprintf("Kill curent process HWND d",PH));
         ::TerminateProcess(PH, lpExistCode);
      }
   }
   CloseHandle(PH);
}
blck
一般會員


發表:17
回覆:19
積分:12
註冊:2003-08-02

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-10-28 23:41:09 IP:61.187.xxx.xxx 未訂閱
十分感謝兩位的解答,但是我仍然有一個疑問:怎麽獲得那個PID阿,也許我沒有説明,假設我運行的就是這個project.exe。我一運行就是這個應用,關閉的時候加一個判斷,如果沒有響應就執行強行關閉的動作。
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-10-28 23:55:03 IP:61.221.xxx.xxx 未訂閱
引言: 十分感謝兩位的解答,但是我仍然有一個疑問:怎麽獲得那個PID阿,也許我沒有説明,假設我運行的就是這個project.exe。我一運行就是這個應用,關閉的時候加一個判斷,如果沒有響應就執行強行關閉的動作。
blck 你好: http://delphi.ktop.com.tw/topic.php?TOPIC_ID=39031 在這個連結裡面,CreateProcess 如果成功的話,在它的第 9 個參數 pi 裡面 就可以得到對應的 Process Handle (pi.hProcess),最後就可以利用這個 Handle 強制把 Application 關閉 (配合 TerminateProcess),因此應該是不需 要另外獲得 Process ID (PID),如果你真想獲得 PID 的話,在第 9 個參數 pi 裡面也有,就是 pi.dwProcessId -- Enjoy Researching & Developing --
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
blck
一般會員


發表:17
回覆:19
積分:12
註冊:2003-08-02

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-10-29 18:36:11 IP:61.187.xxx.xxx 未訂閱
謝謝RAYNORPAO的耐心解答 我還有一個疑問,程序如何獲得本身的pid?
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-10-30 00:07:14 IP:61.221.xxx.xxx 未訂閱
引言: 謝謝RAYNORPAO的耐心解答 我還有一個疑問,程序如何獲得本身的pid?
blck 你好:
利用 Win32 API 即可達到目的
(>    -- 
        
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
blck
一般會員


發表:17
回覆:19
積分:12
註冊:2003-08-02

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-10-30 22:42:50 IP:61.187.xxx.xxx 未訂閱
十分感謝raynorpao的耐心解答 謝謝阿
系統時間:2024-05-04 6:35:16
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!