سؤال

أنا أستخدم CreateProcess () مع إشارات بدء التشغيل لتعيين STARTF_USESHOWWindow و SW_HIDE لبدء تطبيق في الخلفية مع نافذة مخفية. أقوم بذلك لتشغيل مهام صيانة مجدولة ولا أريد أن أزعج النوافذ.

في معظم الحالات، يتم إخفاء النوافذ، لكن هناك حالات تنثثها نافذة البرنامج مباشرة أمامك (على سبيل المثال Chrome Google - بدأت في الاختبار مع تطبيقات مختلفة لمعرفة ما إذا كانت هذه مشكلة مرة واحدة ولكن كلا ...).

يحدث هذا أقل في نظام التشغيل Windows XP، لكنه يحدث الكثير في نظام التشغيل Vista.

هل هناك علم أنني في عداد المفقودين؟ هل هناك أي طريقة أخرى لإنشاء عملية مع نافذة مخفية؟

شكرا!

رمز العينة الخاص بي هو:

char *ProgramName  
STARTUPINFO StartupInfoF;
PROCESS_INFORMATION ProcessInfoF;

memset(&StartupInfoF, 0, sizeof(StartupInfoF));
memset(&ProcessInfoF, 0, sizeof(ProcessInfoF));

StartupInfoF.cb = sizeof(StartupInfoF);
StartupInfoF.wShowWindow = SW_HIDE;
StartupInfoF.dwFlags = STARTF_USESHOWWINDOW;    

if (CreateProcess(ProgramName,
                  "",                 
                  0,
                  0,
                  FALSE,
                  DETACHED_PROCESS,
                  0,
                  0,                              
                  &StartupInfoF,
                  &ProcessInfoF) == FALSE)
{
  // error
}
else
{
  // OK
}
هل كانت مفيدة؟

المحلول

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

لم أعمل أبدا مع أجهزة كمبيوتر سطح مكتب متعددة حتى لا أستطيع أن أقول ما ستكون الآثار الجانبية، لكنني أعتقد أنه قابل للقيام به. ابدأ بالنظر إلى creakesktop. والتحرك فصاعدا.

نصائح أخرى

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

يمكن أن تجاهل بعض البرامج / تجاوزها SW_HIDE علم. يمكنك محاولة إخفاء النافذة بعد بدء عملية الطفل.

خيار آخر هو محاولة استخدام CreateProcessAsUser لتشغيل العمليات في الجلسة 0 والتي لديها سطح المكتب معزول (بدءا من إصدار Vista).

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

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