SORU
6 Mayıs 2009, ÇARŞAMBA


Küresel bir kısayol tuşu kayıtlı ne bulabilirim ki? (Windows API)

Öğrenmek için başaramadım kadarıyla, Windows API işlevi, küresel bir kısayol tuşu (Yöneticileri) kayıtlı ne söylemek sunmuyor. Sadece bir kısayol tuşu Yöneticileri dönerse "" kısayol tuşu. sahibi yanlış, ama kayıtlı bulabilirim

Doğrudan bir API yokluğunda, dolambaçlı bir yol olabilir mi? Windows her her şey göründüğü gibi kısayol tuşu ile ilişkili kolu tutar - bu Bilgi almanın bir yolu olmalı yok bu biraz can sıkıcı.

Bir örnek, büyük olasılıkla işe yaramaz: kayıtlı bir kısayol tuşu kayıtlı süreci gönderir gönder (taklit). İlk mesajı alamıyor hedef pencere kolu ifşa edeceğini sanmıyorum. Eğer mümkün olsaydı bile, ikinci olarak, gönderme kısayollar çeşitli programlar potansiyel olarak istenmeyen aktivite her türlü tetikleyecek beri yapmak kötü bir şey olurdu.

Önemli bir şey değil, ama böyle bir işlevsellik için sık istekleri gördüm, ve hatta her yerde UI veya dokümanlar bu açıklamadan kısayollar kaydetmek, uygulamalar kurbanı kendimi.

(Delphi çalışma ve Winapı bir çırak daha, lütfen nazik olun.)

CEVAP
20 Mayıs 2009, ÇARŞAMBA


Soru-biraz araştırma yaptım ve sizin için uygun bir cevabım yok ne yazık ki, ben ne paylaşayım dedim ise benim ilgi kırılmak,.

example of creating keyboard hook (in Delphi) ama derlenebilir Delphi 2007 yılında yalnız bir iki değişiklik ile 1998 yılında yazılmış bunu buldum.

Bir DLL ile görüşmesi için SetWindowsHookEx O geçer bir geri arama işlevi, sonra önünü anahtar vuruş: bu durumda, bu müdahalesi ile onlar için eğlenceli, değişen imleç Sol, Sağ, vb. Basit bir uygulama sonra DLL ve geri rapor sonuçları TTimer bir olay dayalı çağırır. Eğer ilgilenirsen Delphi 2007 temel alan kodu gönderebilirim.

İyi belgelenmiş ve yorumladı ve potansiyel olarak önemli bir basın nereye gidiyor işi çözmek için bir temel olarak kullanılabilir. Eğer tuş vuruşlarını Gönderen uygulama ele alabilir, bu şekilde takip edebilirsin. Bu bilgilere ulaşmak mümkün olacağını kolu ile oldukça kolay gerekir.

Diğer uygulamalar kısayol için başka bir terimdir olan bir Kısayol tuşu, içerebilir beri Kısayolları geçerek kısayol tuşlarını belirleme denedi. Ancak çoğu uygulama çok fazla geri dönüş olmayabilir, böylece bu özelliği uğraşmıyorlar. Eğer bu yol ile ilgileniyorsanız, Delphi kısayol yük ve kısayol almak için kullanabilirsiniz IShellLink COM arabirimi: erişimi vardır

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;

Eğer Safari Books Online erişim var ise Steve Teixeira ve Xavier Pacheco tarafından good section about working with shortcuts / shell links Borland Delphi 6'da bir Geliştirici Kılavuzu var. Benim yukarıdaki örnekte orada katletmiş bir sürüm ve this site.

Bu yardımcı olur umarım!

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • CommonArtisan

    CommonArtisa

    7 Temmuz 2012
  • sk8ingis4me

    sk8ingis4me

    16 Mart 2006
  • Xbox

    Xbox

    1 Kasım 2005