Render.ru

Обработка нажатий клавиш макросом

VEG

Пользователь сайта
Рейтинг
2
#1
Нужно написать макрос, который в зависимости от нажатой клавиши будет выполнять те или иные действия. Конкретно - хочу облегчить себе расставление стрелок в сканвордах. В общем все ясно, только не могу найти функцию по обработке клавиатурных нажатий.
 

Kerch

Активный участник
Рейтинг
5
#2
Пиши отдельные модули а затем цепляй их на хоткеи. Вуаля!
 

VEG

Пользователь сайта
Рейтинг
2
#6
SendKeys - это когда макрос посылает что-то в буфер, а мне нужно, чтобы он отслеживал, какие кнопки я нажимаю (напр., нажимаю "6", и он рисует стрелку "вправо"...)
 

Kerch

Активный участник
Рейтинг
5
#7
Ну так самый простой вариант тот который я раньше советовал.
Зацепить макросы на кнопки. Пишешь макрос который рисует стрелку "вправо" и цепляешь на "6". И т.д.
После использования макрос можно деактивировать
 

VEG

Пользователь сайта
Рейтинг
2
#8
Повторяю, это не подходит. Для чего-то этот вариант, наверное, приемлем, но в данном случае для меня важна "двусторонняя связь" с макросом. Вообще такое возможно?
 

dizzzy

Пользователь сайта
Рейтинг
2
#10
Видимо никак. Как бы проблема вот в чем. Нажатие этих клавиш надо присобачить к какому-то событию. То есть если событие произошло, то макрос запускается, а там уже и можно вклинить и проверку нажатия клавиши (Declare Function GetKeyState& Lib "user32" (ByVal vKey&)). Однако события типа "нажалась такая-то клавиша" для дока да и для макроса нет. А подвязывать к чему-то другому в Вашем случае абсурдно. Можно типа макрос зациклить, и он постоянно будет ждать от вас нажатия кнопки, но тогда вся схема будет слишком тормозной. Как бы не советую.

Хотя можно так наверное. Запустить макрос сочетанием клавиш. И там запустится цикл. Можно даже на GetUserClick подвязать. В F1 найдете пример. Типа клетку выделили дынс макрос и в зависимости в каком углу кликнули такая стрелочка и шлепнулась. Там можно и шифты с контролами учесть. Там скажем с шифтом - по часовой стрелке, без против... Ну там сварьируете под ся. Три кнопки как ни как комбинаций кучу можно наделать. Если запарит макрос запускать, то можете его подвязать на событие SelectionChange. Хотя это уже геморно будет...
 

VEG

Пользователь сайта
Рейтинг
2
#11
Спасибо, dizzy. Меня заинтересовала часть
а там уже и можно вклинить и проверку нажатия клавиши (Declare Function GetKeyState& Lib "user32" (ByVal vKey&))
Прочитала про эту функцию, и непонятно: GetKeyState("конкретная клавиша") определяет, нажата ли эта "конкретная клавиша". А есть функция, которая не привязывается к этой "конкретной клавише"? Это бы решило проблему. Или я что-то неправильно понимаю?
 

dizzzy

Пользователь сайта
Рейтинг
2
#12
Че-то я забыл про Вас. Прошу прощенья. На сколько я понял, Вам нужна функция, коя б определяла какая клавиша нажата в данный момент. Можно конечно порыться в API функциях, но мне кажется, что таковой нет. Сами подумайте как она должна выглядеть? Что выдавать на выходе - нажатую клавишу? А если их две нажато... а если десять? Что тогда выдавать? Массив нажатых клавиш?:) Может и есть... сомневаюсь, и потому рыться даже не хочу...
 
Сверху