W
wk01
доброго всем дня!
Итак, задача: есть лотусовая БД, и с ней всё хорошо. не хорошо с её пользователями, они - бапки (во всех смыслах этого слова). эти пользователи N лет работали с подобной по функционалу нелотусовой БД, в которой на основные операции были забиндены кнопки: F2, F3, shift+F3, F4, F5, .... и так получилось, что этим пользователям при переходе на новую платформу всё пофиг, кроме этих жалких кнопарей. и вот хоть трава не расти, но создавать новые записи они хотят по F2, а чего-то ещё делать - по F5 и т.д. И ни мышку не признают, ни другие способы запуска экшенов.
Пошарил в хелпе события юзерного лотусового интерфейса - нету нигде ничего про отлов жмяканья по клаве. Почитал форум и интернеты, везде на подобные темы один ответ - юзай хук (на этом форуме формулировка ещё категоричней: юзай хук, если всё получится - не забудь нам показать!). Поделиться с ближним я всегда не против, было б чем!
Стал искать инфу про хуки, нашёл. Отлично, думаю, заюзаю user32.dll, функции SetWindowsHookEx, UnhookWindowsHookEx, CallNextHookEx. Все детали использования, передаваемые параметры расписаны - всё вроде бы супер! Осталось на каждую F№ сетхукнуть и готово! Но вот облом, в сетхуке нужно передавать указатель на функцию-фильтр (адрес подключаемой процедуры для обработки нажатия клавиши). Из поста https://codeby.net/threads/ukazatel.33072/ я понял, что плохи наши дела. Мол нету в лотусскрипте такой фичи как указатель на процедуру (что в vb выглядит как SetWindowsHookEx(WH_KEYBOARD, AddressOf kbdProc, hinst, 0)). Значит напрямую из ls хука не поставишь. Однако, функции для установки хуков могу написать на том же vb в dll'ке, а потом дёргать их из скрипта. Но тогда встают вот какие проблемы:
1) допустим, я замутил хук на F2, вызвав при открытии базы соотвутствующую установке хука функцию из написанной мной dll'ки (при закрытии - анхук всего нахученного). в той же dll мне нужно будет как-то написать на vb обработчик, чтобы при нажатии в лотусе F2, там открывалась чистая форма для создания нового документа. И к этому я даже не знаю как подступиться. можно ли это реализовать и если да, то как? Как вообще можно из не совсем посторонней программы (а библиотечка запущена будет из лотусов) добраться до пользовательского воркспейса и управлять им?
2) на функциональные клавиши у лотуса есть свои реакции (F5 - блокировка, F3 - мув по документам и пр.). как прибить их? Это видимо решается невызовом CallNextHookEx, при успешном срабатывании по делу одного из моих выставленных хуков, но это ещё предстоит проверить (если до этого вообще дойдёт).
Вот такая вот проблемка. Если кто с хуками разбирался, буду признателен за помощь/подсказку. Может кто-нить знает альтернативу хукам? В общем, буду рад любой полезной информации.
Итак, задача: есть лотусовая БД, и с ней всё хорошо. не хорошо с её пользователями, они - бапки (во всех смыслах этого слова). эти пользователи N лет работали с подобной по функционалу нелотусовой БД, в которой на основные операции были забиндены кнопки: F2, F3, shift+F3, F4, F5, .... и так получилось, что этим пользователям при переходе на новую платформу всё пофиг, кроме этих жалких кнопарей. и вот хоть трава не расти, но создавать новые записи они хотят по F2, а чего-то ещё делать - по F5 и т.д. И ни мышку не признают, ни другие способы запуска экшенов.
Пошарил в хелпе события юзерного лотусового интерфейса - нету нигде ничего про отлов жмяканья по клаве. Почитал форум и интернеты, везде на подобные темы один ответ - юзай хук (на этом форуме формулировка ещё категоричней: юзай хук, если всё получится - не забудь нам показать!). Поделиться с ближним я всегда не против, было б чем!
Стал искать инфу про хуки, нашёл. Отлично, думаю, заюзаю user32.dll, функции SetWindowsHookEx, UnhookWindowsHookEx, CallNextHookEx. Все детали использования, передаваемые параметры расписаны - всё вроде бы супер! Осталось на каждую F№ сетхукнуть и готово! Но вот облом, в сетхуке нужно передавать указатель на функцию-фильтр (адрес подключаемой процедуры для обработки нажатия клавиши). Из поста https://codeby.net/threads/ukazatel.33072/ я понял, что плохи наши дела. Мол нету в лотусскрипте такой фичи как указатель на процедуру (что в vb выглядит как SetWindowsHookEx(WH_KEYBOARD, AddressOf kbdProc, hinst, 0)). Значит напрямую из ls хука не поставишь. Однако, функции для установки хуков могу написать на том же vb в dll'ке, а потом дёргать их из скрипта. Но тогда встают вот какие проблемы:
1) допустим, я замутил хук на F2, вызвав при открытии базы соотвутствующую установке хука функцию из написанной мной dll'ки (при закрытии - анхук всего нахученного). в той же dll мне нужно будет как-то написать на vb обработчик, чтобы при нажатии в лотусе F2, там открывалась чистая форма для создания нового документа. И к этому я даже не знаю как подступиться. можно ли это реализовать и если да, то как? Как вообще можно из не совсем посторонней программы (а библиотечка запущена будет из лотусов) добраться до пользовательского воркспейса и управлять им?
2) на функциональные клавиши у лотуса есть свои реакции (F5 - блокировка, F3 - мув по документам и пр.). как прибить их? Это видимо решается невызовом CallNextHookEx, при успешном срабатывании по делу одного из моих выставленных хуков, но это ещё предстоит проверить (если до этого вообще дойдёт).
Вот такая вот проблемка. Если кто с хуками разбирался, буду признателен за помощь/подсказку. Может кто-нить знает альтернативу хукам? В общем, буду рад любой полезной информации.