Запретить повторный запуск приложения

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
ThePPK
Посетитель
Сообщения: 30
Зарегистрирован: 19 Сентябрь 2010, 21:54

Запретить повторный запуск приложения

Сообщение ThePPK »

Пытаюсь запретить повторный запуск приложения, т.к. пользователи любят свернуть приложение, не найти его, и открыть новое, в результате чего возникают проблемы.
Нашел код, который прилагаю ниже. Он действительно запрещает повторный запуск, но хотелось бы, чтобы он не делал это молча, а выдавал сообщение "Программа уже запущена" и только потом завершался. Подскажите, пожалуйста, как это можно сделать.

Код: Выделить всё

#! -------------------------------------------------------------------------- #!
#EXTENSION(OneInstace,'Limits application to one start.'),APPLICATION
#BOXED('OneInstance')
#DISPLAY('Freeware for clarion community')
#PROMPT('Window Name:',@S20),%ApplicName,REQ
#ENDBOXED

#AT(%GlobalData)
 Include('cwsynchm.inc'),once
Limiter &IMutex,auto, thread
Result Signed,auto
hwndApp   UNSIGNED
szTitle   CSTRING( '%ApplicName')
ProgramStarted Byte
#ENDAT

#AT(%GlobalMap)
MODULE('WINAPI')
    FindWindow(<*CSTRING lpClassName>, |
                    *CSTRING lpWindowName), |
                    UNSIGNED,PASCAL,RAW,NAME('FindWindowA')
    IsIconic(UNSIGNED),BOOL,PASCAL
    ShowWindow(UNSIGNED, SIGNED nCmdShow),BOOL,PASCAL,PROC
    SetForegroundWindow(UNSIGNED),BOOL,PASCAL,PROC
End
#ENDAT


#AT(%ProgramEnd)
If ProgramStarted
  Limiter.Release()
  Limiter.Kill()
End
#ENDAT

#AT(%ProgramSetup)
Limiter &= NewMutex('thisApp')

If Limiter &= NULL
  Message('Error: Mutex cannot be created')
  Return
Else
  Result = Limiter.TryWait(50)
  If Result <= WAIT:Ok
    ProgramStarted = True
   Elsif Result = WAIT:TIMEOUT
    hwndApp = FindWindow(, szTitle)
    IF hwndApp
     IF IsIconic(hwndApp)
       ShowWindow(hwndApp, 1)
     ELSE
       SetForegroundWindow(hwndApp)
     END
    END
    Return
  Else
    Message('Wait failed')
    Return
  End
End


#ENDAT

#!-------------------------------------------------------------------------------
Аватара пользователя
Admin
Администратор
Сообщения: 4010
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 53 раза
Поблагодарили: 33 раза
Контактная информация:

Re: Запретить повторный запуск приложения

Сообщение Admin »

Код: Выделить всё

IF hwndApp
  MESSAGE('Программа уже запущена','Внимание',ICON:Asterisk)
  IF IsIconic(hwndApp)
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
ThePPK
Посетитель
Сообщения: 30
Зарегистрирован: 19 Сентябрь 2010, 21:54

Re: Запретить повторный запуск приложения

Сообщение ThePPK »

Большое спасибо за ответ! Извините за форматирование, впредь буду делать.
ThePPK
Посетитель
Сообщения: 30
Зарегистрирован: 19 Сентябрь 2010, 21:54

Re: Запретить повторный запуск приложения

Сообщение ThePPK »

На первое время решение подошло, но теперь пользователи просят усовершенствование.

Дело в том, что у нас три разных exe-шника (разные части АРМа). Соответственно, нужно, чтобы нельзя было запустить дважды один и тот же АРМ, а вот разные можно запускать. Сейчас, добавляя, шаблон OneInstance.tpl с кодом выше (и правками от Admin), при запуске любого АРМ, блокируются все остальные.

Предполагаю, что нужно создавать Mutex с учетом имени exe-шника приложения. Подскажите, пожалуйста, как это можно сделать.

Спасибо!
Аватара пользователя
Admin
Администратор
Сообщения: 4010
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 53 раза
Поблагодарили: 33 раза
Контактная информация:

Re: Запретить повторный запуск приложения

Сообщение Admin »

ThePPK писал(а):Предполагаю, что нужно создавать Mutex с учетом имени exe-шника приложения. Подскажите, пожалуйста, как это можно сделать.
вы правы. строку

Код: Выделить всё

Limiter &= NewMutex('thisApp')
меняем на

Код: Выделить всё

Limiter &= NewMutex('%ApplicName')
все
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
ThePPK
Посетитель
Сообщения: 30
Зарегистрирован: 19 Сентябрь 2010, 21:54

Re: Запретить повторный запуск приложения

Сообщение ThePPK »

Уважаемый Admin, огромное Вам спасибо! Все получилось! :-)
Ответить