Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » как увидеть список всех глобальных хоткеев?

Модерирует : KLASS, IFkO

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2

Открыть новую тему     Написать ответ в эту тему

oshizelly



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подсткажите, пожалуйста, как под Windows XP получить список полный список всех глобальных хоткеев (включая хоткеи к ярлыкам на десктопе), активных в данный момент в системе? Наверное, где-то в системном реестре должен быть список? А то беда просто: на машине установлено 2-3 системных утилиты, у каждой свои глобальные комбинации горячих клавиш, которые друг с другом постоянно конфликтуют - а кто чьи команды перехватывает, не поймешь. В результате жизнь пошла веселая: жмешь клавишу и не знаешь заранее, то ли получишь нужное действие, то ли система на раз вылетит
 

Всего записей: 6524 | Зарегистр. 18-09-2004 | Отправлено: 15:17 30-07-2008
evle



1 + int rand(100);
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Никак. Глобальные горячие клавиши регистрируются в памяти при запуске соответствующих программ. В реестре данные не хранятся, API для получения отсутствует.

----------
For every complex problem, there is a solution that is simple, neat, and wrong.

Всего записей: 2110 | Зарегистр. 03-02-2005 | Отправлено: 19:19 30-07-2008
urmigar



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
evle
 
Ну, почему же никак.
Сами горячие клавиши - это ограниченое множество. Просто перибираем их, пытаемся зарегать каждое, и если не получается (по причине того, что оно кем-то занято), добавляем в список. Всё

Всего записей: 437 | Зарегистр. 18-01-2008 | Отправлено: 20:03 30-07-2008 | Исправлено: urmigar, 20:04 30-07-2008
evle



1 + int rand(100);
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
urmigar
А кто сказал, что если сочетание кем-то занято, то зарегистрировать не получится? RegisterHotKey его просто переопределит. И всё это только в идеальном случае, когда приложение пользуется RegisterHotKey, а не ставит клавиатурный хук.
И даже если каким-то неизвестным науке чудом удастся получить список, что каждое сочетание делает — не поймёшь.

----------
For every complex problem, there is a solution that is simple, neat, and wrong.

Всего записей: 2110 | Зарегистр. 03-02-2005 | Отправлено: 06:33 31-07-2008
urmigar



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
RegisterHotKey его просто переопределит.

 
Уверен? А разве не возвратит ошибку? Иначе бы любая программа любой другой очень жизнь бы портила
 

Цитата:
И даже если каким-то неизвестным науке чудом удастся получить список, что каждое сочетание делает — не поймёшь.

 
Вот что спрашивал oshizelly
 

Цитата:
Подсткажите, пожалуйста, как под Windows XP получить список полный список всех глобальных хоткеев (включая хоткеи к ярлыкам на десктопе), активных в данный момент в системе?

 
Получение списка как раз и нужно.

Всего записей: 437 | Зарегистр. 18-01-2008 | Отправлено: 11:57 31-07-2008
oshizelly



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
urmigar
evle

Цитата:
А кто сказал, что если сочетание кем-то занято, то зарегистрировать не получится? RegisterHotKey его просто переопределит. И всё это только в идеальном случае,  

А можно про это чуть поподробнее? Я понимаю, что решение не на все случаи, да и морока жуткая все сочетания клавиши по одной тыркать (это ж что-то под тысячу комбинаций получается со всеми модификаторами вместе и по отдельности ). Но при отсутствии любых иных решений можно было бы попробовать.
 
Вот только кто такой этот RegisterHotKey? Нашел вот эту инфу http://msdn.microsoft.com/en-us/library/ms646309(VS.85).aspx, прочел дважды, но ничего не понял, ибо не спец. Может, кто объяснит более доходчиво?
 

Цитата:
Вот что спрашивал oshizelly... Получение списка как раз и нужно.

Точно! Значение хоткея можно и в самой программе посмотреть.  Разумеется, при условии, что в этом общем списке будет указано, какая прога за какой хоткей отвечает.

Всего записей: 6524 | Зарегистр. 18-09-2004 | Отправлено: 14:09 31-07-2008 | Исправлено: oshizelly, 14:18 31-07-2008
igor_andreev

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
У меня вот такая утилитка консольная есть. usedkeys.zip ~25 Кб
Правда не показывает, какая программа конкретно занимает тот или иной хоткей. Скачал на каком-то нерусском форуме, не помню каком. Называлась она как-то непонятно, типа hbdrnkd.exe или похожий бред, название запомнить не шмог, переименовал в usedkeys

Всего записей: 1705 | Зарегистр. 08-12-2004 | Отправлено: 17:16 31-07-2008
oshizelly



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
igor_andreev
Это уже намного лучше, спасибо! Правда, данные на выходе действительно совсем уж скудноваты, просто список активных хоткеев, причем есть подозрение, что список все-таки не совсем полный. НО... Существование такой прожки, IMHO, доказывает, что скептицизм evle может оказаться чрезмерным. Вот и сама эта прога пишет, что Unfortunately, I can't tell which app owns a specific hotkey without doing a lot more work. Следовательно, в принципе это возможно! Осталось всего-ничего: найти на безбрежных просторвх инета нужную прогу

Всего записей: 6524 | Зарегистр. 18-09-2004 | Отправлено: 18:23 31-07-2008
evle



1 + int rand(100);
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Да, оказалось, что у меня была несколько неполная документация по RegisterHotKey. Оно действительно выдаёт ошибку при попытке зарегистрировать существующую комбинацию, что и использует эта утилита. (Для тех, кто не нашёл, вот сайт автора, там можно взять исходники.) Не знаю, что он имел в виду под «without doing a lot more work», может хак какой. Из жёстких решений можно придумать перехватывать эту функцию до загрузки остальных программ какой-нибудь самопальной службой или драйвером, но на мой вкус оно не стоит потраченных усилий.

Всего записей: 2110 | Зарегистр. 03-02-2005 | Отправлено: 20:39 31-07-2008
oshizelly



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
evle

Цитата:
Для тех, кто не нашёл, вот сайт автора, там можно взять исходники.

Извиняюсь, но это не сайт автора, а страничка на форуме утилиты AutoHotkey. Или они как-то между собой связаны?

Всего записей: 6524 | Зарегистр. 18-09-2004 | Отправлено: 20:53 31-07-2008 | Исправлено: oshizelly, 20:55 31-07-2008
evle



1 + int rand(100);
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Не совсем та ссылка скопировалась.
http://www.autohotkey.com/forum/topic26023.html


----------
For every complex problem, there is a solution that is simple, neat, and wrong.

Всего записей: 2110 | Зарегистр. 03-02-2005 | Отправлено: 10:07 01-08-2008
igor_andreev

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
evle
Во-во, она самая. Я ее кинул в PATH и при вызове из cmd или Far название вечно забывал, JDNHR, поэтому и переименовал

Всего записей: 1705 | Зарегистр. 08-12-2004 | Отправлено: 15:53 01-08-2008 | Исправлено: igor_andreev, 15:54 01-08-2008
oshizelly



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Рискну продолжить собственную тему немного в другом ракурсе.  
Я использую замечательный менеджер буфера обмена CLCL. Он настолько интеллигентен, что, в отличие большинства программ, при запуске проверяет, свободны ли в данный момент в системе его хоткеи. Если обнаруживает, что какой-то из его хоткеев уде зарегистрирован на кого-то другого, то CLCL сообщает об этом. Но какой именно из хоткеев занят и каким именно приложением - этго CLCL почему-то не сообщает
Отсюда вопрос: можно ли где-то средствами системы или сторонних утилит посмотреть, какой именно хоткей не удалось зарегистировать либо какое именно приложение держит тот хоткей за собой.
 
З.Ы.
За прошедший год на по моему предыдущему вопросу так и не удалось отыскать ничего приличного (рекомедованная выше утилита  JDNHR (usedkeys) увы, не в счет).

Всего записей: 6524 | Зарегистр. 18-09-2004 | Отправлено: 13:01 28-08-2009
evle



1 + int rand(100);
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
oshizelly
Ну, оно же опенсорц. Потому можно скачать исходники и поправить. Нужный кусок в файле main.c после строки
static void regist_hotkey(const HWND hWnd, const BOOL show_err)
. Под рукой нет VisualStudio, поищи кого-нибудь из программистов на C, там всё просто.
Но это даст только название хоткея, занявшее приложение никто кроме ОС не знает, а она не скажет.

----------
For every complex problem, there is a solution that is simple, neat, and wrong.

Всего записей: 2110 | Зарегистр. 03-02-2005 | Отправлено: 16:01 29-08-2009
oshizelly



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
evle

Цитата:
занявшее приложение никто кроме ОС не знает, а она не скажет.

Но где-то же сама OS хранит эту информацию? Что, если пробраться туда тайком и подсмотреть? Если в системном реестре, то достаточно просто знать название ключа.

Всего записей: 6524 | Зарегистр. 18-09-2004 | Отправлено: 17:45 29-08-2009
urmigar



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
oshizelly

Цитата:
Если в системном реестре, то достаточно просто знать название ключа.

Да нет этого в реестре и быть не может
 

Цитата:
Что, если пробраться туда тайком и подсмотреть?

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

Всего записей: 437 | Зарегистр. 18-01-2008 | Отправлено: 17:50 29-08-2009
oshizelly



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
urmigar

Цитата:
Ну да, есть простой вариант: перехватить функцию регистрации хоткея и просто запоминать какое приложение попросилось

А как этот "простой" вариант реализовать? Есть какая-то утилита или штатный инструмент Windows XP?

Всего записей: 6524 | Зарегистр. 18-09-2004 | Отправлено: 10:18 30-08-2009
urmigar



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
oshizelly
Штатного инструмента нет.  
 
Про сторонние приложения вот что можно сказать: есть утилита, которой передаёшь описание ф-ии, а она её перехватывает. Но сам я эту утилиту не использовал.
 
А я просто писал драйвер в котором осуществлял указанные выше действия. Именно драйвер не обязателен, но он позволяет осуществлять перехват на нулевом кольце защиты. Если достаточно будет третьего кольца, то можно использовать перехват, раализованный в dll. Есть примеры в и-нете как это делать.

Всего записей: 437 | Зарегистр. 18-01-2008 | Отправлено: 12:10 01-09-2009
oshizelly



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
urmigar

Цитата:
А я просто писал драйвер в котором осуществлял указанные выше действия.... Есть примеры в и-нете как это делать.

Боюсь, что сам я этого не сделаю, даже опираясь на примеры: мозги не в ту сторону повернуты... А нельзя ли попросить поделиться готовым решением? Или оно очень индивидуальное под конкретную систему?

Всего записей: 6524 | Зарегистр. 18-09-2004 | Отправлено: 18:46 01-09-2009 | Исправлено: oshizelly, 18:48 01-09-2009
urmigar



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
oshizelly
 
The Universal Hooker is a tool to intercept execution of programs. It enables the user to intercept calls to API calls inside DLLs, and also arbitrary addresses within the executable file in memory.
 
P. S. Это не моя разработка

Всего записей: 437 | Зарегистр. 18-01-2008 | Отправлено: 11:59 02-09-2009 | Исправлено: urmigar, 11:59 02-09-2009
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2

Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » как увидеть список всех глобальных хоткеев?


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru