فقدان التركيز بعد إجراء الإطار العلوي التطبيق آخر

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

سؤال

وأنا جعل الإطار العلوي التطبيق آخر لضمان بنقرة وفي تطبيقي يجلب الحوار الآخر في وجهات النظر. المشكلة أواجه هو أنني لا تحصل على التركيز مرة أخرى إلى بلدي التطبيق بعد المكالمة. إذا كان التطبيق الآخر لديه المزيد من الإطارات واحد منهم ينتهي مع التركيز، وخلاف ذلك أي إطار (النظر إلى شريط المهام فقط) يحصل على التركيز. أين يجب أن تبدأ التحقيق في القضية؟

وبلدي رمز لجعل أسمى التطبيق الآخر هو:

Process p = Process.GetProcessById(trackedProcessID);
IntPtr h = p.MainWindowHandle;
uint TOPMOST_FLAGS = SWP_NOMOVE | SWP_NOSIZE | SWP_ASYNCWINDOWPOS;
SetWindowPos(h, HWND_TOPMOST, 0, 0, 0, 0, TOPMOST_FLAGS);

ومع الثوابت ك

public static readonly uint SWP_NOMOVE = 0x0002;
public static readonly uint SWP_NOSIZE = 0x0001;
public static readonly uint SWP_ASYNCWINDOWPOS = 0x4000;
public static readonly IntPtr HWND_TOPMOST = new IntPtr(-1);
هل كانت مفيدة؟

المحلول

وذات صلة: غير متوقع من Process.MainWindowHandle

وأساسا MainWindowHandle يعطيك الحالي أعلى معظم إطار عملية رغم ما تقول الوثائق.

وهذا ما يفسر لماذا النافذة الرئيسية لعملية الأخرى الخاصة بك لا يعني بالضرورة الحصول على التركيز.

والمشكلة الأخرى الخاصة بك هو لأنك لا تعود التركيز على التطبيق الخاص بك بعد اعطائه.

والواقع أن المصطلح الصحيح على ما تقومون به هو إنشاء الترتيب التصاعدي .

وبدلا من محاولة للسيطرة على الترتيب التصاعدي - التي لا يمكن أن تكون مضمونة - هل يمكن أن يكون أفضل حالا بإرسال رسائل إلى عملية أخرى

نصائح أخرى

هل حاولت SWP_NOACTIVATE؟

[الحل الفعلي المستخدمة]

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

لا تحاول استخدام مقبض النافذة الواردة وتعيين الأم من أي نافذة هو مبين في التطبيق الهدف لذلك المقبض، فإنه يجعل فقط هو مبين الحوار لتظهر ضمن حدود نافذة التطبيق الدعوة، واقتصاص إذا لزم الأمر - غير مجدية

وشكرا جزيلا لأجوبة أعلاه إلى مسألة

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