可以利用向系統添加全域原子的方法,來防止多個程式執行個體的運行。全域原子由Windows 系統負責維持,它能保證其中的每個原子都是唯一的,管理其引用計數,並且當該全域原子的引用計數為0時,從記憶體中清除。我們用GlobalAddAtom 函數向全域原子添加一個255個位元組以內的字串,用GlobalFindAtom來檢查是否已經存在該全域原子,最後在程式結束時用GlobalDeleteAtom函數刪除添加的全域原子。樣本如下:
Uses Windows
const iAtom=‘SingleApp’;
begin
if GlobalFindAtom(iAtom)=0 then
begin
GlobalAddAtom(iAtom);
Application.Initialize;
Application.CreateForm(TForm1,Form1);
Application.Run;
GlobalDeleteAtom(GlobalFindAtom(iAtom));
end
else
MessageBox(0,‘You can not run a second copy of this App’,‘’,mb_OK);
end.
利用全域原子的引用計數規則,我們還可以判斷當前共運行了該程式的多少個執行個體:
var i:Integer;
begin
I:=0;
while GlobalFindAtom(iAtom)<>0 do
begin
GlobalDeleteAtom(GlobalFindAtom(iAtom));
i:=i+1;
end;
ShowMessage(IntToStr(I));
end;
以上幾種方法在筆者的Delphi 4.0,中文Windows95下通過。