3、防止屢次載入應用程序實例
某些應用程序須要禁止用戶載入屢次實例。好比,控制面板中的應用程序,無論用戶打開多少次,同一應用程序只有一個實例,並且每一次試圖重複打開都會自動激活已經存在的實例。
Windows API 提供了函數FindWindow,能夠是應用程序在啓動時檢查本身是否已經存在。
該函數在Delphi中的語法是:
function FindWindow(lpClassName: PChar, lpWindowName: PChar): HWND;
其中,參數lpCalssName 是要查找的窗口的類的名稱,參數lpWindowName是要查找的窗口的標題(Caption)。 若是找到了相應的窗口實例,將返回一個非0 的該窗口句柄的整型值,不然返回0 。所以,只要判斷應用程序的主窗口(或者伴隨着應用程序存在而存在的窗口)是否存在就能夠判斷是否已經有實例存在了。
例如:
H := FindWindow('TForm1', nil);
if H = 0 then begin
ShowMessage('沒有發現相同的應用程序實例。');
//加入加載應用程序的語句
//...
end else begin
ShowMessage('應用程序已經加載。');
SetActiveWindow(H);
end;
其中,參數lpWindowName的位置以Delphi保留字nil 代替,是由於窗口的標題可能在應用程序中是變化的。Windows API 函數SetActiveWindow 用於指定活動窗口。轉自bbs.sendsms.cn函數