Вниз
Скачать: CL | DM;

Узнать, что программа уже запущена   Найти похожие ветки 

← →
Song   (2001-12-02 22:50) [0]

Проблема в следующем: нужно определить, что приложение уже запущено.
Есть два варианта:
1. HPrevInst
2. CreateMutex

1. В D6 не работает почти (компилятор пишет, что данная возморжность добавлена только для совместимости).
2. Метод мутексов с двумя активными семафорами (для Win32). Код есть (вроде рабочий - с сайта Дельфи: Вокруг да около), но CreateMutex не понимается компилятором...

Ещё идеи? Буду благодарен.


← →
paul_shmakov ©   (2001-12-03 00:26) [1]

uses Windows;


← →
Song   (2001-12-03 09:11) [2]

Я включал этот модуль в Uses, не помогает, не находит


← →
Donal ©   (2001-12-03 10:26) [3]

попробуй через Memory Mapped Files... заодно и хэндл туда можешь записать :-) А дельфя 6 у тебя полная? а то я слышал про обрезанную бесплатную версию :-)


← →
retalik   (2001-12-03 13:57) [4]

Привет!
Дело не D6, а в том, что в Win32 этот параметр оставлен для совместимости.
Он всегда равен нулю, так что этот способ не работает.
Про memory-mapped files совет дельный, но проще через разшаренный сегмент памяти (как это сделать - вам виднее, вы дельфисты :)

Хорошая статья переведена на эту тему на rsdn:
http://rsdn.ru/article/?baseserv/avins.xml



← →
drAKon   (2001-12-03 20:56) [5]

Как я понимаю, ты хочешь убрать запуск второго экземпляра приложения. У меня это сделано так:

1. В dpr файле пишешь (подставляя свои window class и caption):
begin
MHandle:=FindWindow("Window class","Caption");
if MHandle<>0 then
if SendMessage(MHandle, WM_USER+1, 0, 0) = 1 then
halt;


2. В форме пишешь обработчик мессаги WM_USER+1, в которой просто возвращаешь 1, и, если нужно, делаешь Application.BringToFront

В принципе можно сделать и проще - if MHandle<>0 then halt, но тогда приложение не будет запускаться при запущенном Делфи (потому что такое же окно создается дизайнером Делфи)


← →
Oleg Gashev ©   (2001-12-03 23:15) [6]

->drAKon
А если это SDI/MDI и Caption другой?


← →
Raptor ©   (2001-12-04 00:24) [7]

Привет!

2drAKon
Этот метод никуда не годится. Он может не сработать. Иди по ссылке которую дал drAKon. Это одна и лучших статей на эту тему. Там, кстати, описывается почему предложеный тобой метод может не сработать.

2Song
>>но CreateMutex не понимается компилятором...
Причем здесь компилятор. Импортируй эту функцию из ДЛЛ и пользуй. Например так.
function CreateMutex; external "kernel32.dll" name "CreateMutexA";
а потом
CreateMutex(...)

Raptor.
`


← →
Donal ©   (2001-12-04 10:37) [8]

Дельфя должна импортировать эту функцию :-) Она импортирована в модуле Windows.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.008 c
1-99936
Света Н.
2002-01-12 14:02
2002.01.31
Помогите правильно сделать отчет!!!!!


4-100097
DeUnDe
2001-11-24 23:22
2002.01.31
Как программно посмотреть повторяются ли строки в listbox’е или нет?


1-100005
AndreyP
2002-01-15 10:32
2002.01.31
Количество принтеров в системе


4-100094
Русский
2001-11-30 20:49
2002.01.31
Самый крутой и прикольный вопрос по API :-D


7-100086
Кенгуру
2001-10-14 16:58
2002.01.31
Как из Дельфи отследить нажатия на клавиши MIDI клавиатуры ?




   Наверх