修改主視窗的類名來防止程式執行多個例項
阿新 • • 發佈:2019-01-23
修改主視窗的類鳴來防止程式執行多個例項
防止程式啟動多個例項有很多方法:
const CM_RESTORE = WM_USER + $1000;{自定義的“恢復訊息”}
myappname=''test'';//自定義一個視窗類名 2. 在public中新增定義
procedure CreateParams(var params:TCreateParams);override;
procedure RestoreRequest(var Message:TMessage);Message CM_RESTORE;
3.在 implementation實現部分中新增:
procedure TForm1.CreateParams(var params:TCreateParams);
begin
inherited CreateParams(params);
//重新指定類名
params.WinClassName := myappname;
end; procedure TForm1.RestoreRequest(var Message:TMessage);
begin
if (IsIconic(Application.Handle) = ture) then
Application.Restore;
else
Application.BringToFront;
end;
4.在主程式的uses增加:
Windows,messages; 5.在主程式的begin前宣告以下變數:
var
myhandle :HWnd;
const CM_RESTORE = WM_USER + $1000;
myappname = ''test''; 6. 在主程式的 Application.Initialize 前新增以下程式碼:
myhandle := FindWindow(myappname,nil);
if (myhandle>0) then
begin
MessageBox(0,''該程式已經在執行'',''執行訊息'',0);
PostMessage(myhandle,CM_RESTORE,0,0);
end;
- 建立互斥體;hmutex:=createmutex(nil,false,pchar(application.Title));
- 全域性原子 GlobalAddAtom(iAtom); GlobalFindAtom(iAtom)
- 查詢窗體
這裡介紹最後一個方法,有時間把前面的方法放出來.
1.在form單元介面部分“interface”新增:const CM_RESTORE = WM_USER + $1000;{自定義的“恢復訊息”}
myappname=''test'';//自定義一個視窗類名 2. 在public中新增定義
procedure CreateParams(var params:TCreateParams);override;
procedure RestoreRequest(var Message:TMessage);Message CM_RESTORE;
procedure TForm1.CreateParams(var params:TCreateParams);
begin
inherited CreateParams(params);
//重新指定類名
params.WinClassName := myappname;
end; procedure TForm1.RestoreRequest(var Message:TMessage);
begin
if (IsIconic(Application.Handle) = ture) then
Application.Restore;
else
Application.BringToFront;
end;
Windows,messages; 5.在主程式的begin前宣告以下變數:
var
myhandle :HWnd;
const CM_RESTORE = WM_USER + $1000;
myappname = ''test''; 6. 在主程式的 Application.Initialize 前新增以下程式碼:
myhandle := FindWindow(myappname,nil);
if (myhandle>0) then
begin
MessageBox(0,''該程式已經在執行'',''執行訊息'',0);
PostMessage(myhandle,CM_RESTORE,0,0);
end;