Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Повторный запуск [D7, WinXP]


Страницы:   1 2

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.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо