![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Задача: иметь один exe, два процесса, и возможность каждого из них проверять наличие другого.
Если брать более широко: каждый из двух процессов должен проверять активность другого, если присутствует только один, то он сразу запускает второй. При этом исключить возможность запуска третьего (опционально). С чего начинать, если приложение не содержит формы? |
|
#2
|
||||
|
||||
|
Простейшее решение, особо не заморачиваясь. Сделать конфиг-файл, куда писать инфу о запуске файла. Каждый экземпляр при запуске проверяет этот файлик и дальше по вашему алгоритму.
Тоже самое можно писать в реестр, но я не сторонник засорения реестра. |
|
#3
|
|||
|
|||
|
Гугл все разрешил.
Решил более нестандартно + без лишних файлов Код:
var AtomText: array[0..31] of Char; Код:
procedure LookForPreviousInstance;
var
PreviousInstanceWindow : hWnd;
AppName : array[0..30] of char;
FoundAtom : TAtom;
begin
FoundAtom := GlobalFindAtom(pchar('pekpek2'+Application.Title));
if FoundAtom = 0 then begin
//WinExec('1.exe', sw_normal);
FoundAtom := GlobalAddAtom(pchar('pekpek2'+Application.Title));
Form1.Caption:='pekpek2';
exit;
end;
FoundAtom := GlobalFindAtom(pchar('pekpek1'+Application.Title));
if FoundAtom = 0 then begin
//WinExec('1.exe', sw_normal);
FoundAtom := GlobalAddAtom(pchar('pekpek1'+Application.Title));
Form1.Caption:='pekpek1';
end;
end;Удаление атома: Код:
GlobalDeleteAtom(GlobalFindAtom((pchar('pekpek1'+Application.Title))));Последний раз редактировалось ImDoode, 07.02.2013 в 17:52. |