سؤال

إجابه: لا يوجد مكافئ مُدار أصليًا لهذه الطريقة. ومع ذلك ، يمكن العثور على مثال جيد على واجهة برمجة تطبيقات التعليمات البرمجية على pinvoke.net.

أهلاً بكم

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

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

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

اعتقدت أنه كان ينبغي أن يكون الأمر بسيطًا بما يكفي لاكتشاف حالة لوحة المفاتيح الحالية في .NET - ولكن يبدو أنه في كل مكان أنظر إليه ، فإن النصيحة هي استخدام [dllimport ("user32.dll" ، intradpoint = "getKeyboardState" ، setlasterror = true) ] كطريقة لاكتشاف ما يحدث.

هذا كل شيء جيد وجيد - أنا مرتاح لذلك. ومع ذلك ، كقاعدة عامة من الإبهام ، أحاول التأكد من استخدام الكود المدير .NET الأصلي لوظائف Windows قبل أن أحاول أن أتعامل مع بلدي.

هل هناك طريقة .NET أصلية أو تعادل user32.dll's getKeyboardState؟

هل كانت مفيدة؟

المحلول

Control.ModiferKeys هي خاصية ثابتة ل Control والتي ، إن وجدت ، يتم الضغط على مفاتيح المعدل حاليًا. لست على علم بأي شيء للحصول على حالة لوحة مفاتيح عامة ، يبدو أن معظم الكود P/استدعاء مع أي منهما GetKeyboardState أو GetKeyState للتحقق من مفاتيح محددة.

نصائح أخرى

هل أنت متأكد من أن معاينة keynowdowneventargs لا تملك ما تحتاجه؟ إذا كان الأمر كذلك ، فيمكنك استخدام حدث PreviewKeyDown.

خيار آخر قد يكون مفاتيح التسريع. يمكن أن تستخدم وظيفة Windows API جدول أسرع في موارد التطبيق لتعيين تسلسل لوحة المفاتيح للأوامر ، حيث يكون الأمر هو نفس الشيء الذي يفعله عنصر القائمة ؛ كما تعلمون ، رسالة WM_Command. أعلم أنه من السهل القيام به في MFC باستخدام C ++ ، لكن عندما حاولت العثور على طريقة C# للقيام بذلك ، فقدت. إذا تمكنت من معرفة كيفية القيام بمفاتيح التسريع باستخدام C# ، فقد يكون حلاً مرنًا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top