Как определить, какому процессу принадлежит горячая клавиша в Windows?

При наличии горячей клавиши, как я могу найти, какой программе она принадлежит?

7 ответов

Решение

Внимание: если вы используете Win 8 или более позднюю версию, не используйте эту утилиту, так как это создаст некоторые проблемы - см. Комментарии.

Если вы используете Windows раньше, чем Windows 8, то Windows Hotkey Explorer это, вероятно, то, что вы хотите. Это также упоминается в вопросе StackOverflow: узнать, какой процесс зарегистрировал глобальную горячую клавишу? (Windows API).

Это работает для меня в 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. В строке меню выберите Spy -> Log messages... (или нажмите Ctrl + M)
  3. Отметьте все окна в системе в дополнительном фрейме Windows
  4. Переключиться на вкладку Сообщения
  5. Нажмите кнопку Очистить все
  6. Выбрать WM_HOTKEY в списке или установите флажок Клавиатура в группах сообщений (если у вас все в порядке с большим количеством потенциальных помех)
  7. Нажмите кнопку ОК
  8. Нажмите соответствующую горячую клавишу (например, Win + R)
  9. Выберите WM_HOTKEY в окне " Сообщения" (все окна) щелкните правой кнопкой мыши и выберите " Свойства" в контекстном меню.
  10. В диалоговом окне " Свойства сообщения " нажмите ссылку " Описатель окна" (это будет дескриптор окна, получившего сообщение).
  11. Нажмите кнопку " Синхронизировать" в диалоговом окне "Свойства окна". Это покажет окно в основном дереве Spy++.
  12. В диалоговом окне "Свойства окна" выберите вкладку " Процесс ".
  13. Нажмите ссылку Идентификатор процесса. Это покажет вам процесс (В моем случае Win + R: EXPLORER)

Недавно я написал небольшую утилиту Hotkey Detective для новых версий Windows (проверено на 8.1 и 10). Он просто показывает, какой процесс владеет горячей клавишей при нажатии клавиши.

В отличие от других известных инструментов, таких как Hotkey Explorer, моя утилита не перечисляет все горячие клавиши, поскольку это повлечет за собой их искусственный запуск и в конечном итоге поломку системы. Чтобы увидеть, какой процесс виноват, просто запустите мою утилиту с правами администратора и нажмите украденную горячую клавишу. Вот и все.

Исходники Hotkey Detective и краткое руководство по использованию можно найти на GitHub . Бинарные выпуски тоже есть.

Это ранняя бета-версия, поэтому сообщайте о любых проблемах, если вы их обнаружите.

Это, вероятно, ответили на переполнение стека в этой теме:

Узнайте, в каком процессе зарегистрирована глобальная горячая клавиша? (Windows 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 от Steve Teixeira и Xavier Pacheco. Мой пример выше - отрубленная версия оттуда и с этого сайта.

Надеюсь, это поможет!

Я должен порекомендовать OpenArk. На вкладке «Ядро» на странице «Горячие клавиши системы» вы можете найти все зарегистрированные горячие клавиши и соответствующие процессы. Не забудьте сначала нажать кнопку «Ввести KernelMode».

Эти ответы мне не помогли, потому что, если я правильно понимаю, горячая клавиша только что была нажата на.lnkкоторый не был удален при удалении. Spy++ аварийно завершился при запуске.

Выполнение шагов, описанных в этом ответе, решило проблему: найдите соответствующий ярлык (мой скрывался в меню «Пуск», не отображаясь под кнопкой «Пуск» Windows по какой-либо причине) и удалите настройку его горячей клавиши (с помощью Backspace) или просто удалите ярлык вообще.

Я использую Ctrl-Shift-C и Ctrl-Shift-V для копирования и вставки форматирования в Word в Win10. Программное обеспечение AMD Radeon Pro лишило возможности сочетания клавиш Ctrl-Shift-C для включения/выключения камеры. Я отключил все горячие клавиши в программном обеспечении Radeon и вернул функциональность Word, но можно было переназначить только часть камеры или любую другую конфликтующую горячую клавишу, если вы хотели сохранить функцию горячей клавиши Radeon.

Другие вопросы по тегам