線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:3054
推到 Plurk!
推到 Facebook!

第二次運行時自動關閉程式如何實現?

答題得分者是:pcboy2
Py
一般會員


發表:3
回覆:7
積分:2
註冊:2006-07-08

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-01-08 15:55:03 IP:60.191.xxx.xxx 訂閱
想實現這樣一支程式,第一次可正常運行,重複運行時,不但不能運行,還把第一次運行的程式關閉,不知道如何實現,請指教,謝謝!
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-01-08 16:06:22 IP:211.22.xxx.xxx 未訂閱
http://delphi.ktop.com.tw/board.php?cid=30&fid=72&tid=85340
站裡有很多類似的方法,請多用搜尋功能~
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-01-09 10:40:16 IP:210.69.xxx.xxx 未訂閱
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
Py
一般會員


發表:3
回覆:7
積分:2
註冊:2006-07-08

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-01-09 12:20:08 IP:60.191.xxx.xxx 訂閱
謝謝兩位的熱心指教,不過好像並不完全是我所需要的,兩位所提方法解決的是不重複執行同一程式的問題,但如何在重複執行時,把原先已經運行的程式結束呢?
結束原先的程式,最好不是直接Kill掉,而是設法讓它自行結束。
還請不吝指教,謝謝!
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-01-09 14:12:36 IP:61.219.xxx.xxx 未訂閱
//刪除別的執行中程式的方法
uses Tlhelp32;
function 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 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 TForm1.FormCreate(Sender: TObject);
begin
if FindProcess('notepad.exe') then
begin
EndProcess('notepad.exe');
end;
end;
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-01-09 14:14:34 IP:61.219.xxx.xxx 未訂閱
> 結束原先的程式,最好不是直接Kill掉,而是設法讓它自行結束。
除非您能很清楚您的程式可能因為什麼原因無法自行結束, 或許還可能有點機會設法讓它自行結束, 否則應該不太可能讓他自行結束
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
Coffee
版主


發表:31
回覆:878
積分:561
註冊:2006-11-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-01-09 14:23:07 IP:220.130.xxx.xxx 訂閱
在程式中起一個Thread去Monitor,看你要Monitor message還是一個txt file or db之類的
當Thread收到Signal時就去啟動你自己程式中的正常結束程序
第二次執行的process就確保第一個先死,自己再死的原則就可以了
------
不論是否我發的文,在能力範圍皆很樂意為大家回答問題。
為了補我的能力不足之處,以及讓答案可以被重複的使用,希望大家能儘量以公開的方式問問題。
在引述到我的文時自然會儘量替各位想辦法,謝謝大家!
Py
一般會員


發表:3
回覆:7
積分:2
註冊:2006-07-08

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-01-10 09:49:47 IP:60.191.xxx.xxx 訂閱
非常感謝Stallion、pcboy2、Coffee的熱心幫助,謝謝了。
系統時間:2024-04-25 17:38:45
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!