Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.035 c
14-1080994553
Romario
2004-04-03 16:15
2004.04.25
Двоично-десятичное представление числа.


1-1081511947
Артем
2004-04-09 15:59
2004.04.25
Webbrowser


14-1081176951
Digitman
2004-04-05 18:55
2004.04.25
Роль полит.лидеров в становлении/крахе отеч.комп.индустрии


1-1081249456
Назаров Евгений
2004-04-06 15:04
2004.04.25
Сравнение строк


1-1081452005
Yong
2004-04-08 23:20
2004.04.25
Как уменьшить размер ехе-шника без визуальных компонентов





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский