ولدت واجهة المستخدم الرسومية التطبيق من خدمة النظام المحلي (عبر CreateProcessAsUser) لم يكن لديك التركيز

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

سؤال

ولقد خلق الخدمة التي تعرض نوعا من شاشة البداية على سطح المكتب من مستخدم معين، وفقط عندما يتم تسجيل المستخدم في (المستخدم كشك).

وهذا شاشة البداية، ودخلت مرة واحدة في رمز صالح، سوف اقول ذلك للخدمة وخدمة يذهب إلى النوم للحصول على مبلغ العاشر من الزمن (اعتمادا من التعليمات البرمجية).

وشاشة البداية إنهاء ببساطة. الآن عندما يستيقظ الخدمة حتى أنه يرى أن البداية لم يعد هناك وحتى بداية الأمر.

وهذا يعمل كل شيء، والمشكلة الوحيدة هي أن لا يكون التركيز، أي تطبيق أطلقت إذا أنا أعمل في المفكرة ويحين الوقت، يتم عرض شاشة البداية (ملء الشاشة على الرغم من) وراء المفكرة.

وليس لدي سوى ما يدعو للقلق ويندوز فيستا، وأنا الترميز في بايثون باستخدام ملحقات Win32 ولكن أعتقد أن هذه المشكلة تكمن في CreateProcessAsUser عند استدعائه من حساب النظام المحلي.


تحديث:

وو"مشكلة" هو في الواقع بشأن الحد من الغرض لمنع التطبيقات 'مزعجة' مثل الألغام من سرقة التركيز.

ويمكنك تغيير السلوك من خلال تحديد: win32gui.SystemParametersInfo (win32con.SPI_SETFOREGROUNDLOCKTIMEOUT، 0، 0) وهو ما يعادل في تحديد قيمة التسجيل مؤقتا: HKEY_CURRENT_USER \ لوحة التحكم \ سطح المكتب \ ForegroundLockTimeout يجب أن يتم ذلك باسم المستخدم نفسه، وذلك إما بناء على التطبيق الذي يتم إطلاق أو بناء المساعد لاطلاق التطبيق الذي تريد لإطلاق.

ولكن تطبيق قد ترغب في منع الحصول عليه من التركيز سرقة باستخدام يسميه البعض API التي لا أتذكر الآن.

وربما يكون حل جيد للعثور على كافة نافذة يعالج حاليا من هذا المستخدم ومن ثم استخدام كل من هذه المقابض لاستخدام win32gui.ShowWindow (مقبض، والقيادة) للحد منه.

وعلى الرغم من أن لهذه المشكلة بالذات وضع كان الإعداد locktimeout بما فيه الكفاية.

وإذا كان أي شخص يتساءل كيف تمكنت من إطلاق تطبيق لسطح المكتب من الخدمة، وهنا هو <وأ href = "http://blog.dcuktec.com/2009/05/python-on-windows-from- خدمة launch.html "يختلط =" نوفولو noreferrer "> تصل إلى رمز .

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

المحلول 2

لأسباب مختلفة شرعيا جدا، ومايكروسوفت لا ترغب في رؤية خدمة إطلاق التطبيق وسرقة التركيز، ولكن وجدت أن العمل التالية في جميع أنحاء للا يزال تحقيق ما أريد.

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

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

نصائح أخرى

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

وأنا على خلاف ذلك beilive انها سمة wShowWindow من STARTUPINFO البنية النقاط lpStartupInfo إلى أنه ينبغي السيطرة عليه. تحتاج أيضا STARTF_USESHOWWINDOW في dwFlags لاستخدام nShowWindow. يجب أن تكون القيم SW_SHOW أعتقد، يتم سرد أنها لوظيفة ShowWindow إذا كنت ترغب في محاولة البعض.

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