Як отримати гарячу клавішу, як я можу знайти, яка програма їй належить?
Як отримати гарячу клавішу, як я можу знайти, яка програма їй належить?
Відповіді:
Застереження : Якщо ви використовуєте Win 8 або новішу версію, не використовуйте цю утиліту, оскільки це створить певні проблеми - див. Коментарі.
Якщо ви використовуєте Windows раніше, ніж Windows 8, то Windows Hotkey Explorer
, мабуть, те, що ви хочете. Про це також йдеться у питанні StackOverflow: Дізнайтеся, який процес зареєстрував глобальну гарячу клавішу ? (API API) .
Це працює для мене в Win10 (і, мабуть, всі інші навіть невиразно новіші версії Windows) ... також скопійовано сюди з https://stackoverflow.com/a/43645062/995048, оскільки ця сторінка, здається, з’являється першою в результатах пошуку :
Один із можливих способів - використовувати інструмент Visual Studio Spy ++ .
Спробуйте:
- Запустіть інструмент (для мене він працює
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\spyxx_amd64.exe
або використовуйтеspyxx.exe
для моніторингу 32-бітних процесів)- На панелі меню виберіть Шпигун -> Журнал повідомлень ... (або натисніть Ctrl+ M)
- Перевірте всі вікна в системі в додаткових вікнах рами
- Перейдіть на вкладку Повідомлення
- Натисніть Очистити всі кнопки
- Виберіть
WM_HOTKEY
у списку або встановіть прапорець Клавіатура в групах повідомлень (якщо все гаразд із більшим потенційним шумом)- Натисніть кнопку ОК
- Натисніть відповідну гарячу клавішу ( Win+ R, наприклад)
- Виберіть
WM_HOTKEY
рядок у вікні Повідомлення (Усі Windows) , клацніть правою кнопкою миші та виберіть Властивості ... у контекстному меню- У діалоговому вікні " Властивості повідомлення" натисніть посилання " Ручка вікна " (це буде ручка для вікна, яке отримало повідомлення)
- Натисніть кнопку " Синхронізувати" у діалоговому вікні "Властивості вікна". Це покаже вікно в головному перегляді дерева Spy ++.
- У діалоговому вікні "Властивості вікна" виберіть вкладку " Процес"
- Клацніть посилання Ідентифікатор процесу . Це покаже вам процес (у моєму Win+ Rвипадку
EXPLORER
:)
WM_HOTKEY
повідомлення в журналі повідомлень після натискання швидкої клавіші, можливо, вам доведеться запустити 32-бітну версію Spy ++ .
На це, ймовірно, відповіли на переповнення стека в цій темі:
Дізнайтеся, який процес зареєстрував глобальну швидку клавішу? (API API)
Ось відповідь Паука :
Ваше запитання викликало мій інтерес, тому я трохи копав, і, на жаль, не маю належної відповіді для вас, я думав, що поділюсь тим, що маю.
Я знайшов цей приклад створення гачка для клавіатури (у Delphi), написаного в 1998 році, але його можна компілювати в Delphi 2007 з декількома налаштуваннями.
Це DLL з викликом,
SetWindowsHookEx
який проходить через функцію зворотного виклику, яка потім може перехоплювати натискання клавіш: У цьому випадку це цікаво з ними для розваги, зміна лівого курсору вправо і т. Д. Простий додаток потім зателефонує до DLL і звітує назад її результати на основі події TTimer. Якщо вас цікавить, я можу розмістити код на основі Delphi 2007.Це добре задокументовано та прокоментовано, і ви потенційно можете використати це як основу для розробки, де відбувається натискання клавіш. Якщо ви могли отримати ручку програми, яка надіслала ключові штрихи, ви могли б відстежити її таким чином. За допомогою цієї ручки ви зможете досить легко отримати необхідну інформацію.
Інші додатки спробували визначити гарячі клавіші, пройшовши їх ярлики, оскільки вони можуть містити клавішу швидкого доступу, що є лише ще одним терміном для швидкої клавіші. Однак більшість програм не прагнуть встановлювати це властивість, тому воно може не повертатись багато. Якщо вас цікавить цей маршрут, Delphi має доступ до
IShellLink
інтерфейсу COM, який ви можете використовувати для завантаження ярлика та отримання його гарячої клавіші:uses ShlObj, ComObj, ShellAPI, ActiveX, CommCtrl; procedure GetShellLinkHotKey; var LinkFile : WideString; SL: IShellLink; PF: IPersistFile; HotKey : Word; HotKeyMod: Byte; HotKeyText : string; begin LinkFile := 'C:\Temp\Temp.lnk'; OleCheck(CoCreateInstance(CLSID_ShellLink, nil, CLSCTX_INPROC_SERVER, IShellLink, SL)); // The IShellLink implementer must also support the IPersistFile // interface. Get an interface pointer to it. PF := SL as IPersistFile; // Load file into IPersistFile object OleCheck(PF.Load(PWideChar(LinkFile), STGM_READ)); // Resolve the link by calling the Resolve interface function. OleCheck(SL.Resolve(0, SLR_ANY_MATCH or SLR_NO_UI)); // Get hotkey info OleCheck(SL.GetHotKey(HotKey)); // Extract the HotKey and Modifier properties. HotKeyText := ''; HotKeyMod := Hi(HotKey); if (HotKeyMod and HOTKEYF_ALT) = HOTKEYF_ALT then HotKeyText := 'ALT+'; if (HotKeyMod and HOTKEYF_CONTROL) = HOTKEYF_CONTROL then HotKeyText := HotKeyText + 'CTRL+'; if (HotKeyMod and HOTKEYF_SHIFT) = HOTKEYF_SHIFT then HotKeyText := HotKeyText + 'SHIFT+'; if (HotKeyMod and HOTKEYF_EXT) = HOTKEYF_EXT then HotKeyText := HotKeyText + 'Extended+'; HotKeyText := HotKeyText + Char(Lo(HotKey)); if (HotKeyText = '') or (HotKeyText = #0) then HotKeyText := 'None'; ShowMessage('Shortcut Key - ' + HotKeyText); end;
Якщо у вас є доступ до Safari Books Online , у розділі Посібника для розробників Borland Delphi 6 Стіва Тейшейри та Ксав'єра Пачеко є хороший розділ про роботу з ярликами / оболонками . Мій приклад, наведений вище, - це версія з м'ясом звідти та з цього сайту .
Сподіваюся, що це допомагає!