Jak mogę ustalić, który proces jest właścicielem skrótu w systemie Windows?


Odpowiedzi:


46

Uwaga : Jeśli używasz Win 8 lub nowszego, nie używaj tego narzędzia, ponieważ spowoduje to pewne problemy - patrz komentarze.

Jeśli używasz systemu Windows wcześniejszego niż Windows 8, Windows Hotkey Explorerprawdopodobnie jest to, czego chcesz. Jest to również wspomniane w pytaniu StackOverflow: Dowiedz się, jaki proces zarejestrował globalny skrót klawiszowy? (Windows API) .


32
Eksplorator HotKey dość źle psuje się w systemie Windows 8 - po uruchomieniu zasadniczo „naciska” każdy klawisz skrótu, powodując różne dziwne rzeczy, po czym blokuje się i musi zostać zabity.
Nathan Ridley,

2
@NathanRidley Ugh. Chciałbym przeczytać Twój komentarz wcześniej. To było okropne połączenie z Win8 i Autohotkey. Ten rodzaj uderzenia w klawiaturę mógłby również spowodować poważne szkody.
VitalyB,

11
NIE używaj Hotkey Explorer również w systemie Windows 10. Robi to samo, o czym wspomniał @NathanRidley. Właśnie dowiedziałem się na własnej skórze.
Artem Russakovskii

5
Również dość niechlujny w systemie Windows 7. Zmienił on rozdzielczość mojego głównego monitora na 640x480 (konfiguracja wielu monitorów).
Costa

3
Żałuję, że nie było nowszego narzędzia, takiego jak Hotkey Exporer, który działa na Windows 8 i 10
Flion

60

Działa to dla mnie w Win10 (i prawdopodobnie we wszystkich nawet nieco nowszych wersjach systemu Windows) ... również skopiowane tutaj z https://stackoverflow.com/a/43645062/995048, ponieważ ta strona wydaje się być pierwsza w wynikach wyszukiwania :

Jednym z możliwych sposobów jest użycie narzędzia Visual Studio Spy ++ .

Wypróbuj to:

  1. Uruchom narzędzie (dla mnie jest ono C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\spyxx_amd64.exeużywane lub służy spyxx.exedo monitorowania procesów 32-bitowych)
  2. Na pasku menu wybierz Szpieg -> Rejestruj wiadomości ... (lub naciśnij Ctrl+ M)
  3. Zaznacz Wszystkie okna w systemie w dodatkowej ramce Windows
  4. Przejdź na kartę Wiadomości
  5. Kliknij Wyczyść wszystko przycisk
  6. Wybierz WM_HOTKEYw polu listy lub zaznacz Klawiatura w grupach wiadomości (jeśli masz więcej potencjalnych dźwięków)
  7. Kliknij przycisk OK
  8. Naciśnij odpowiedni klawisz skrótu ( na przykład Win+ R)
  9. Wybierz WM_HOTKEYwiersz w oknie Wiadomości (wszystkie okna) , kliknij prawym przyciskiem myszy i wybierz Właściwości ... z menu kontekstowego
  10. W oknie dialogowym Właściwości wiadomości kliknij link Uchwyt okna (będzie to uchwyt okna, które otrzymało wiadomość)
  11. Kliknij przycisk Synchronizuj w oknie dialogowym Właściwości okna. Spowoduje to wyświetlenie okna w głównym widoku drzewa okna Spy ++.
  12. W oknie dialogowym Właściwości okna wybierz kartę Proces
  13. Kliknij link ID procesu . Spowoduje to wyświetlenie procesu (w moim Win+ Rprzypadku EXPLORER:)

3
To świetna odpowiedź, to wiele kroków, ale daje idealnie szczegółowe informacje. Pamiętaj, że musisz jakoś zainstalować SPY ++ i że musisz uruchomić wersję 64-bitową na komputerze 64-bitowym, inaczej nie będzie działać. Myślę, że „najprostszym” sposobem instalacji SPY ++ jest instalacja programu Visual Studio 2017, pamiętaj, aby wybrać ładunek C ++. Dla nie-programistów może to być trochę za dużo pracy.
Roy T.

2
To jest doskonałe. Opracowane, ale idealne!
angularsen

16
Świetna odpowiedź! Uwaga: 64-bitowa wersja Spy ++ przechwytuje tylko wiadomości dla aplikacji 64-bitowych , więc jeśli nie zobaczysz WM_HOTKEYwiadomości w dzienniku wiadomości po naciśnięciu klawisza skrótu, może być konieczne uruchomienie 32-bitowej wersji Spy ++ .
Dawid Ferenczy Rogožan

Link powinien zostać zaktualizowany do nowej strony z dokumentacją . W przypadku Visual Studio 2017 jedyną wymaganą funkcją jest „ Podstawowe funkcje pulpitu Visual C ++ ”. Skrót specyficzny dla aplikacji nie jest zalogowany? Na przykład Ctrl + B w MS Word spowoduje pogrubienie tekstu.
Franklin Yu

Dziękuję bardzo za to. WRESZCIE dowiedziałem się, co kradło mi Ctrl Shift F. (To był Razer Cortex). Inna uwaga jest taka, że ​​czasami spy ++ ulega awarii podczas próby wyświetlenia właściwości. (A potem nie widać już żadnych haczyków do momentu ponownego uruchomienia.) Mogłem rozwiązać ten problem, klikając prawym przyciskiem myszy przed krokiem 9 i wybierając „Zatrzymaj rejestrowanie wiadomości”. W tym momencie przestał się zawieszać, gdy próbowałem zbadać właściwości. Dzięki jeszcze raz!
Khale_Kitha

6

Odpowiedzi na to prawdopodobnie dotyczy przepełnienie stosu w tym wątku:

Dowiedz się, jaki proces zarejestrował globalny skrót? (Windows API)

Oto odpowiedź Pauka :

Twoje pytanie wzbudziło moje zainteresowanie, więc trochę kopałem i chociaż niestety nie mam dla ciebie właściwej odpowiedzi, pomyślałem, że podzielę się tym, co mam.

Znalazłem ten przykład tworzenia haka na klawiaturę (w Delphi) napisany w 1998 roku, ale można go skompilować w Delphi 2007 z kilkoma poprawkami.

Jest to biblioteka DLL z wywołaniem, SetWindowsHookExktóre przechodzi przez funkcję wywołania zwrotnego, która może następnie przechwytywać naciśnięcia klawiszy: W tym przypadku majstruje przy nich dla zabawy, zmieniając kursor od lewej do prawej itp. Prosta aplikacja następnie wywołuje bibliotekę DLL i informuje jego wyniki oparte na zdarzeniu TTimer. Jeśli jesteś zainteresowany, mogę opublikować kod oparty na Delphi 2007.

Jest dobrze udokumentowany i skomentowany i potencjalnie możesz go wykorzystać jako podstawę do ustalenia, gdzie jest naciśnięcie klawisza. Jeśli możesz uzyskać uchwyt aplikacji, która wysłała naciśnięcia klawiszy, możesz to prześledzić w ten sposób. Dzięki temu uchwytowi będziesz w stanie dość łatwo uzyskać potrzebne informacje.

Inne aplikacje próbowały określić skróty klawiszowe, przeglądając skróty, ponieważ mogą zawierać klawisz skrótu, który jest po prostu innym terminem na skrót klawiszowy. Jednak większość aplikacji nie ustawia tej właściwości, więc może nie zwracać zbyt wiele. Jeśli jesteś zainteresowany tą trasą, Delphi ma dostęp do IShellLinkinterfejsu COM, którego możesz użyć do załadowania skrótu i ​​uzyskania jego skrótu:

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;

Jeśli masz dostęp do Safari Books Online , w sekcji Borland Delphi 6 Developer's Guide autorstwa Steve'a Teixeiry i Xaviera Pacheco znajdziesz dobrą sekcję na temat pracy ze skrótami / linkami . Mój przykład powyżej to stonowana wersja stamtąd i ta strona .

Mam nadzieję, że to pomaga!

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.