it-swarm-id.com

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

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

92
aldrinleal

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, maka Windows Hotkey Explorer mungkin yang Anda inginkan. Ini juga disebutkan dalam pertanyaan StackOverflow: Cari tahu proses apa yang mendaftarkan hotkey global? (Windows API) .

45

Ini berfungsi untuk saya di Win10 (dan mungkin semua versi Windows lain yang bahkan samar-samar) ... juga disalin di sini dari https://stackoverflow.com/a/43645062/995048 karena halaman ini tampaknya untuk 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.exe untuk 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 tombol Hapus Semua
  6. Pilih WM_HOTKEY di kotak daftar, atau centang Keyboard di Grup Pesan (jika Anda setuju dengan noise yang lebih potensial)
  7. Klik tombol OK
  8. Tekan tombol pintas yang dimaksud (Win + R, sebagai contoh)
  9. Pilih baris WM_HOTKEY di jendela Pesan (Semua Windows) , klik kanan, dan pilih Properti ... pada 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 Jendela . Ini akan menampilkan jendela di treeview jendela utama Spy ++.
  12. Pada dialog Properti Jendela , pilih tab Proses
  13. Klik tautan ID Proses . Ini akan menunjukkan kepada Anda prosesnya (Dalam bahasa saya Win + R case: Explorer)
50
user995048

Ini mungkin telah dijawab pada Stack Overflow di utas ini:

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

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 ini contoh membuat pengait keyboard (dalam Delphi) yang ditulis pada tahun 1998, tetapi dapat dikompilasi dalam Delphi 2007 dengan beberapa penyesuaian.

Ini adalah DLL dengan panggilan ke SetWindowsHookEx yang melewati fungsi panggilan balik, yang kemudian dapat mencegat stroke kunci: Dalam hal ini, itu bermain-main dengan mereka untuk bersenang-senang, mengubah kursor kiri ke kanan, dll. Aplikasi sederhana lalu panggil DLL dan laporkan 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 hotkey dengan melalui Shortcuts mereka karena mereka dapat berisi tombol Shortcut, yang hanya merupakan istilah lain untuk hotkey. Namun sebagian besar aplikasi tidak cenderung mengatur properti ini sehingga mungkin tidak mengembalikan banyak. Jika Anda tertarik dengan rute itu, Delphi memiliki akses ke antarmuka COM IShellLink 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 yang 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 dijagal dari sana dan situs ini .

Semoga itu bisa membantu!

5
Ivo Flipse