Получение всех глобальных hotkey-в в винде

Ответить

Код подтверждения
Введите код в точности так, как вы его видите. Регистр символов не имеет значения.

BBCode ВКЛЮЧЁН
[img] ВКЛЮЧЁН
[url] ВКЛЮЧЁН
Смайлики ОТКЛЮЧЕНЫ

Обзор темы
   

Развернуть Обзор темы: Получение всех глобальных hotkey-в в винде

Eugie » 21 июн 2005, 21:39

Sera, лишний раз почитать MSDN бывает полезно - вот ты, например, узнал еще об одном варианте задать hotkey ;)

Я не знаю, как получить список всех hotkey'ев, связанных с объектами Shell. Самый тупой способ - пройтись по всем ярлыкам, вызывая для них IShellLink::GetHotkey(). Очевидно, это будет очень медленно, поэтому предположу, что система дублирует инфу о них в реестре. Где именно - понятия не имею. Но работать это хозяйство может примерно так: при запуске explorer.exe (системный процесс - оболочка Windows) считывает из реестра список всех shell-hotkey'ев и регистрирует их внутри себя через RegisterHotKey(). Теперь все shell-хоткеи пойдут через его очередь и будут обработаны на WM_HOTKEY, т.к. можно считать, что процесс explorer всегда имеется в наличии -обычно его все-таки не убивают :)

Возможно, все совсем не так. Если у тебя есть время и желание копать дальше - флаг в руки. Узнаешь что-нибудь интересное - поделись информацией.

Sera » 21 июн 2005, 11:40

:/ линки на msdn -- вообще бессмысленное дело. Если у человека появился вопрос, то он уже посмотрел msdn, но ничего не понял, потому и просит помощь.
Насколько я понимаю, оба эти варианта: RegisterHotKey + WM_SETHOTKEY - нужны для своих приложений.
Я же пытаюсь понять, как реализован в винде "Быстрый вызов".
Это когда с линкой ассоциируется hotkey -- глобальный в винде. Сейчас уже вижу, что есть IShellLink::SetHotkey.
Как назначить такой Hotkey уже понятно, теперь мне нужно понять, как добыть все зарегистрированные таким образом Hotkey-и.
Винда-то по-любому где у себя хранит такой наборчик, чтобы быстро отбирать свои Hotkey-и.

Eugie » 17 июн 2005, 20:14

Sera » 17 июн 2005, 18:50

Я в этой теме еще плаваю, конечно. Но все же. В твое объяснение не укладывается назначение hotkey-ев, которые поднимают приложения.
назначение через RegisterHotKeys посылает потоку WM_HOTKEY. Потоку уже существующему.
WM_GETHOTKEY тоже приходит окнам уже существующим. Как тогда реализованы hotkey-и, которые запускают программы?

Eugie » 17 июн 2005, 18:35

RegisterHotKeys регистрирует thread-specific hotkeys, т.е. они действуют только для окон, созданных данным потоком. А глобальные регистрируются с помощью WM_SETHOTKEY, и их список можно получить, посылая всем недочерним окнам в системе сообщение WM_GETHOTKEY и анализируя ответ.

Получение всех глобальных hotkey-в в винде

Sera » 17 июн 2005, 17:07

Не сталкивался ли кто-нибудь с проблемой получения всех уже зарегистрированных в системе global hotkey-в с помощью функции RegisterHotKeys или WM_SETHOTKEY?
Винда ведь где-то у себя хранит этот набор, хотелось бы его получать программно.

Вернуться к началу