|
|
Регистрация | << Правила форума >> | 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. |