防止程式重覆執行 |
答題得分者是:axsoft
|
kenbcb
中階會員 發表:171 回覆:129 積分:60 註冊:2003-07-15 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
kenbcb您好:
您來KTop也蠻久的,搜尋的功能也該熟悉囉
http://delphi.ktop.com.tw/topic.php?topic_id=24297
請問如何防止程式重複執行? BY wzl
http://delphi.ktop.com.tw/topic.php?topic_id=24350
【發表】有關防止程式重複執行的一些心得 BY jessechan 順心 <>~我也是在學習的階段,回答的不好請您多多見諒與指教~>
|
kenbcb
中階會員 發表:171 回覆:129 積分:60 註冊:2003-07-15 發送簡訊給我 |
|
axsoft
版主 發表:681 回覆:1056 積分:969 註冊:2002-03-13 發送簡訊給我 |
KenBCB您好: 試試看這個方法
範例下載: http://delphi.ktop.com.tw/loadfile.php?TOPICID=11492747&CC=257033
//--------------------------------------------------------------------------- // 程式名稱: CreateMutexDemo.cpp // 作 者: axsoft // 執行環境: windows XP SPS C Builder 5 Update1 //--------------------------------------------------------------------------- #include /*開心的事情別隱藏在心裡,分享給別人知道會更快樂的*/ /*得到新知識別隱藏在心裡,分享給別人了解會更清楚的*/發表人 - axsoft 於 2003/09/01 12:12:41 |
axsoft
版主 發表:681 回覆:1056 積分:969 註冊:2002-03-13 發送簡訊給我 |
如何寫一個Windows應用程式,讓他只執行一次。
--------------------------------------------------------------------------------
作者:szu (michael liang)
資料來源:高市資教-陽光之都 BBS
http://bbs.kh.edu.tw/treasure/Programs/M.991654847.A/M.995983133.A.html
第一種方法(利用FindWindow()): 環境 C Builder Application->Title = ""; HWND hPrevApp = ::FindWindow(NULL, "Title"); //或是寫成HWND hPrevApp = ::FindWindow("Class", NULL); //或是寫成HWND hPrevApp = ::FindWindow("Class", "Title"); if(hPrevApp) { PostMessage(hPrevApp, WM_SYSCOMMAND, SC_RESTORE, 0); return 0; } else { Application->Title = "Title"; } ------------------------------------------------------------------------- 第二種方法(利用FindWindow()): if(FindWindow(NULL, 應用程式的Title)) { return 0; } ------------------------------------------------------------------------- 第三種方法(利用Global Atom Table): ATOM atom; if(GlobalFindAtom("PROGRAM_RUNNING") == 0) { atom = GlobalAddAtom("PROGRAM_RUNNING"); } else { return 0; } 在程式最後請加上 GlobalDeleteAtom(atom); ------------------------------------------------------------------------ 第四種方法(利用Mutex): HANDLE handle = CreateMutex(NULL, false, "MutexName"); DWORD error = GetLastError(); if(error == ERROR_ALREADY_EXISTS ) { return 0; } 記得在程式最後面加入 ReleaseMutex(handle); ------------------------------------------------------------------------ 第五種方法(利用Semaphore): HANDLE handle = CreateSemaphore(NULL, 1, 1, "SemaphoreName"); DWORD error = GetLastError(); if(error == ERROR_ALREADY_EXISTS ) { return 0; } 記得在程式最後面加入 ReleaseSemaphore(handle, 1, NULL); -------------------------------------------------------------------- 以上程式受到智慧財產權的保護, permission to use, copy, modify, and distribute. 但請註明來源出處,不可用於商業用途。 -------------------------------------------------------------------- /*開心的事情別隱藏在心裡,分享給別人知道會更快樂的*/ /*得到新知識別隱藏在心裡,分享給別人了解會更清楚的*/ |
Dot.com
一般會員 發表:19 回覆:18 積分:7 註冊:2003-07-03 發送簡訊給我 |
var
FWHandle:THandle;
begin
FWHandle:=FindWindow(nil, pchar('ABC'));
if FWHandle<>0 then
begin
ShowWindow(FWHandle,SW_SHOW); //显示
SetForegroundWindow(FWHandle); //取得焦点。
application.terminate;
end
else begin
Application.Initialize;
Application.Title := 'ABC'; //原 Title 不能是 'ABC'
Application.CreateForm(TForm1, Form1);
Application.Run;
end;
end. 發表人 - Dot.com 於 2003/12/14 08:57:21
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |