1. 程式人生 > >修改主視窗的類名來防止程式執行多個例項

修改主視窗的類名來防止程式執行多個例項

修改主視窗的類鳴來防止程式執行多個例項 防止程式啟動多個例項有很多方法:
  • 建立互斥體;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;
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;