![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
![]() Нужно чтобы запуск дублирующей копии программы приводил к отображению главного окна первой копии программы и завершению дублирующей копии программы. Хотелось бы чтобы код выглядел примерно следующим образом:
Цитата:
|
#2
|
|||
|
|||
![]() |
#3
|
||||
|
||||
![]() попытался написать код, которого нет в google на каждом шагу:
Код:
program Project1; uses Windows, Forms, Unit1 in 'Unit1.pas' {Form1}; {$R *.res} type PGlobalData = ^DWORD; const FileMappingName: PChar = 'Shared_Memory_Project1'; var GlobalAtom: ATOM; FileMappingHandle: THandle; GlobalData: PGlobalData = nil; begin FileMappingHandle:=CreateFileMapping($ffffffff, nil, PAGE_READWRITE, 0, SizeOf(DWORD), FileMappingName); GlobalData:=MapViewOfFile(FileMappingHandle, FILE_MAP_ALL_ACCESS, 0, 0, SizeOf(DWORD)); try if GlobalFindAtom('AtomProject1')=0 then begin GlobalAtom:=GlobalAddAtom('AtomProject1'); try begin Application.Initialize; Application.CreateForm(TForm1, Form1); GlobalData^:=Application.Handle; Application.Run; end; finally GlobalDeleteAtom(GlobalAtom); end; end else SetForegroundWindow(GlobalData^); finally UnmapViewOfFile(GlobalData); CloseHandle(FileMappingHandle); end; end. Пишу программы за еду. __________________ |
#4
|
||||
|
||||
![]() Код:
program Project1; uses Forms, Unit1 in 'Unit1.pas' {Form1}; {$R *.res} begin if FindWindow('TForm1', 'Form1') <> then begin SetForegroundWindow(FindWindow('TForm1', 'Form1')); Application.Terminated; end; Application.Initialize; Application.MainFormOnTaskbar := True; Application.CreateForm(TForm1, Form1); Application.Run; end. Gravitas |
#5
|
||||
|
||||
![]() Спасибо господа!
|
#6
|
||||
|
||||
![]() Почему в обоих вариантах, при запуске дублирующей копии, выполняется модуль с дополнительным потоком?
|