![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Повторный запуск [D7, WinXP]
Volumer © (2005-07-12 19:42:00)Как можно отследить повторный запуск программы и передать фокус уже запущеной, а копию закрыть?
BiN (2005-07-12 20:59:00) [21]Имхо, самый верный ответ - в посте [1].
Только я бы еще в эту секцию записал значение хэндла окна, которому нужно передать фокус в сабжевой ситуации.
Alexander Panov (2005-07-12 20:46:00) [22]Starcom (12.07.05 19:50) [1]
Starcom (12.07.05 20:05) [5]
Нет перевода окна в активное состояние.
Квэнди © (12.07.05 19:55) [3]
Попробуй так свернутое окно?
Starcom (2005-07-12 20:05:00) [23]То Цвай!
program Project1;
uses
Forms,
Windows, // Обязательно !!
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
var
MutexHandle : THandle;
const
MutexName = 'one_inst_demo_mutex';
begin
// Пробуем открыть Mutex по имени
MutexHandle := OpenMutex(MUTEX_ALL_ACCESS, false, MutexName);
if MutexHandle <> 0 then begin
// Копия нашего приложения уже запущена - Mutex уже есть
CloseHandle(MutexHandle);
halt;
end;
// Создание Mutex
MutexHandle := CreateMutex(nil, false, MutexName);
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
// Уничтожаем наш Mutex при завершении приложения
CloseHandle(MutexHandle);
end.
Poirot (2005-07-12 20:02:00) [24]А искать видимо не научили или плохи читали то, что написано перед тем как новый топик создавать?:)) Целая статья тут есть на эту тему:) гы:) и LOL :)
Квэнди (2005-07-12 19:55:00) [25]program Project1;
uses
Forms,
Windows,
Unit1 in 'Unit1.pas' {Form1};
{$R *.RES}
var
hwnd: THandle;
begin
hwnd := FindWindow('TForm1', 'Form1');
if hwnd = 0 then
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end
else
SetForegroundWindow(hwnd)
end.
Fay (2005-07-12 19:52:00) [26]2 Starcom (12.07.05 19:50) [1]
// Попытаемся создать файл в памяти
Интересное заявление 8)
Starcom (2005-07-12 19:50:00) [27]program Project1;
uses
Windows, // Обязательно
Forms,
Unit1 in 'Unit1.pas' {Form1};
{$R *.RES}
Const
MemFileSize = 1024;
MemFileName = 'one_inst_demo_memfile';
Var
MemHnd : HWND;
begin
// Попытаемся создать файл в памяти
MemHnd := CreateFileMapping(HWND($FFFFFFFF),
nil,
PAGE_READWRITE,
0,
MemFileSize,
MemFileName);
// Если файл не существовал запускаем приложение
if GetLastError<>ERROR_ALREADY_EXISTS then
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end;
CloseHandle(MemHnd);
end.