it-swarm.asia

كيف يمكنني تحديد العملية التي تملك مفتاح الاختصار في Windows؟

بالنظر إلى مفتاح الاختصار ، كيف يمكنني العثور على البرنامج الذي يملكه؟

92
aldrinleal

تحذير : إذا كنت تستخدم Win 8 أو ما بعده ، فلا تستخدم هذه الأداة لأنها سوف تخلق بعض المشاكل - راجع التعليقات.

إذا كنت تقوم بتشغيل Windows أقدم من Windows 8 ، فربما Windows Hotkey Explorer هو ما تريده. تم ذكر ذلك أيضًا في سؤال StackOverflow: تعرف على العملية التي سجلت مفتاح الاختصار العام؟ (Windows API) .

45
Hans-Peter Störr

هذا الأمر يناسبني في Win10 (وربما جميع الإصدارات الأخرى حتى الغامضة من Windows) ... كما تم نسخها هنا من https://stackoverflow.com/a/43645062/995048 لأن هذه الصفحة تبدو ليأتي أولاً في نتائج البحث:

إحدى الطرق الممكنة لاستخدام أداة Visual Studio Visual Spy ++ .

جرب هذه:

  1. قم بتشغيل الأداة (بالنسبة لي ، إنها في C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\spyxx_AMD64.exe ، أو استخدم spyxx.exe لمراقبة العمليات ذات 32 بت)
  2. في شريط القوائم ، حدد Spy -> سجل الرسائل ... (أو اضغط على Ctrl + M)
  3. حدد كافة أنظمة Windows في النظام في إطار Windows إضافي
  4. قم بالتبديل إلى علامة التبويب الرسائل
  5. انقر فوق الزر مسح الكل
  6. حدد WM_HOTKEY في مربع القائمة ، أو حدد لوحة المفاتيح في مجموعات الرسائل (إذا كنت موافقًا مع المزيد من الضوضاء المحتملة)
  7. انقر فوق الزر OK
  8. اضغط على مفتاح الاختصار المعني (Win + R، فمثلا)
  9. حدد السطر WM_HOTKEY في نافذة الرسائل (كافة أنظمة تشغيل Windows) ، وانقر بزر الماوس الأيمن ، وحدد خصائص ... في قائمة السياق
  10. في مربع الحوار خصائص الرسالة ، انقر على الرابط نافذة مقبض النافذة (سيكون هذا هو مقبض الإطار الذي تلقى الرسالة)
  11. انقر فوق الزر مزامنة في مربع الحوار خصائص النافذة . سيؤدي ذلك إلى عرض النافذة في عرض نافذة Spy ++ الرئيسي.
  12. في مربع الحوار خصائص النافذة ، حدد علامة التبويب العملية
  13. انقر على الرابط معرف العملية . هذا سيظهر لك العملية (في بلدي Win + R الحالة: Explorer)
50
user995048

ربما تمت الإجابة على Stack Overflow في هذا الموضوع:

معرفة ما هي العملية المسجلة هوتكي العالمية؟ (واجهة برمجة تطبيقات Windows)

إليك إجابة Pauk :

لقد أثار سؤالك اهتماماتي ، لذا فقد قمت بالبحث قليلاً ، لكن للأسف لم يكن لدي إجابة مناسبة لك ، اعتقدت أنني سأشارك ما لدي.

لقد وجدت هذا المثال لإنشاء ربط لوحة المفاتيح (في دلفي) مكتوبًا في عام 1998 ، ولكنه قابل للتجميع في دلفي 2007 مع قرصين.

إنه DLL مع استدعاء SetWindowsHookEx الذي يمر عبر وظيفة رد اتصال ، والتي يمكنها عندئذ اعتراض حدود المفاتيح: في هذه الحالة ، يتم العبث بها للمتعة ، وتغيير المؤشر الأيسر إلى اليمين ، إلخ. تطبيق بسيط ثم يستدعي DLL ويعيد نتائجه بناءً على حدث TTimer. إذا كنت مهتمًا ، يمكنني نشر رمز دلفي 2007.

تم توثيقه وتعليقه بشكل جيد ، وربما يمكنك استخدامه كأساس للعمل على تحديد مكان الصحافة الرئيسية. إذا تمكنت من الحصول على مؤشر التطبيق الذي أرسل حدود المفاتيح ، فيمكنك تتبع ذلك مرة أخرى. باستخدام هذا المقبض ، ستتمكن من الحصول على المعلومات التي تحتاجها بسهولة تامة.

حاولت تطبيقات أخرى تحديد مفاتيح الاختصار من خلال تصفح اختصاراتها لأنها يمكن أن تحتوي على مفتاح اختصار ، وهو مجرد مصطلح آخر لـ hotkey. ومع ذلك ، لا تميل معظم التطبيقات إلى ضبط هذه الخاصية ، لذا فقد لا تُرجع كثيرًا. إذا كنت مهتمًا بهذا المسار ، فيمكن لدلفي الوصول إلى IShellLink COM interface والتي يمكنك استخدامها لتحميل اختصار لأعلى والحصول على مفتاح الاختصار الخاص به:

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 ، فهناك قسم جيد حول العمل مع روابط الاختصارات/Shell في دليل مطوري Borland Delphi 6 من تأليف Steve Teixeira و Xavier Pacheco. المثال الخاص بي أعلاه هو إصدار تم ذبحه من هناك و هذا الموقع .

امل ان يساعد!

5
Ivo Flipse