Запрет повторного запуска приложения
Добавлено: 26 Июнь 2019, 16:15
Приветствую всех знатоков Clarion. Возможно такое уже обсуждали, но найти мне не удалось. Имеется приложение на CW6.3 ШВС. Как реализовать запрет повторного запуска приложения. Пользователи просто уже утомили, сворачиванием в трей и повторным запуском. Нашел на просторах инета вот такой пример (спасибо автору):
в MAP-секции:
MODULE('WinAPI')
GetDesktopWindow(),UNSIGNED,PASCAL
SetProp(UNSIGNED,*CSTRING,UNSIGNED),BOOL,RAW,PROC,PASCAL,NAME('SetPropA')
GetProp(UNSIGNED,*CSTRING),UNSIGNED,RAW,PASCAL,NAME('GetPropA')
RemoveProp(UNSIGNED,*CSTRING),UNSIGNED,RAW,PROC,PASCAL,NAME('RemovePropA')
END
В секции данных первой процедуры:
LOC:cstProgramID CSTRING('<какое-то уникальное описание нашей проги>')
LOC:ulOtherInstance ULONG,AUTO
Код инициализации процедуры:
! Проверка наличия программы в памяти для предотвращения повторной загрузки
! проверяем установленное свойство
LOC:ulOtherInstance = GetProp(GetDesktopWindow(),LOC:cstProgramID)
IF LOC:ulOtherInstance <> 0
! Проп заргистрирован - проверим существет ли окно
IF SetForegroundWindow(LOC:ulOtherInstance)
! Действительно наше окно уже загружено - просто выходим
DO ProcedureReturn
ELSE
! Окна нет - скорее всего прога пошло обвалилась - грузимся дальше
RemoveProp(GetDesktopWindow(),LOC:cstProgramID)
END
END
Код после открытия окна:
! Установка свойства для проверки наличия программы в памяти
SetProp(GetDesktopWindow(),LOC:cstProgramID,Метка окна{PROP:Handle})
Код перед закрытием окна:
! Удаляем установленный нами прор
RemoveProp(GetDesktopWindow(),LOC:cstProgramID)
Однако потом при генерировании модуля выдает на SetForegroundWindow(LOC:ulOtherInstance) - unknown function label
В чем может быть проблема, помогите.
в MAP-секции:
MODULE('WinAPI')
GetDesktopWindow(),UNSIGNED,PASCAL
SetProp(UNSIGNED,*CSTRING,UNSIGNED),BOOL,RAW,PROC,PASCAL,NAME('SetPropA')
GetProp(UNSIGNED,*CSTRING),UNSIGNED,RAW,PASCAL,NAME('GetPropA')
RemoveProp(UNSIGNED,*CSTRING),UNSIGNED,RAW,PROC,PASCAL,NAME('RemovePropA')
END
В секции данных первой процедуры:
LOC:cstProgramID CSTRING('<какое-то уникальное описание нашей проги>')
LOC:ulOtherInstance ULONG,AUTO
Код инициализации процедуры:
! Проверка наличия программы в памяти для предотвращения повторной загрузки
! проверяем установленное свойство
LOC:ulOtherInstance = GetProp(GetDesktopWindow(),LOC:cstProgramID)
IF LOC:ulOtherInstance <> 0
! Проп заргистрирован - проверим существет ли окно
IF SetForegroundWindow(LOC:ulOtherInstance)
! Действительно наше окно уже загружено - просто выходим
DO ProcedureReturn
ELSE
! Окна нет - скорее всего прога пошло обвалилась - грузимся дальше
RemoveProp(GetDesktopWindow(),LOC:cstProgramID)
END
END
Код после открытия окна:
! Установка свойства для проверки наличия программы в памяти
SetProp(GetDesktopWindow(),LOC:cstProgramID,Метка окна{PROP:Handle})
Код перед закрытием окна:
! Удаляем установленный нами прор
RemoveProp(GetDesktopWindow(),LOC:cstProgramID)
Однако потом при генерировании модуля выдает на SetForegroundWindow(LOC:ulOtherInstance) - unknown function label
В чем может быть проблема, помогите.