Форум » [x]Harbour » SOLVED!!! -> TRAPANYKEY() и KEYSEND() или запись/воспроизведение клавиатурных макросов » Ответить

SOLVED!!! -> TRAPANYKEY() и KEYSEND() или запись/воспроизведение клавиатурных макросов

Sergy: Практически со всем разобрался и восстановил функционал. Осталось одно и достаточно важное дело: автоматизация рутинных операций. В Clipper это происходило при помощи функций TRAPANYKEY/KEYSEND Первая при нажатии на любую клавишу в любом месте программы (включая GET/DBEDIT/ACHOICE/INKEY и тп) вызывает указанную мною функцию и передает ей код нажатой кнопки. Пользовательская функция тихо сидит и собирает эти коды в буфер - "записывает" нажатия клавиш юзером. В случае, если нужно "воспроизвести" записанные нажатия на кнопки, вызывается KEYSEND() с этим буфером в качестве параметра. Просто и логично. --------------------------------- Встал вопрос - чем и как заменить этот функционал? Без него меня разорвут на части - делать множество рутинных операций без клавиатурных макросов чокнешься...

Ответов - 45, стр: 1 2 3 All

Marquis31: Да в том-то и проблема, что возвращается и зацикливается. Нужно после подстановки клавиш (там еще не просто замена клавиш, а "вставка" еще одного нажатия) временно обработчик отключать, отдать управление в вышестоящую процедуру, а потом вернуть на место. (я чужой проект переношу, а там разработчик понимал толк в извращениях, хехе)

Sergy: Если нужна помощь - есть смысл привести пример кода. У меня тоже, как оказалось, был "толк в извращениях", которые 10 лет назад написал на Clipper и забыл. А сейчас с переходом на Harbour пришлось вспоминать... хехе)

Marquis31: Все, кажись, выкрутился )) В hb_KeyPut загонял нужные клавиши массивом, как выше и рекомендовалось, а перед его вызовом сделал hb_gtInfo(HB_GTI_INKEYFILTER, nil)


Dima: Хорошая штука hb_gtInfo(HB_GTI_INKEYFILTER.... тоже переделал у себя вызовы NextKey(), там где проверяю активность юзера. Надеюсь на работу клавиатурного сканера это не скажется (постоянно работающий hb_gtInfo(HB_GTI_INKEYFILTER.....)

Dima: Иногда юзера стали жаловаться что прога подвисает (ранее таких жалоб вроде не было) В программе живет вот такой код hb_gtInfo(HB_GTI_INKEYFILTER, {|nk| aadd(aDownKeys,nk)}) В отдельном потоке этот массив обнуляется (aDownKeys) при достижении его длины больше двух. Не может это обнуление вызвать зависон ? Гонял у себя прогу , на такой эффект попасть не смог.



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