Як я можу визначити, який процес має гарячу клавішу в Windows?


Відповіді:


46

Застереження : Якщо ви використовуєте Win 8 або новішу версію, не використовуйте цю утиліту, оскільки це створить певні проблеми - див. Коментарі.

Якщо ви використовуєте Windows раніше, ніж Windows 8, то Windows Hotkey Explorer, мабуть, те, що ви хочете. Про це також йдеться у питанні StackOverflow: Дізнайтеся, який процес зареєстрував глобальну гарячу клавішу ? (API API) .


31
Провідник HotKey досить сильно вкручується в Windows 8 - при запуску він, в основному, «натискає» кожну гарячу клавішу, викликаючи трапляння всіляких дивних речей, після чого вона закривається і повинна бути вбита.
Натан Рідлі

2
@NathanRidley Цьфу Я б хотів, щоб я прочитав ваш коментар раніше. Це було жахливе поєднання з Win8 та Autohotkey. Цей тип клавіатури клавіатури теж міг завдати серйозної шкоди.
VitalyB

10
НЕ використовуйте програму Hotkey Explorer і в Windows 10. Це робить те саме, що згадував @NathanRidley. Щойно з’ясував важкий шлях.
Артем Русаковський

5
Також досить гнучко в Windows 7. Він переключив роздільну здатність мого основного монітора на 640x480 (налаштування декількох моніторів).
Коста

3
Я хотів би, щоб з’явився останній інструмент, як Hotkey Exporer, який працює для Windows 8 і 10
Flion

57

Це працює для мене в Win10 (і, мабуть, всі інші навіть невиразно новіші версії Windows) ... також скопійовано сюди з https://stackoverflow.com/a/43645062/995048, оскільки ця сторінка, здається, з’являється першою в результатах пошуку :

Один із можливих способів - використовувати інструмент Visual Studio Spy ++ .

Спробуйте:

  1. Запустіть інструмент (для мене він працює C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\spyxx_amd64.exeабо використовуйте spyxx.exeдля моніторингу 32-бітних процесів)
  2. На панелі меню виберіть Шпигун -> Журнал повідомлень ... (або натисніть Ctrl+ M)
  3. Перевірте всі вікна в системі в додаткових вікнах рами
  4. Перейдіть на вкладку Повідомлення
  5. Натисніть Очистити всі кнопки
  6. Виберіть WM_HOTKEYу списку або встановіть прапорець Клавіатура в групах повідомлень (якщо все гаразд із більшим потенційним шумом)
  7. Натисніть кнопку ОК
  8. Натисніть відповідну гарячу клавішу ( Win+ R, наприклад)
  9. Виберіть WM_HOTKEYрядок у вікні Повідомлення (Усі Windows) , клацніть правою кнопкою миші та виберіть Властивості ... у контекстному меню
  10. У діалоговому вікні " Властивості повідомлення" натисніть посилання " Ручка вікна " (це буде ручка для вікна, яке отримало повідомлення)
  11. Натисніть кнопку " Синхронізувати" у діалоговому вікні "Властивості вікна". Це покаже вікно в головному перегляді дерева Spy ++.
  12. У діалоговому вікні "Властивості вікна" виберіть вкладку " Процес"
  13. Клацніть посилання Ідентифікатор процесу . Це покаже вам процес (у моєму Win+ Rвипадку EXPLORER:)

3
Це чудова відповідь, це багато кроків, але дає ідеально детальну інформацію. Зауважте, що вам потрібно буде якось встановити SPY ++ і вам потрібно запустити 64-бітну версію на 64-бітному ПК, інакше вона не працюватиме. Я думаю, що найпростіший спосіб встановити SPY ++ - це встановити Visual Studio 2017, обов'язково виберіть корисну навантаження C ++. Для не розробників це може бути занадто великою роботою.
Рой Т.

2
Це прекрасно. Розроби, але ідеально!
angularsen

16
Чудова відповідь! Лише зауважте, що 64-розрядна версія Spy ++ ловить лише повідомлення для 64-розрядних програм , тому якщо ви не бачите WM_HOTKEYповідомлення в журналі повідомлень після натискання швидкої клавіші, можливо, вам доведеться запустити 32-бітну версію Spy ++ .
Dawid Ferenczy Rogožan

Посилання має бути оновлено на новий сайт документації . Для Visual Studio 2017 єдиним необхідним корисним навантаженням є " Основні функції робочого столу Visual C ++ ". Спеціальна клавіша програми не записується? Наприклад, Ctrl + B в MS Word зробить текст жирним.
Франклін Ю

Дуже дякую за це. Я НАРЕШЧО дізнався, що вкрало у мене Ctrl Shift F. (Це був Razer Cortex). Ще одна примітка полягає в тому, що іноді шпигун ++ вийде з ладу при спробі перегляду властивостей. (І тоді ви не можете побачити більше гачків до перезавантаження.) Мені вдалося вирішити це, натиснувши правою кнопкою миші, перед кроком 9 та вибравши "Зупинити реєстрацію повідомлення". У той момент він більше не розбився, коли я намагався вивчити властивості. Знову дякую!
Khale_Kitha

6

На це, ймовірно, відповіли на переповнення стека в цій темі:

Дізнайтеся, який процес зареєстрував глобальну швидку клавішу? (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 Стіва Тейшейри та Ксав'єра Пачеко є хороший розділ про роботу з ярликами / оболонками . Мій приклад, наведений вище, - це версія з м'ясом звідти та з цього сайту .

Сподіваюся, що це допомагає!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.