Windows에서 핫키를 소유 한 프로세스를 어떻게 확인할 수 있습니까?


답변:


46

주의 : Win 8 이상을 사용하는 경우이 유틸리티를 사용하지 마십시오. 문제가 발생할 수 있습니다. 설명을 참조하십시오.

Windows 8 이전의 Windows를 실행중인 경우 Windows Hotkey Explorer원하는 것일 수 있습니다. 이것은 또한 StackOverflow 질문에 언급되어 있습니다. 어떤 프로세스가 전역 핫키를 등록했는지 확인하십시오. (Windows API) .


32
핫키 탐색기는 Windows 8에서 매우 나쁘게 시작합니다. 시작시 기본적으로 모든 핫키를 "누르고"모든 종류의 이상한 일이 발생하게됩니다.
Nathan Ridley

2
@NathanRidley Ugh. 나는 당신의 의견을 전에 읽었기를 바랍니다. 이것은 Win8과 Autohotkey와의 끔찍한 조합이었습니다. 이런 종류의 키보드 bash는 심각한 피해를 줄 수 있습니다.
VitalyB

11
Windows 10에서도 핫키 탐색기를 사용하지 마십시오. @NathanRidley가 언급 한 것과 동일한 일을합니다. 어려운 길을 찾았습니다.
Artem Russakovskii

5
Windows 7에서도 매우 까다 롭습니다. 메인 모니터의 해상도를 640x480 (멀티 모니터 설정)으로 전환했습니다.
Costa

3
Windows 8 & 10에서 작동하는 Hotkey Exporer와 같은 최신 도구가 있었으면합니다.
Flion

60

이것은 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.exe32 비트 프로세스를 모니터링 하는 데 사용 )
  2. 메뉴 표시 줄에서 Spy- > Log messages ... (또는 Ctrl+를 누르십시오 M)를 선택하십시오
  3. 확인 시스템에 모든 창을추가 윈도우 프레임
  4. 메시지 탭으로 전환
  5. 모두 지우기 버튼을 클릭하십시오
  6. WM_HOTKEY목록 상자에서 선택 하거나 메시지 그룹 에서 키보드 를 확인하십시오 (잠재적 인 소음이있는 경우)
  7. 확인 버튼을 클릭하십시오
  8. 해당 핫키를 누릅니다 ( 예 : Win+ R)
  9. 메시지 (모든 Windows)WM_HOTKEY에서 라인을 선택하고 마우스 오른쪽 단추를 클릭 한 다음 컨텍스트 메뉴에서 특성 ... 을 선택하십시오.
  10. 에서 메시지 등록 정보 대화 상자에서 클릭 창 핸들의 링크를 (이 메시지를받은 윈도우의 핸들이 될 것입니다)
  11. 창 속성 대화 상자 에서 동기화 버튼을 클릭하십시오 . 기본 Spy ++ 창 트리 뷰에 창이 표시됩니다.
  12. 창 속성 대화 상자에서 선택 프로세스 탭을
  13. 프로세스 ID 링크를 클릭하십시오 . 이것은 (내 당신에게 그 과정을 보여줍니다 Win+의 R경우 : EXPLORER)

3
이것은 훌륭한 답변이며 많은 단계이지만 완벽하게 자세한 정보를 제공합니다. 어떻게 든 SPY ++를 설치해야하고 64 비트 PC에서 64 비트 버전을 실행해야합니다. 그렇지 않으면 작동하지 않습니다. SPY ++를 설치하는 가장 쉬운 방법은 Visual Studio 2017을 설치하는 것입니다 .C ++ 페이로드를 선택하십시오. 개발자가 아닌 경우에는 너무 많은 작업 일 수 있습니다.
Roy T.

2
이것은 완벽 해요. 정교하지만 완벽합니다!
angularsen

16
좋은 답변입니다! 것을 그냥 참고 스파이 ++의 64 비트 버전은 64 비트 응용 프로그램에 대한 메시지 만 잡는다 는 표시되지 않습니다, 그래서 만약 WM_HOTKEY의 메시지 메시지 로그를 핫키를 누른 후, 당신은 ++ 스파이의 32 비트 버전을 실행해야 할 수도 있습니다 .
Dawid Ferenczy Rogožan

링크는 새 설명서 사이트 로 업데이트해야합니다 . Visual Studio 2017의 경우 필요한 유일한 페이로드는 " Visual C ++ 핵심 데스크톱 기능 "입니다. 응용 프로그램 특정 핫키가 기록되지 않습니까? 예를 들어 MS Word에서 Ctrl + B를 사용하면 텍스트가 굵게 표시됩니다.
Franklin Yu

정말 감사합니다. 나는 Ctrl Shift F를 훔친 것이 무엇인지 마침내 알게되었습니다. (Razer Cortex였습니다). 또 다른 메모는 속성을 보려고 할 때 때때로 spy ++가 충돌한다는 것입니다. 다시 부팅 할 때까지 더 이상 후크를 볼 수 없습니다. 9 단계 전에 마우스 오른쪽 단추를 클릭하고 "로그 메시지 중지"를 선택하여이 문제를 해결할 수있었습니다. 그 시점에서 속성을 검사하려고 할 때 더 이상 충돌이 발생하지 않았습니다. 다시 감사합니다!
Khale_Kitha

6

이것은 아마도이 스레드의 스택 오버플로에서 대답했을 것입니다.

어떤 프로세스가 전역 핫키를 등록했는지 확인하십시오. (Windows API)

Pauk 의 답변은 다음과 같습니다 .

귀하의 질문에 관심이 생겨서 약간 파고 들었지만 불행히도 나는 당신에게 적절한 대답이 없지만, 내가 가진 것을 나눌 것이라고 생각했습니다.

1998 년에 작성된 키보드 후크 (Delphi에서)를 만드는예제를 찾았 지만 Delphi 2007에서 몇 가지 조정으로 컴파일 할 수 있습니다.

SetWindowsHookEx콜백 함수를 통과 하는 호출이있는 DLL입니다.이 함수는 키 스트로크를 가로 챌 수 있습니다. 그 결과는 TTimer 이벤트를 기반으로합니다. 관심이 있으시면 Delphi 2007 기반 코드를 게시 할 수 있습니다.

잘 문서화되고 주석이 달렸으며 키를 누르는 곳을 해결하는 기초로 사용할 수 있습니다. 키 입력을 보낸 응용 프로그램의 핸들을 얻을 수 있으면 다시 추적 할 수 있습니다. 이 핸들을 사용하면 필요한 정보를 쉽게 얻을 수 있습니다.

다른 응용 프로그램은 바로 가기 키를 포함 할 수 있으므로 바로 가기를 통해 핫키를 결정하려고 시도했습니다. 바로 가기 키는 바로 가기 키의 다른 용어 일뿐입니다. 그러나 대부분의 응용 프로그램은이 속성을 설정하지 않아서 많이 반환되지 않을 수 있습니다. 해당 경로에 관심이 있다면 Delphi는 IShellLinkCOM 인터페이스에 액세스 할 수 있습니다.이 인터페이스는 단축키를로드하고 단축키를 얻는 데 사용할 수 있습니다.

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;

당신에 대한 액세스 권한을 가지고있는 경우에 사파리 온라인 하는이 바로 가기 / 쉘 링크 사용에 대한 좋은 부분 스티브 텍사스와 사비 파 체코에 의해 볼랜드 델파이 6 개발자 안내서는. 위의 예는 이 사이트와이 사이트 의 정육점 버전입니다 .

희망이 도움이됩니다!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.