Страница 1 из 1

Добавлено: 25 Февраль 2004, 12:35
Гость
Уважаемые коллеги!

Хочется создать на Кларионе программу, которая бы вела учет отработанного времени: от включения до выключения компьютера.
Такая Кларионовская программа должна отреагировать на два события системы WINDOWS:
1) Включение WINDOWS 2) завершение работы WINDOWS.
Чтобы Кларионовская программа отреагировала на первое событие(включение системы WINDOWS), ее нужно разместить в АВТОЗАГРУЗКУ.
Вопрос: подскажите, как создать в CLARION-5.5 реакцию и обработку
события завершения работы операционной системы WINDOWS?
Хотелось бы отреагировать на окончание работы
системы WINDOWS без использования планировщика заданий.
Операционная система: WINDOWS-9x/2000/XP.

--
С уважением, Валерий Демахин
Казань valdem5@yandex.ru

(Добавление)

в map-структуре:

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

  MODULE('Windows')
    CallWindowProc(LONG,UNSIGNED,UNSIGNED,UNSIGNED,LONG),LONG,PASCAL,NAME('CallWindowProcA')
  END
  WndProc(UNSIGNED _hWnd,UNSIGNED _Msg,UNSIGNED _WParam,LONG _LParam),LONG,PASCAL
данные:
OldWndProc LONG

перед открытием окна:

OldWndProc = Window{PROP:WndProc}
Window{PROP:WndProc} = ADDRESS(WndProc)

перед закрытием окна:
Window{PROP:WndProc} = OldWndProc

собственно отбработчик:

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

WndProc PROCEDURE(UNSIGNED _hWnd,UNSIGNED _Msg,UNSIGNED _WParam,LONG _LParam)
WM_QUERYENDSESSION EQUATE(0011h)
  CODE
  CASE _Msg
  OF WM_QUERYENDSESSION
!    SETKEYCODE(0)
!    POST(EVENT:CloseWindow)
    тут ставишь свой код
    RETURN(TRUE)
  ELSE
    RETURN(CallWindowProc(GLO:lOldWndProc,_hWnd,_Msg,_WParam,_LParam))
  END
--
Best regards,
Vadym mailto:vadim@softcreator.com
ICQ: 82308757

(Добавление)

Ты должен сабклассить главное окно своего приложения и ловить событие WM_QUERYENDSESSION. Правда, судя по опыту Вадима Синявского, если твое окно в данный момент будет невидимым (а точнее - буде не главным окном приложения (это нужно чтоб не показывать свою программу на таскбаре)), то это сообщение твоя прога получит уже после того, как винда предложит прибить твою неотвечающую на запросы системы задачу.
Это такой глюк в кларе.
Если же ты просто сделаешь окны скрытым и отрисуешь иконку в трее, на которую навесишь pulldown-меню, то все у тебя получится.

--
Best regards,
Maxim Yemelyanov,
Enigma Soft Company
phone: +380 572 177977
WEB: http://enigmasoft.com.ua
e-mail: clalist@enigmasoft.com.ua
ICQ: 12253836

(Добавление)
... то это сообщение твоя прога получит уже после того, как винда предложит прибить твою неотвечающую на запросы системы задачу.
таки да... не смог побороть это паскудство... :(
Если же ты просто сделаешь окны скрытым и отрисуешь иконку в трее, на которую навесишь pulldown-меню, то все у тебя получится.
По идее протоколер можно даже и не показывать в трее - молча запустился (причем каждый раз при выходе проверять себя в Run-секции реестра и перезаписываться - ежели кто-то потер запись) и управляться скажем из командной строки - нафига лезть в трей? А то научились в трей садиться так и к месту и не к месту (второе на порядок чаще) туда щемятся все кому ни лень ;)

--
Best regards,
Vadym
Написал: ClaList(2)

Добавлено: 27 Февраль 2004, 10:26
Гость
Благодарю Вадима Синявского!
Теперь моя Кларионовская программа четко отрабатывает реакцию на событие завершения операционной системы WINDOWS.

С уважением, Валерий Демахин
Казань. mailto:valdem5@yandex.ru
Написал: ClaList(2)