Hotkey в надстройке

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
kibernetics
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 945
Зарегистрирован: 03.05.2006 (Ср) 13:31
Откуда: Minsk

Hotkey в надстройке

Сообщение kibernetics » 19.06.2021 (Сб) 15:54

Форумчане, всем привет!
Снова приходится чаще использовать VBA, и после перехода с VSCode понимаешь, что очень не хватает удобых сочетаний клавиш, к которым очень привык, что не надо переключаться с клавиатуры на мышь. И, которых нет в VBE (

Я уже начинал тему с поиском решения для организации работы перехвата клавиш. Но, потом выпал из работы, и вот снова хотел бы поднять тему и подытожить, что есть на текущий момент.

Итак, задача заключается в том, чтобы перехватывать нажатия кнопок, и переводить VBE в подрежим приёма следующего нажатия.
Т.е. не просто там, Alt+Key, а активирование режима ввода подкомманд, после определённой нажатой комбинации.

Сейчас, подобное реализовано во многих код-редакторах (VSCode, MSSMS,...), а именно:

  • Жмём комбинацию Ctrl+K (запущен режим ожидания подкоманды)
    и, из под этого режима жмём:
  • Ctrl+C, тем самым, осуществляется комментирование выделенного участка кода.

    Аналогично, обратное действо:
  • Жмём Ctrl+K (снов запущен режим ожидания подкоманды)
    и, из под этого режима жмём:
  • Ctrl+U, теперь, осуществляется раскомментирование кода.

уважаемый член vb-шного сообщества The Trick в своё время так прокомментировал ситуацию:
Ну значит лови хоткей на Ctrl+K, через WM_HOTKEY. Как поймаешь ставь хук на клаву и там лови команды.
начинай с RegisterHotkey

и так, как нет формы, надо создать создать виртуальное окно
создаешь окно с флагом
Код: Выделить всё
HWND_MESSAGE tData.hWnd = CreateWindowEx(0, THREAD_WND_CLASS, vbNullString, 0, 0, 0, 0, 0, HWND_MESSAGE, 0, tData.hInstance, ByVal 0&)


В общем, я сформировал проект, где смог добиться только перехвата комбинации Alt+F10 (чисто для теста).
Следующим этапом надо обеспечить поведение на сработку, только когда хоткей клацают над рабочим окном с кодом в VBE. Потому как, сейчас комбинация Alt+F10 работает глобально, даже если редактор кода свёрнут.
Потом уже, надо както отлавливать hook.

Народ, без вас не справится одному. А VBE никого не интересует в MS ), надежда только на энтузиастов.

hotkey.zip
(10.47 Кб) Скачиваний: 85

Teranas
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 224
Зарегистрирован: 13.12.2008 (Сб) 4:26
Откуда: Новосибирск

Re: Hotkey в надстройке

Сообщение Teranas » 21.06.2021 (Пн) 16:09

Извини за тупой вопрос, а чем тебе не нравятся "GetAsyncKeyState"
Я всегда ей пользуюсь.
Код: Выделить всё
  If (GetAsyncKeyState(&H11) <> 0) Then ' "Ctrl"
  If (GetAsyncKeyState(&H12) <> 0) Then ' "Alt"
  If (GetAsyncKeyState(&H10) <> 0) Then ' "Shift"
  If (GetAsyncKeyState(&H5B) <> 0) Or (GetAsyncKeyState(&H5C) <> 0) Then ' "Win"
  If (GetAsyncKeyState(L) <> 0) Then ' Выбранная Клавиша нажата

Я всегда ими пользуюсь, если нужно разделить, то для каждого окна своя процедура обработки и всё.
С уважением, Андрей.

kibernetics
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 945
Зарегистрирован: 03.05.2006 (Ср) 13:31
Откуда: Minsk

Re: Hotkey в надстройке

Сообщение kibernetics » 21.06.2021 (Пн) 19:09

Teranas писал(а):Извини за тупой вопрос, а чем тебе не нравятся "GetAsyncKeyState"


я не знаю ещё, впервые слышу,
но мне кажется, что GetAsyncKeyState не позволит перевести клавиатуру в режим подкомманд.

Teranas
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 224
Зарегистрирован: 13.12.2008 (Сб) 4:26
Откуда: Новосибирск

Re: Hotkey в надстройке

Сообщение Teranas » 22.06.2021 (Вт) 5:22

kibernetics писал(а):
Teranas писал(а):Извини за тупой вопрос, а чем тебе не нравятся "GetAsyncKeyState"

GetAsyncKeyState не позволит перевести клавиатуру в режим подкомманд.

Насколько я понимаю состояние клавиатуры и её буфер не зависят от того, каким методом считывания пользуется программа пользователя. Почему GetAsyncKeyState должна сбрасывать режим подкомманд?
С уважением, Андрей.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Hotkey в надстройке

Сообщение Хакер » 22.06.2021 (Вт) 10:21

kibernetics писал(а):позволит перевести клавиатуру в режим подкомманд.

А что, режим подкоманд это какой-то особый режим на уровне операционной системы? Это фикция и условность конкретной программы, с которой ты хочешь брать пример.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Teranas
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 224
Зарегистрирован: 13.12.2008 (Сб) 4:26
Откуда: Новосибирск

Re: Hotkey в надстройке

Сообщение Teranas » 29.06.2021 (Вт) 13:54

чего-то клаватык пропал совсем
С уважением, Андрей.

The trick
Постоялец
Постоялец
 
Сообщения: 781
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Hotkey в надстройке

Сообщение The trick » 30.06.2021 (Ср) 11:55

  • Ставим хоткей на Ctrl+K (RegisterHotkey);
  • Поймали WM_HOTKEY, ставим хук на клаву;
  • В хуке ловим подкоманду.
UA6527P

kibernetics
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 945
Зарегистрирован: 03.05.2006 (Ср) 13:31
Откуда: Minsk

Re: Hotkey в надстройке

Сообщение kibernetics » 31.07.2021 (Сб) 22:45

The trick Иосифович, дайте какой екзампл плиз.
ну или что бы вы хотели взамен?)
ооочень хочется запилить эти хоткеи, а скилов не хватает на всё.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: SemrushBot, Yandex-бот и гости: 49

    TopList