Diberi hotkey, bagaimana saya bisa menemukan program mana yang memilikinya?
Diberi hotkey, bagaimana saya bisa menemukan program mana yang memilikinya?
Jawaban:
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 Explorer
mungkin itulah yang Anda inginkan. Ini juga disebutkan dalam pertanyaan StackOverflow: Cari tahu proses apa yang mendaftarkan hotkey global? (Windows API) .
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:
- Jalankan alat ini (bagi saya, ada di
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\spyxx_amd64.exe
, atau gunakanspyxx.exe
untuk memantau proses 32-bit)- Di bilah menu, pilih Spy -> Log pesan ... (atau tekan Ctrl+ M)
- Periksa Semua Windows di Sistem dalam bingkai Windows Tambahan
- Beralih ke tab Pesan
- Klik Batal Semua tombol
- Pilih
WM_HOTKEY
di kotak daftar, atau centang Keyboard di Grup Pesan (jika Anda setuju dengan kemungkinan gangguan lainnya)- Klik tombol OK
- Tekan tombol pintas yang dimaksud ( Win+ R, misalnya)
- Pilih
WM_HOTKEY
baris di jendela Pesan (Semua Windows) , klik kanan, dan pilih Properti ... di menu konteks- Dalam dialog Properti Pesan , klik tautan Pegangan Jendela (ini akan menjadi pegangan untuk jendela yang menerima pesan)
- Klik tombol Sinkronkan pada dialog Properti Window . Ini akan menampilkan jendela di treeview jendela utama Spy ++.
- Pada dialog Window Properties , pilih tab Process
- Klik tautan ID Proses . Ini akan menunjukkan proses (Dalam saya Win+ Rkasus:
EXPLORER
)
WM_HOTKEY
pesan di log Pesan setelah menekan tombol pintas, Anda mungkin perlu menjalankan versi 32-bit dari Spy ++ .
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
SetWindowsHookEx
yang 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
IShellLink
antarmuka 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!