Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.25;
Скачать: CL | DM;

Вниз

запускать только одну копию программы...   Найти похожие ветки 

 
hawkins   (2004-04-07 14:42) [0]

Всем привет! Проблема такая: Хочу сделать возможность запускать только одну копию программы. После запуска первого же экземпляра появляется окно про-мы и тут же закрывается. В чем тут дело?
Делаю так:

 program Project1;
   uses Forms,Windows,
     Unit1 in "Unit1.pas" {Form1} ;
    {$R *.RES}

 var hwin:HWND;

   begin
    hwin:=FindWindow("TForm1","Form1");
      if hwin<>0 then begin
       SetForegroundWindow(hwin);
      Application.Terminate;
     end;
   Application.Initialize;
   Application.CreateForm(TForm1, Form1);
   Application.Run;
end.


 
panov ©   (2004-04-07 15:03) [1]

Слов больше нет.

http://delphimaster.net/view/1-1081149715/
http://delphimaster.net/view/1-1081149715/


 
Leonid ©   (2004-04-07 15:23) [2]

Вот нужный модуль.
Подключи его первым в секции Uses главной формы

unit MultInst;

interface

Uses Forms,Windows,Dialogs,SysUtils;
Function BroadcastSystemMessage(Flags:DWord;Recipients:PDWord;
        uiMessage:UInt;wwParam:wParam;llParam:lParam):LongInt;
        stdCall;External "User32.dll";
Const
    Mi_No_Error=0;
    Mi_Fail_SubClass=1;
    Mi_Fail_Create_Mutex=2;

Function GetMIError:Integer; //контроль ошибки при запуске приложения

implementation

Const
    UniqueAppStr:PChar="ShmWinEXE";
Var
  MessageID:Integer;
  WProc:TFNWndProc=nil;
  MutHandle:THandle=0;
  MiError:Integer=0;
Function GetMIError:Integer; //контроль ошибки при запуске приложения
begin
Result:=MIError
end;
//------------------------------------------------------------------------------
Function NewWndProc(Handle:hWnd;Msg:Integer;wParam,lParam:LongInt):LongInt;StdCall;
begin
if Msg=MessageID then //это-зарегистрированое сообщение
  begin
  if IsIconic(Application.Handle) then //если главная форма свёрнута-восстановить
      begin
//       Application.MainForm.WindowState:=wsMaximized;
      Application.Restore;
      end;
      SetForeGroundWindow(Application.MainForm.Handle);
   end
   else
   Result:=CallWindowProc(wProc,Handle,Msg,wParam,lParam);
end;
//------------------------------------------------------------------------------
Procedure SubClassApplication;
begin  //замена оконной процедуры
wProc:=TFNWndProc(SetWindowLong(Application.Handle,GWL_WNDPROC,LongInt(@NewWndProc)));
if wProc=nil then   //условие ошибки
  MiError:=MiError or Mi_Fail_SubClass;
end;
//------------------------------------------------------------------------------
Procedure DoFirstInstance;
begin
SubClassApplication;
MutHandle:=CreateMutex(nil,false,UniqueAppStr);
if MutHandle=0 then
  MiError:=MiError or Mi_Fail_Create_Mutex;
end;
//------------------------------------------------------------------------------
Procedure BroadcastFocusMessage;
Var
  BSMRecipients:DWord;
begin
Application.ShowmainForm:=false;
BSMRecipients:=BSM_APPLICATIONS;
BroadcastSystemMessage(BSF_IGNORECURRENTTASK or BSF_POSTMESSAGE,
                      @BSMRecipients,MessageID,0,0);
Application.Terminate;
end;
//------------------------------------------------------------------------------
Procedure InitInstance;
begin
MutHandle:=OpenMutex(MUTEX_ALL_ACCESS,false,UniqueAppStr);
if MutHandle=0 then
  DoFirstInstance
  else
  BroadcastFocusMessage;
end;
//------------------------------------------------------------------------------
initialization
MessageID:=RegisterWindowMessage(UniqueAppStr);
InitInstance;
finalization
if wProc <> nil then
  SetWindowLong(Application.Handle,GWL_WNDPROC,LongInt(wProc));
end.



Страницы: 1 вся ветка

Текущий архив: 2004.04.25;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.063 c
14-1081106583
Феликс
2004-04-04 23:23
2004.04.25
Вопрос про определение градуса с картинкой.


6-1077882018
sucer
2004-02-27 14:40
2004.04.25
Как проверить подключен ли сейчас к сети комп c ip 192.168.x.y?


3-1080371614
VitGun
2004-03-27 10:13
2004.04.25
Грабли с запросом


3-1080391582
Karlson
2004-03-27 15:46
2004.04.25
ВЫзов метода DBGrid1CellClick из любого места программы


1-1081091132
er
2004-04-04 19:05
2004.04.25
Алгоритм для составления комбинаций массива.