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

該怎麼關閉其他程式?

 
loraibar
一般會員


發表:7
回覆:5
積分:2
註冊:2007-03-08

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-03-13 22:29:47 IP:61.64.xxx.xxx 訂閱
要寫一個按鈕  功能是關閉正在執行中的其他程式

例如 關閉 一個執行中的 記事本 或是關閉執行中的 WINAMP .... 等等

應該怎麼寫?

Close(.........)嗎?


-----------------------------

新手發問...
anyone
中階會員


發表:1
回覆:63
積分:52
註冊:2007-02-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-03-14 08:53:30 IP:59.127.xxx.xxx 訂閱
可用PostMessage(Handle,WM_CLOSE,0,0)
或是TerminateProcess(hProcess,0)
loraibar
一般會員


發表:7
回覆:5
積分:2
註冊:2007-03-08

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-03-14 10:24:34 IP:61.64.xxx.xxx 訂閱
那個請問應該如何才能知道 hProcess 是該填什麼??
應該有方法可以查詢.....

新手發問請多包含



anyone
中階會員


發表:1
回覆:63
積分:52
註冊:2007-02-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-03-14 11:19:12 IP:59.127.xxx.xxx 訂閱
可以用OpenProcess得到hProcess
去搜尋一下會有許多相關資料
===================引 用 文 章===================
那個請問應該如何才能知道 hProcess 是該填什麼??
??????????????????????????????????應該有方法可以查詢.....????????????????????

新手發問請多包含



loraibar
一般會員


發表:7
回覆:5
積分:2
註冊:2007-03-08

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-03-14 14:30:11 IP:61.64.xxx.xxx 訂閱
可用PostMessage(Handle,WM_CLOSE,0,0) 或是TerminateProcess(hProcess,0)


您好 我試過下列三個方法 我要關定執行中的程式girder
---------------------------------------------------------------------------
1.
HWND hWnd=FindWindow(NULL, "Girder");
PostMessage(hWnd,WM_CLOSE,0,0) ;
結果只關掉視窗 沒有終止程式

---------------------------------------------------------------------------
2.
HWND hWnd=FindWindow(NULL, "Girder");

SendMessage(hWnd, WM_CLOSE, 0, 0);
結論與上面一樣 結果只關掉視窗 沒有終止程式

----------------------------------------------------------------------------
3. 接下來是
HANDLE hh = OpenProcess(PROCESS_ALL_ACCESS, True,pid);
TerminateProcess(hWnd, 0);


但是pid 每次執行都不一樣.... 因此我現在的問題是
有何指令可以知道目前執行中的某程式的pid?????
上網找到這個

DWORD pid = Shell("C:\\Program Files\\girder32\\Girder", vbNormalFocus)

但是 Shell 無法compilier是不是要再補上什麼lib?????


新手發問.....
----------------------------------------------------------------------------
anyone
中階會員


發表:1
回覆:63
積分:52
註冊:2007-02-12

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-03-14 14:54:10 IP:59.127.xxx.xxx 訂閱
OpenProcess你改一下
OpenProcess(PROCESS_TERMINATE,FALSE,pid);
========================================
HANDLE hh = OpenProcess(PROCESS_ALL_ACCESS, True,pid);
TerminateProcess(hWnd, 0);

另外OpenProcess最後一個參數是ProcessID
取得方式為GetWindowThreadProcessID(Handle,ProcessID)

PostMessage和sendMessage的方式是一樣的
差別嘛....是在於是否等待其他程序消息處理
PostMessage剛試了一下,好像真的不行
那你就用TerminateProcess的方式吧!

補充一下:
若你用到OpenProcess的方式
在程式的最後記得要關掉CloseHandle(hProcess)
我試過,用TerminateProcess是可以的
loraibar
一般會員


發表:7
回覆:5
積分:2
註冊:2007-03-08

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-03-14 15:43:22 IP:61.64.xxx.xxx 訂閱
   您好   謝謝您的回答   我的真正問題是

我有一個正在執行的程式 程式叫做 C:\Program Files\girder32\Girder.exe
現在我要寫一個BUTTON來終止它

您提到
GetWindowThreadProcessID(Handle,ProcessID)

可是 ProcessID 與 程式 C:\Program Files\girder32\Girder.exe 這兩個要用什麼指令讓它們有關係????



再麻煩你回答一次... 真不好意思....

anyone
中階會員


發表:1
回覆:63
積分:52
註冊:2007-02-12

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-03-14 15:59:36 IP:59.127.xxx.xxx 訂閱
你要終止別的程式,首先必需要取得它的Handle值
取得它的Handle後
用GetWindowThreadProcessID得到它的ProcessID
取得ProcessID是為了接下來的hProcess
hProcess:=OpenProcess(PROCESS_TERMINATE,FALSE,ProcessID);
有了hProcess後才能關掉它
再用TerminateProcess(hProcess,0);
最後關掉你開啟的hProcess(有開就有關嘛!)
CloseHandle(hProcess);
就能關掉那支程式了
這樣你瞭嗎?
===================引 用 文 章===================
?? 您好?? 謝謝您的回答?? 我的真正問題是

?? 我有一個正在執行的程式? 程式叫做? C:\Program Files\girder32\Girder.exe
? 現在我要寫一個BUTTON來終止它

? 您提到
????? GetWindowThreadProcessID(Handle,ProcessID)

? 可是??? ProcessID 與 程式? C:\Program Files\girder32\Girder.exe??? 這兩個要用什麼指令讓它們有關係????



????????????再麻煩你回答一次...? 真不好意思....
?

loraibar
一般會員


發表:7
回覆:5
積分:2
註冊:2007-03-08

發送簡訊給我
#9 引用回覆 回覆 發表時間:2007-03-14 17:19:22 IP:61.64.xxx.xxx 訂閱
經由你的解說   我已明白流程

但是COMPILIER 還是出現錯誤
攪盡進腦汁時在想不出來哪裡宣告錯誤....
煩請解惑........

程式
-----------------------------

<textarea class="cpp" rows="10" cols="70" name="code">DWORD ProcessID; HWND Handle1=FindWindow(NULL, "Girder"); GetWindowThreadProcessId(Handle1 ,ProcessID) ; HANDLE hProcess=OpenProcess(PROCESS_TERMINATE,false,ProcessID); TerminateProcess(hProcess, 0); CloseHandle(hProcess); </textarea>

錯誤訊息
[C Error] Unit7.cpp(98): E2034 Cannot convert 'unsigned long' to 'unsigned long *'
[C Error] Unit7.cpp(98): E2342 Type mismatch in parameter 'lpdwProcessId' (wanted 'unsigned long *', got 'unsigned long')

PS 第98行是 GetWindowThreadProcessId(Handle1 ,ProcessID) ;

anyone
中階會員


發表:1
回覆:63
積分:52
註冊:2007-02-12

發送簡訊給我
#10 引用回覆 回覆 發表時間:2007-03-14 17:49:23 IP:59.127.xxx.xxx 訂閱
在C++裡似乎要
GetWindowThreadProcessID(Handle1,&ProcessID);
要用位址去接吧!
我不懂C
但應該是如此
若可以或有問題趕快回應
不然我得等到明天才能回你了
===================引 用 文 章===================
經由你的解說?? 我已明白流程

但是COMPILIER 還是出現錯誤
攪盡進腦汁時在想不出來哪裡宣告錯誤....
????? 煩請解惑........

程式
-----------------------------

<textarea class="cpp" rows="10" cols="70" name="code">DWORD ProcessID; HWND Handle1=FindWindow(NULL, "Girder"); GetWindowThreadProcessId(Handle1 ,ProcessID) ; HANDLE hProcess=OpenProcess(PROCESS_TERMINATE,false,ProcessID); TerminateProcess(hProcess, 0); CloseHandle(hProcess); </textarea>?

錯誤訊息
[C Error] Unit7.cpp(98): E2034 Cannot convert 'unsigned long' to 'unsigned long *'
[C Error] Unit7.cpp(98): E2342 Type mismatch in parameter 'lpdwProcessId' (wanted 'unsigned long *', got 'unsigned long')

PS 第98行是??GetWindowThreadProcessId(Handle1 ,ProcessID) ;

loraibar
一般會員


發表:7
回覆:5
積分:2
註冊:2007-03-08

發送簡訊給我
#11 引用回覆 回覆 發表時間:2007-03-14 18:40:57 IP:61.64.xxx.xxx 訂閱
居然可以了

想不到居然是要CALL BY ADDRESS..........................
摸索了一天
結果被你一語道破.................................


真是萬分感謝 THANK YOU THANK YOU


anyone
中階會員


發表:1
回覆:63
積分:52
註冊:2007-02-12

發送簡訊給我
#12 引用回覆 回覆 發表時間:2007-03-15 08:48:10 IP:59.127.xxx.xxx 訂閱
剛好我有碰過,所以可以幫你
不過你應該要學習著如何看錯誤訊息吧!
這樣才會知道自己的程式錯在哪、而又該怎麼改
又或者是該學習上網查東西(Google真的很好用唷!)
===================引 用 文 章===================
居然可以了

? 想不到居然是要CALL BY ADDRESS..........................?????
?摸索了一天????
?????????????????????????? 結果被你一語道破.................................


?????????????????? 真是萬分感謝????????? THANK YOU????? THANK YOU??

?
系統時間:2024-05-03 3:44:06
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!