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

如何防止*.exe被執行多次(只能執行一次)

答題得分者是:RaynorPao
jesson
一般會員


發表:11
回覆:16
積分:5
註冊:2002-04-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-07-30 11:26:26 IP:210.66.xxx.xxx 訂閱
各位前輩您好:

請問各位前輩,小弟是用BCB作為程式開發工具,但如何在程式中要加入什麼,才可以防止執行檔被多次執行(有些人就是會手養),
多次執行後,會發生工作管理中的處理程序有多個此執行檔,但畫面中只有一個(正在使用的那一個執行檔),此時就會發生Run Error的不可預期的錯誤事件;
請各位前輩賜教,深感謝意囉~~~
RaynorPao
版主


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-07-30 12:41:26 IP:210.208.xxx.xxx 未訂閱
 加入以下這段程式碼,看看是否有用?

[code cpp]
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
Application->Title=Caption;

HANDLE hPrevInst;
String szAppTitle;
HANDLE hMutex;

hMutex=OpenMutex(SYNCHRONIZE, false, Application->Title.c_str());
if(hMutex!=NULL)
{
szAppTitle=Application->Title;
SetWindowText(Application->Handle, NULL);
hPrevInst=FindWindow("TApplication", szAppTitle.c_str());
if(hPrevInst!=0)
{
if(IsIconic(hPrevInst))
{
ShowWindow(hPrevInst, SW_RESTORE);
}
else
{
BringWindowToTop(hPrevInst);
}
SetForegroundWindow(hPrevInst);
}
Application->ShowMainForm=false;
Application->Terminate();
}
else
{
CreateMutex(NULL, false, Application->Title.c_str());
}
}
[/code]
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
編輯記錄
RaynorPao 重新編輯於 2008-07-30 13:44:35, 註解 無‧
jesson
一般會員


發表:11
回覆:16
積分:5
註冊:2002-04-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-07-30 13:24:25 IP:210.66.xxx.xxx 訂閱
   感謝 前輩 您的回答,小弟測試過這方法的確可行,所以分數給了前輩您;但請容許龜毛一下,
因為BCB的Project ==>WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { ShowLogo();... }中小弟有Show Logo,
所以仍會看到Logo顯示幾秒(設定5秒)後,才會將Project.exe結束掉;因此在這請教是否有更好的方法,可以讓Logo都不用Show讓多次的Project.exe在背景自己作開啟->檢察->結束的動錯~~懇請賜教
系統時間:2024-04-18 9:20:39
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!