Форум » [x]Harbour » отслеживание Alt-C » Ответить

отслеживание Alt-C

MIKHAIL: Можно ли как то логировать и отследить откуда прога вывалилась по Alt-C ?

Ответов - 11

Dima: Как вариант HB_GTI_INKEYFILTER Поиск по форуму поможет

MIKHAIL: Dima пишет: Как вариант HB_GTI_INKEYFILTER вероятно Alt-C имеет больший приоритет чем HB_GTI_INKEYFILTER, он прерывает выполнение раньше чем обрабатывается, оно и понятно... Однако что то в механизм его заложено, так как при закрытии на экране отображается откуда он вываливается, а вот как эту информацию можно сохранить ?

Dima: MIKHAIL пишет: Ctrl-C MIKHAIL пишет: вероятно Alt-C Так о какой комбинации речь ? Может есть смысл использовать установку Setcancel(.F.)


MIKHAIL: Dima пишет: Ctrl-C помутнение, конечно Alt-C ) Dima пишет: Setcancel(.F.) Так ведь Alt-C неспроста придумали, как перехватить событие нажатия клавиш если нет ожидания клавиатуры ?

Dima: MIKHAIL пишет: как перехватить событие нажатия клавиш если нет ожидания клавиатуры Сделай ожидание но небольшое

MIKHAIL: Dima пишет: Сделай ожидание но небольшое Смысл в том что это не запланированное событие. Программа в какой то момент зависает, нужно отследить где и когда это происходит. Единственное событие которое можно вызвать и обработать это завершение программы через Alt-C или крестик. Соответственно что бы отследить где зависает, нужно вывести в лог текущее состояние программы на момент закрытия программы. Заранее понять где это происходит затруднительно...

Dima: Можно почитать как переназначить ALT+C в NG

MIKHAIL: Dima пишет: Можно почитать как переназначить ALT+C в NG Так переназначение идет через SET KEY что в свою очередь работает при состоянии ожидания... Как перехватить событие клавиатуры без состояния ожидания ?

alkresin: Штатными средствами тут ничего не сделаешь. Если вы готовы пересобрать Harbour, то можно сделать вот что: src/hvm.c, ф-я hb_vmRequestCancel() - закомментируйте строчку s_fDoExitProc = HB_FALSE; Как написано там в комментарии, она запрещает выполнение exit procedure для совместимости с Клиппером. После этого пересоберите Harbour и поместите в свою программу exit procedure с нужным кодом.

MIKHAIL: alkresin пишет: Штатными средствами тут ничего не сделаешь. А можно вставить на С функцию аналогичную в программу ? А нет ли возможности опрашивать клавиатуру по стандартному прерыванию и обрабатывать эти события ?

alkresin: MIKHAIL пишет: А можно вставить на С функцию аналогичную в программу ? Вставить можно. Может даже и работать будет. Попробуйте. А нет ли возможности опрашивать клавиатуру по стандартному прерыванию и обрабатывать эти события ? Вы имеете ввиду - перехватывать WM_KEYDOWN? Наверное, можно - получить handle окна с помощью HB_GTI_WINHANDLE и потом установить процедру, перехватывающую события клавиатуры с помощью SetWindowsHookEx() - посмотрите, как это сделано в HwGUI.



полная версия страницы