it-swarm-ko.com

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

단축키가 주어지면 어떤 프로그램을 소유하고 있는지 어떻게 알 수 있습니까?

106
aldrinleal

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

Windows 8 이전의 Windows를 실행중인 경우 Windows Hotkey Explorer 아마 당신이 원하는 것입니다. 이것은 StackOverflow 질문에서도 언급됩니다. 글로벌 핫키를 등록한 프로세스를 찾으십니까? (Windows API) .

47
Hans-Peter Störr

이것은 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 ... (또는 적중을 선택하십시오. CtrlM)
  3. Additional Windows 프레임에서 모든 Windows 시스템 확인
  4. Messages 탭으로 전환
  5. Clear All 버튼을 클릭하십시오
  6. 목록 상자에서 WM_HOTKEY를 선택하거나 Keyboard in Message Groups (잠재적 인 소음이있는 경우 확인)
  7. OK 버튼을 클릭하십시오
  8. 해당 핫키를 누릅니다 (WinR예를 들어)
  9. Messages (All Windows) 창에서 WM_HOTKEY 줄을 선택하고 마우스 오른쪽 버튼을 클릭 한 다음 상황에 맞는 메뉴에서 속성 ...을 선택하십시오.
  10. Message Properties 대화 상자에서 Window Handle 링크를 클릭하십시오 (메시지를받은 창의 핸들이됩니다).
  11. 창 속성 대화창에서 동기화 버튼을 클릭하십시오. 기본 Spy ++ 창 트리 뷰에 창이 표시됩니다.
  12. Window Properties 대화 상자에서 Process 탭을 선택하십시오.
  13. Process ID 링크를 클릭하십시오. 이것은 당신에게 과정을 보여줄 것입니다. WinR 사례 : Explorer)
67
user995048

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

글로벌 핫키를 등록한 프로세스를 찾으십니까? (Windows API)

다음은 Pauk 님의 답변입니다.

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

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

콜백 함수를 통과하는 SetWindowsHookEx에 대한 호출이있는 DLL)이며 키 스트로크를 가로 챌 수 있습니다.이 경우 왼쪽 커서를 변경하여 재미있게 땜질합니다. 간단한 앱은 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 에 액세스 할 수있는 경우 Steve Teixeira와 Xavier Pacheco의 Borland Delphi 6 개발자 안내서에 바로 가기 작업/쉘 링크 작업에 대한 유용한 섹션 . 위의 예는 거기에서 정육점 버전이며 이 사이트 입니다.

희망이 도움이됩니다!

6
Ivo Flipse