Главная страница
    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.038 c
7-1077382967
Maxkat
2004-02-21 20:02
2004.04.25
Установка программ


14-1080804199
Nikolay M.
2004-04-01 11:23
2004.04.25
1 апреля в СМИ


14-1080732293
Knight
2004-03-31 15:24
2004.04.25
Поделитесь способами отлова неизвестных вирусов...


1-1081415231
Vovas
2004-04-08 13:07
2004.04.25
Как привести форму-предок к типу формы-потомка?


14-1081146561
Rouse_
2004-04-05 10:29
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский