Сброс хука при не активном окне

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

Сброс хука при не активном окне

Сообщение kibernetics » 09.09.2021 (Чт) 14:16

Форумчане, всем привет.
бьюсь над одним вопросом уже очень долгое время.
А сама проблма, в общем, такая:
есть приложение mdi, которое при запуске вешает хук на отлов нажатия комбинации клавиш Ctrl+K.

Так вот оно всегда в этом "дежурном режиме". Как исправить ситуацию, чтобы хук работал только лишь тогда, когда чайлд-форма активна и приложение не свёрнуто?

Т.е. когда я запускаю приложение, я уже не могу в других программах работать, т.к. хук запущенного приложения перехватывает на себя нажатие комбинаций.
Я хотел бы чтобы хук прекращал работу, если окно приложения не активно, или свёрнуто в трее, например. А как только приложение (точнее чайлд-окно) получало фокус, хук снова был бы наготове.

Выручайте, кто может. Очень хочу добить этот вопрос до конца уже раз и навсегда. Пример приложен.
TheTrick_HotKey.zip
(3.79 Кб) Скачиваний: 70



С уважением к форуму.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4147
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Сброс хука при не активном окне

Сообщение Mikle » 09.09.2021 (Чт) 16:33

Не очень понял, а что-то мешает ловить сочетание в KeyDown чайлд окна?
Код пока не смотрел.

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

Re: Сброс хука при не активном окне

Сообщение kibernetics » 09.09.2021 (Чт) 20:27

Mikle писал(а):Код пока не смотрел.

Mikle, дорогой, посмотри код пожалуйста.
Желательно, на базе этого примера строить решение.
он хорошо работает, но глобально, на всю систему, грубо говоря. а мне нужно только на активном окне.
Хелп, уже к кому только не обращался, самому стыдно)

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4147
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Сброс хука при не активном окне

Сообщение Mikle » 10.09.2021 (Пт) 10:12

kibernetics писал(а):чтобы хук работал только лишь тогда, когда чайлд-форма активна и приложение не свёрнуто?

Зачем тогда хук? Может я чего-то не понял, но ведь той же функциональности можно добиться как-то так:
Вложения
HotKey.zip
(1.93 Кб) Скачиваний: 70

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

Re: Сброс хука при не активном окне

Сообщение kibernetics » 10.09.2021 (Пт) 16:02

Спасибо за свой вариант решения, тут ещё хотел пояснить, что в приложении не будет как таковых форм.
Это я хочу внедрить в качестве виртуального окна над редактором VBE.
Т.е. чтобы хук срабатывал, если редактор VBE открыт (и запущен мой AddIn) то виртуальное окно бы следило за нажатиями.
Но как только VBE я сворачиваю или убираю фокус, то надо прекратить слежение за перехватом комбинаций.
См. видео [youtube]https://youtu.be/v67EZNDMnH8[/youtube]

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4147
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Сброс хука при не активном окне

Сообщение Mikle » 10.09.2021 (Пт) 16:11

Чтобы встроить ютуб видео, оставь от адреса только часть после последнего слэша:
Код: Выделить всё
[youtube]v67EZNDMnH8[/youtube]


Получается:


Вечером посмотрю.

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

Re: Сброс хука при не активном окне

Сообщение kibernetics » 13.09.2021 (Пн) 20:18

Mikle писал(а):Вечером посмотрю.

Приветствую. Не было пока возможности глянуть?

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4147
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Сброс хука при не активном окне

Сообщение Mikle » 13.09.2021 (Пн) 20:57

Глянуть то глянул, а потом закрутился.
VBE я никогда не использовал. Но я так понял, над чем вешать плагин - не столь важно.
Можешь дать пример с Блокнотом, а не со своей формой-затычкой? Ведь это всё принципиально меняет. А там посмотрим, что можно сделать.

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

Re: Сброс хука при не активном окне

Сообщение kibernetics » 18.09.2021 (Сб) 0:00

Mikle писал(а):Глянуть то глянул, а потом закрутился.
VBE я никогда не использовал. Но я так понял, над чем вешать плагин - не столь важно.
Можешь дать пример с Блокнотом, а не со своей формой-затычкой? Ведь это всё принципиально меняет. А там посмотрим, что можно сделать.


Так, ну хорошо. Спасибо что согласился помочь. Насчёт блокнота я не понял.
В общем, я создал простейший пример аддона для демонстрации.

Как им пользоваться:
Vb6SkKeys3.zip
(5.64 Кб) Скачиваний: 66

1) скачанный проект открываешь, запускаешь (run)
2) затем, открываешь ещё один проект, неважно какой (можно переключится на другой открытый)
3) в этом проекте, в меню редактора Add-Ins есть Add-In manager..., открываем
4) в списке должна присутствовать наша надстройка VB hook keyboard
5) ставим ей галочку Loaded/Unloaded, жмём ОК (в результате, у нас в системе прописывается хук на перехват комбинаций кнопок, который мы запустили в первом пункте)

теперь, можно отлаживать. и мои вопросы:
проблема №1: я хотел бы сделать так, чтобы комбинация Ctrl+K отлавливалась только в окне активного редактора (VBE).
проблема №2: после того, как команда Ctrl+K поймана, редактор не "видит" нажатия кнопки для подкоманды. Это срабатывает только в окне VBE, откуда мы стартовали Add-In.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4147
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Сброс хука при не активном окне

Сообщение Mikle » 19.09.2021 (Вс) 19:33

Поверхностно глянул. Даже так, как есть, работает нестабильно.
Пока только на уровне предположений - что, если на OnConnection запоминать hWnd ActiveWindow (его надо как-то получить), а потом в MsgWndProc сравнивать hWnd с сохранённым и не реагировать, если не то?

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2054
Зарегистрирован: 25.11.2002 (Пн) 20:03

Re: Сброс хука при не активном окне

Сообщение ALX_2002 » 24.09.2021 (Пт) 17:34

Приветствую, господа. Тоже давно не ковырялся с VBA, но всё же - такой вариант чем-то не подошёл https://stackoverflow.com/questions/23856071/assign-shortcut-keys-within-the-vbe-window ?

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

Re: Сброс хука при не активном окне

Сообщение kibernetics » 25.09.2021 (Сб) 17:20

ALX_2002 писал(а):Приветствую, господа. Тоже давно не ковырялся с VBA, но всё же - такой вариант чем-то не подошёл https://stackoverflow.com/questions/23856071/assign-shortcut-keys-within-the-vbe-window ?

Привет, спасибо что заглянул.
Там по твоей ссылке только одна комбинация клавиш регистрируется.
А я хочу сделать какбы "карман" для подкомманд. Т.е. нажали CTRL+K, а далее функционал зависит от следующего нажатия в этом кармане.
Ctrl+K
...|___Ctrl+C (комментирование блока)
...|___Ctrl+U (раскомментирование)
...|___Ctrl+T (клонирование активной строки)

и т.д., т.е. набор команд внутри активированной комбинации Ctrl+K


пример от The Trick'a отлично отрабатывает, но беда в том, что он перехватывает события всей системы. И невозможно работать в других приложениях, если я запускаю код Trick'a.
в общем, надо решение, которое бы отключало перехват, когда редактор не активен (свёрнут, отсутствует фокус).
Ведь, тот же VSCode сбрасывает с себя отлов комбинаций, когда я например переключаюсь на MSSQL management.
Комбинация клавиш в этих программах работает только на активных окнах приложения и друг у друга ничего не перехватывает. А Trick решил у них отобрать всё (. (в видео всё отражено, текущая ситуация дел)

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2054
Зарегистрирован: 25.11.2002 (Пн) 20:03

Re: Сброс хука при не активном окне

Сообщение ALX_2002 » 25.09.2021 (Сб) 19:52

kibernetics, а в чём необходимость такого усложнения ? Почему не зарегить сразу нужные хоткеи типа:
Код: Выделить всё
CTRL+SHIFT+C
CTRL+SHIFT+U
CTRL+SHIFT+T


Эти сочетания уже заняты или не так удобно нажимать три клавиши ?

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

Re: Сброс хука при не активном окне

Сообщение kibernetics » 26.09.2021 (Вс) 0:05

ALX_2002 писал(а):Эти сочетания уже заняты или не так удобно нажимать три клавиши ?


у меня получается, что основные инструменты это из мс-окружения. и там очень удобно, что система хоткеев довольно-таки развитая. причём, они стараются следовать этой схеме во всех своих продуктах, де-факто.
ну, и само собой уже привыкаешь к хорошему и полезному.
но, как только переключаюсь на горячо любимый old school vb6, то оочень не хватает этих удобных комбинаций.

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2054
Зарегистрирован: 25.11.2002 (Пн) 20:03

Re: Сброс хука при не активном окне

Сообщение ALX_2002 » 26.09.2021 (Вс) 14:06

kibernetics, хорошо. Но ведь на CTRL+K уже заведено действие "Вставка гиперссылки". Тогда хуком ты блокируешь эту возможность. Так и планировалось ?

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

Re: Сброс хука при не активном окне

Сообщение kibernetics » 26.09.2021 (Вс) 19:28

ALX_2002 писал(а):kibernetics, хорошо. Но ведь на CTRL+K уже заведено действие "Вставка гиперссылки". Тогда хуком ты блокируешь эту возможность. Так и планировалось ?

Позвольте, с вами не согласится.
Никакого такого действия в окне кода редакторов VB6/VBA не заведено.
В редакторе жмём комбинацию Ctrl+K - ничего не происходит, т.к. ничего не назначено (по-крайней мере из коробки).
Поэтому, всё продумано.

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2054
Зарегистрирован: 25.11.2002 (Пн) 20:03

Re: Сброс хука при не активном окне

Сообщение ALX_2002 » 27.09.2021 (Пн) 9:59

kibernetics, понял. Я проверял в самом окне Excel. Запамятовал, что речь идёт о хоткеях в редакторе кода.


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

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

Сейчас этот форум просматривают: Google-бот, Majestic-12 [Bot] и гости: 9

    TopList