it-swarm.asia

Windows'ta hangi işlemin bir kısayol tuşuna sahip olduğunu nasıl belirleyebilirim?

Kısayol tuşu verilirse, hangi programın kendisine ait olduğunu nasıl bulabilirim?

92
aldrinleal

Dikkat : Win 8 veya daha yenisini kullanıyorsanız, bu yardımcı programı kullanmayın, çünkü bazı sorunlar yaratabilir - yorumlara bakın.

Bir Windows'u Windows 8'den daha önce kullanıyorsanız, Windows Hotkey Explorer muhtemelen istediğiniz şeydir. Bu aynı zamanda StackOverflow sorusunda da belirtilmiştir: ( Genel bir kısayol tuşuyla hangi işlemin kaydedildiğini öğrenin? (Windows API) .

45

Bu benim için Win10'da (ve muhtemelen Windows’un belirsiz güncel sürümlerinin hepsinde) ... aynı zamanda buradan kopyalandı https://stackoverflow.com/a/43645062/995048 bu sayfa göründüğü için Arama sonuçlarında ilk sırada olmak:

Olası yollardan biri Visual Studio aracı Spy ++ kullanmaktır.

Bunu bir deneyin:

  1. Aracı çalıştırın (benim için C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\spyxx_AMD64.exe konumunda veya 32-bit işlemlerini izlemek için spyxx.exe kullanın)
  2. Menü çubuğunda Spy -> Günlük mesajları ... (veya isabet) seçeneğini seçin. Ctrl + M)
  3. Check Sistemdeki Tüm Windows Ek Windows çerçevede
  4. Mesajlar sekmesine geçin
  5. Tümünü Temizle düğmesini tıklayın.
  6. Liste kutusunda WM_HOTKEY öğesini seçin veya Keyboard in Mesaj Grupları (daha fazla potansiyel gürültü ile sorun yaşarsanız) kontrol edin.
  7. OK düğmesini tıklayın.
  8. Söz konusu kısayol tuşuna basın (Win + R, Örneğin)
  9. Mesajlar (Tüm Windows) penceresinden WM_HOTKEY satırını seçin, sağ tıklayın ve bağlam menüsünde Properties ...
  10. Message Properties iletişim kutusunda, Window Handle bağlantısını tıklayın (bu, mesajı alan pencerenin tanıtıcısı olacaktır)
  11. Window Properties iletişim kutusundaki Synchronize düğmesini tıklayın. Bu, pencereyi ana Spy ++ penceresi ağaç görünümünde gösterecektir.
  12. Window Properties iletişim kutusunda, Process sekmesini seçin
  13. Process ID bağlantısını tıklayın. Bu size süreci gösterecektir (Benim Win + R case: Explorer)
50
user995048

Muhtemelen bu konudaki Yığın Taşması ile cevaplanmıştır:

Küresel kısayol tuşu ile hangi işlemin kaydedildiğini öğrenin? (Windows API)

İşte Pauk 'ın cevabı:

Sorunuz ilgimi çekti, bu yüzden biraz araştırma yaptım ve maalesef size uygun bir cevabım yok, sahip olduklarımı paylaşacağımı düşündüm.

Bunu buldum klavye kancası oluşturma örneği (Delphi'de) 1998'de yazılmıştır, ancak Delphi 2007'de birkaç tweaks ile derlenebilir.

Geriye dönme işlevinden geçen SetWindowsHookEx çağrısı ile DLL, daha sonra tuş vuruşlarını engelleyebilir: Bu durumda, eğlenmek için onlarla dolaşıyor, sol imleci sağa değiştiriyor vb. Basit bir uygulama daha sonra DLL öğesini çağırır ve sonuçlarını bir TTimer olayına dayanarak geri rapor eder. Eğer ilgileniyorsanız Delphi 2007 tabanlı kodu gönderebilirim.

İyi belgelendirilmiş ve yorumlanmıştır ve potansiyel olarak bir basının nereye gittiğini hesaplamak için kullanabilirsiniz. Tuş vuruşlarını gönderen uygulamanın tanıtıcısını bulabilirseniz, onu bu şekilde takip edebilirsiniz. Bu tutamaç sayesinde ihtiyacınız olan bilgiyi kolayca elde edebilirsiniz.

Diğer uygulamalar Kısayol tuşlarını kullanarak kısayol tuşlarını belirlemeyi denedi, çünkü kısayol tuşu için başka bir terim olan Kısayol tuşunu içerebilirler. Bununla birlikte, çoğu uygulama bu özelliği ayarlama eğiliminde değildir, bu yüzden fazla geri dönmeyebilir. Bu rotayla ilgileniyorsanız, Delphi, bir kısayol yüklemek ve kısayol tuşunu bulmak için kullanabileceğiniz IShellLink COM arabirimine erişebilir:

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 'a erişim hakkınız varsa, kısayollarla/Shell bağlantılarıyla çalışma hakkında iyi bir bölüm var Steve Teixeira ve Xavier Pacheco tarafından sunulan Borland Delphi 6 Geliştirici Kılavuzu . Yukarıdaki örneğim oradan kasaplanmış bir sürüm ve bu site .

Umarım yardımcı olur!

5
Ivo Flipse