إرسال النقر بالماوس على زر في شريط المهام باستخدام C#

StackOverflow https://stackoverflow.com/questions/18505

  •  09-06-2019
  •  | 
  •  

سؤال

في أحد التطبيقات التي أعمل عليها حاليًا، من المتطلبات وضع نافذة تطبيق خارجي في المقدمة.لا يعمل إجراء مكالمات Win32 API مثل نافذة BringWindowToTop وSetForeground طوال الوقت.ويرجع ذلك إلى بعض القيود في نظام التشغيل Windows XP.ما أود فعله بدلاً من ذلك هو إرسال محاكاة للنقر بالماوس على زر النافذة الموجود على شريط المهام والذي آمل أن يؤدي إلى ظهور النافذة في المقدمة.هل يعرف أحد كيف يكون هذا ممكنا؟

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

المحلول

راجع قسم "كيفية سرقة التركيز على 2K/XP" في http://www.codeproject.com/KB/dialog/dlgboxtricks.aspx, ، لأن هذا هو بالضبط ما تحتاجه.لن أتبع مسار شريط المهام حيث قد يكون شريط المهام مخفيًا أو ببساطة غير موجود.

نصائح أخرى

انه ممكن.لكنها سطحية للغاية.قد ينفصل تطبيقك أيضًا عن الإصدار التالي من Windows، نظرًا لأنه غير موثق.ما عليك فعله هو العثور على مقبض النافذة الخاص بشريط المهام، ثم العثور على مقبض النافذة الخاص بالنافذة الفرعية التي تمثل الزر، ثم إرسال رسالة WM_MOUSEDOWN (على ما أظن) إليه.

إليك بعض المعلومات عن العثور على مقبض نافذة شريط المهام:

http://www.codeproject.com/

FWIW، القيود المفروضة على BringWindowToTop/SetForeground موجودة لأنها مزعجة عندما تسرق النافذة التركيز.قد لا يهم هذا إذا كنت تعمل في بيئة مؤسسية.فقط ضعها في الاعتبار.:)

لقد استخدمت هذا في برنامج حيث كنت بحاجة لمحاكاة النقرات وحركات الماوس؛

المكتبة العالمية للماوس ولوحة المفاتيح

لأكون صادقًا، لم أواجه أبدًا مشكلة في جلب النافذة إلى المقدمة على XP/Vista/2003/2000.

عليك التأكد من القيام بما يلي:

  1. تحقق مما إذا كان IsIconic (مصغرًا)
  2. إذا كان #1 ينتج عنه صحيح ، فاستدعاء showwindow تمرير SW_Restore
  3. ثم اتصل بـ SetForegroundWindow

لم أواجه مطلقًا أي مشاكل يمكنني التفكير في القيام بها بهذه الخطوات.

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