![]() |
|
|
Регистрация | << Правила форума >> | 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
|
||||
|
||||
![]() Почему в обоих вариантах, при запуске дублирующей копии, выполняется модуль с дополнительным потоком?
|
#7
|
||||
|
||||
![]() И где дополнительные потоки?
|
#8
|
||||
|
||||
![]() Код:
unit Unit2; interface uses Classes; type ttest = class(TThread) private { Private declarations } protected procedure Execute; override; end; var test: ttest; implementation procedure ttest.Execute; var FileVar:TextFile; begin AssignFile(FileVar, 'D:\Test.txt'); Rewrite(FileVar); CloseFile(FileVar); end; initialization test := ttest.Create; end. Последний раз редактировалось lmikle, 15.06.2011 в 22:37. |
#9
|
||||
|
||||
![]() При варианте Gravitas'a выполняется (при запуске дублирующей копии программы) процедура FormCreate главного модуля (с формой).
Цитата:
Цитата:
|