Bagaimana saya bisa menentukan proses mana yang memiliki hotkey di Windows?

97

Diberi hotkey, bagaimana saya bisa menemukan program mana yang memilikinya?

aldrinleal
sumber
1
versi windows yang mana?
Ivo Flipse

Jawaban:

46

Perhatian : Jika Anda menggunakan Win 8 atau lebih baru, jangan gunakan utilitas ini karena akan menimbulkan masalah - lihat komentar.

Jika Anda menjalankan Windows lebih awal dari Windows 8, Windows Hotkey Explorermungkin itulah yang Anda inginkan. Ini juga disebutkan dalam pertanyaan StackOverflow: Cari tahu proses apa yang mendaftarkan hotkey global? (Windows API) .

Hans-Peter Störr
sumber
32
Penjelajah HotKey rusak cukup parah di Windows 8 - saat startup itu pada dasarnya "menekan" setiap hotkey, menyebabkan semua jenis hal aneh terjadi, setelah itu terkunci dan harus dibunuh.
Nathan Ridley
2
@NathanRidley Ugh. Saya harap saya membaca komentar Anda sebelumnya. Ini adalah kombinasi yang mengerikan dengan Win8 dan Autohotkey. Bashing keyboard semacam ini bisa melakukan beberapa kerusakan serius juga.
VitalyB
11
JANGAN gunakan Hotkey Explorer di Windows 10 juga. Itu melakukan hal yang sama yang disebutkan @NathanRidley. Baru tahu caranya yang sulit.
Artem Russakovskii
5
Juga cukup edan pada Windows 7. Ini mengubah resolusi monitor utama saya ke 640x480 (pengaturan multi monitor).
Costa
3
Saya berharap ada alat yang lebih baru seperti Hotkey Exporer yang berfungsi untuk Windows 8 & 10
Flion
60

Ini berfungsi untuk saya di Win10 (dan mungkin semua versi Windows lainnya yang bahkan samar-samar) ... juga disalin di sini dari https://stackoverflow.com/a/43645062/995048 karena halaman ini tampaknya muncul pertama dalam hasil pencarian :

Salah satu cara yang mungkin adalah dengan menggunakan alat Visual Studio Spy ++ .

Cobalah ini:

  1. Jalankan alat ini (bagi saya, ada di C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\spyxx_amd64.exe, atau gunakan spyxx.exeuntuk memantau proses 32-bit)
  2. Di bilah menu, pilih Spy -> Log pesan ... (atau tekan Ctrl+ M)
  3. Periksa Semua Windows di Sistem dalam bingkai Windows Tambahan
  4. Beralih ke tab Pesan
  5. Klik Batal Semua tombol
  6. Pilih WM_HOTKEYdi kotak daftar, atau centang Keyboard di Grup Pesan (jika Anda setuju dengan kemungkinan gangguan lainnya)
  7. Klik tombol OK
  8. Tekan tombol pintas yang dimaksud ( Win+ R, misalnya)
  9. Pilih WM_HOTKEYbaris di jendela Pesan (Semua Windows) , klik kanan, dan pilih Properti ... di menu konteks
  10. Dalam dialog Properti Pesan , klik tautan Pegangan Jendela (ini akan menjadi pegangan untuk jendela yang menerima pesan)
  11. Klik tombol Sinkronkan pada dialog Properti Window . Ini akan menampilkan jendela di treeview jendela utama Spy ++.
  12. Pada dialog Window Properties , pilih tab Process
  13. Klik tautan ID Proses . Ini akan menunjukkan proses (Dalam saya Win+ Rkasus: EXPLORER)
pengguna995048
sumber
3
Ini adalah jawaban yang bagus, banyak langkah tetapi memberikan informasi yang sangat rinci. Perhatikan bahwa Anda harus menginstal SPY ++ dan Anda perlu menjalankan versi 64bit pada PC 64bit atau itu tidak akan berfungsi. Saya pikir cara 'termudah' untuk menginstal SPY ++ adalah menginstal Visual Studio 2017, pastikan untuk memilih muatan C ++. Untuk yang bukan pengembang, ini mungkin terlalu banyak pekerjaan.
Roy T.
2
Ini sempurna. Rumit, tapi sempurna!
angularsen
16
Jawaban bagus! Hanya catatan bahwa versi 64-bit dari Spy ++ hanya menangkap pesan untuk aplikasi 64-bit , jadi jika Anda tidak melihat WM_HOTKEYpesan di log Pesan setelah menekan tombol pintas, Anda mungkin perlu menjalankan versi 32-bit dari Spy ++ .
Dawid Ferenczy Rogožan
Tautan harus diperbarui ke situs dokumentasi baru . Untuk Visual Studio 2017, satu-satunya muatan yang diperlukan adalah " fitur desktop inti Visual C ++ ". Hotkey khusus aplikasi tidak dicatat? Misalnya, Ctrl + B di MS Word akan membuat teks tebal.
Franklin Yu
Terima kasih banyak atas ini. AKU AKHIRNYA menemukan apa yang mencuri Ctrl Shift F dari saya. (Itu adalah Razer Cortex). Catatan lain adalah bahwa kadang-kadang mata-mata ++ akan macet ketika Anda mencoba untuk melihat properti. (Dan kemudian Anda tidak dapat melihat kait lagi sampai reboot.) Saya dapat menyelesaikan ini dengan mengklik kanan, sebelum langkah 9, dan memilih "Stop Logging Message". Pada saat itu, tidak lagi macet ketika saya mencoba memeriksa properti. Terima kasih lagi!
Khale_Kitha
6

Ini mungkin telah dijawab pada Stack Overflow di utas ini:

Cari tahu proses apa yang mendaftarkan hotkey global? (API Windows)

Inilah jawaban Pauk :

Pertanyaan Anda menggelitik minat saya, jadi saya telah melakukan sedikit penggalian dan sementara, sayangnya saya tidak memiliki jawaban yang tepat untuk Anda, saya pikir saya akan membagikan apa yang saya miliki.

Saya menemukan contoh membuat kait keyboard (dalam Delphi) yang ditulis pada tahun 1998, tetapi dapat dikompilasi dalam Delphi 2007 dengan beberapa tweak.

Ini adalah DLL dengan panggilan ke SetWindowsHookExyang melewati fungsi panggilan balik, yang kemudian dapat mencegat stroke kunci: Dalam hal ini, bermain-main dengan mereka untuk bersenang-senang, mengubah kursor kiri ke kanan, dll. Aplikasi sederhana kemudian memanggil DLL dan melaporkan kembali hasilnya berdasarkan pada acara TTimer. Jika Anda tertarik, saya dapat memposting kode berbasis Delphi 2007.

Ini didokumentasikan dan dikomentari dengan baik dan Anda berpotensi menggunakannya sebagai dasar bekerja di mana pers utama akan pergi. Jika Anda bisa mendapatkan pegangan aplikasi yang mengirim pukulan tombol, Anda bisa melacaknya dengan cara itu. Dengan pegangan itu Anda bisa mendapatkan informasi yang Anda butuhkan dengan mudah.

Aplikasi lain telah mencoba menentukan tombol pintas dengan menelusuri Pintasannya karena dapat berisi tombol Pintasan, yang merupakan istilah lain untuk tombol pintas. Namun sebagian besar aplikasi tidak cenderung mengatur properti ini sehingga mungkin tidak mengembalikan banyak. Jika Anda tertarik dengan rute itu, Delphi memiliki akses ke IShellLinkantarmuka COM yang dapat Anda gunakan untuk memuat pintasan dari dan mendapatkan hotkey-nya:

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;

Jika Anda memiliki akses ke Safari Books Online , ada bagian bagus tentang bekerja dengan pintasan / tautan shell di Panduan Pengembang Borland Delphi 6 oleh Steve Teixeira dan Xavier Pacheco. Contoh saya di atas adalah versi yang dibantai dari sana dan situs ini .

Semoga itu bisa membantu!

Ivo Flipse
sumber