![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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. |
|
#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 главного модуля (с формой).
Цитата:
Цитата:
|