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

兩個程式互相不重覆執行

尚未結案
papjaj
一般會員


發表:11
回覆:15
積分:5
註冊:2007-01-29

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-01-14 17:03:51 IP:219.87.xxx.xxx 訂閱
各位大大,我利用在板上找到的code達到不能重覆執行同一個程式的效果
我的程式如下:
[code cpp]
Application->Title = this->Caption;
HANDLE PrevInstHandle;
HANDLE Mutex = OpenMutex(SYNCHRONIZE , false , Application->Title.c_str());

if (Mutex != NULL)
{
AnsiString strAppTitle = Application->Title;
SetWindowText(Application->Handle , NULL);
PrevInstHandle = FindWindow("TApplication" , strAppTitle.c_str());
if (PrevInstHandle != 0)
{
if (IsIconic(PrevInstHandle))
ShowWindow(PrevInstHandle, SW_RESTORE);
else
BringWindowToTop(PrevInstHandle);

SetForegroundWindow(PrevInstHandle);
}
Application->ShowMainForm = false;
Application->Terminate();
}
else
CreateMutex(NULL , false , Application->Title.c_str());

[/code]
但是現在遇到的另一個問題,
現在有兩個程式,分別為s1及s2
兩個程式都能控制同一個硬體
但是現在必須讓s2的權限大於s1
於是必須達到以下兩種情形:
1.s1先開啟
此時再開啟s2,必須要能把s1關閉,並執行s2

2.s2先開啟
此時再開啟s1,則s1的執行動作被忽略,繼續保持s2的執行

上面兩種情況是否能用我現在使用的這個code下去修改?
或是需要使用別的方式來達到我需要的功能?
編輯記錄
papjaj 重新編輯於 2009-01-14 17:05:26, 註解 無‧
papjaj 重新編輯於 2009-01-14 17:06:28, 註解 無‧
papjaj 重新編輯於 2009-01-14 17:08:09, 註解 無‧
zhgwbzhd
一般會員


發表:10
回覆:32
積分:18
註冊:2008-07-24

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-01-15 21:28:43 IP:221.218.xxx.xxx 未訂閱
我認為完全可以啊。
隻要在啓動S1時,找一下有沒有S2即可,有就不啓動,沒有就啓動。
在啓動S2時,找一下有沒有S1,有就關閉S1.沒有就直接啓動。

===================引 用 papjaj 文 章===================
各位大大,我利用在板上找到的code達到不能重覆執行同一個程式的效果
我的程式如下:
[code cpp]
Application->Title = this->Caption;
HANDLE PrevInstHandle;
HANDLE Mutex = OpenMutex(SYNCHRONIZE , false , Application->Title.c_str());

if (Mutex != NULL)
{
AnsiString strAppTitle = Application->Title;
SetWindowText(Application->Handle , NULL);
PrevInstHandle = FindWindow("TApplication" , strAppTitle.c_str());
if (PrevInstHandle != 0)
{
if (IsIconic(PrevInstHandle))
ShowWindow(PrevInstHandle, SW_RESTORE);
else
BringWindowToTop(PrevInstHandle);

SetForegroundWindow(PrevInstHandle);
}
Application->ShowMainForm = false;
Application->Terminate();
}
else
CreateMutex(NULL , false , Application->Title.c_str());

[/code]
但是現在遇到的另一個問題,
現在有兩個程式,分別為s1及s2
兩個程式都能控制同一個硬體
但是現在必須讓s2的權限大於s1
於是必須達到以下兩種情形:
1.s1先開啟
此時再開啟s2,必須要能把s1關閉,並執行s2

2.s2先開啟
此時再開啟s1,則s1的執行動作被忽略,繼續保持s2的執行

上面兩種情況是否能用我現在使用的這個code下去修改?
或是需要使用別的方式來達到我需要的功能?
papjaj
一般會員


發表:11
回覆:15
積分:5
註冊:2007-01-29

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-01-15 22:38:51 IP:220.132.xxx.xxx 訂閱
謝謝這位大大的方法
但是現在有個很大的問題...
s1是個已經被大量發出去的軟體
而且沒有辨法強制已經有s1的人一定要更新成新版(也就是能判斷s2是否存在版本)
加上有s1的也有可能使用s2
===================引 用 zhgwbzhd 文 章===================
我認為完全可以啊。
隻要在啓動S1時,找一下有沒有S2即可,有就不啓動,沒有就啓動。
在啓動S2時,找一下有沒有S1,有就關閉S1.沒有就直接啓動。

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