سؤال

أنا أحاول العثور على طريقة للحصول على المهام المفتوحة في C#.لقد تم البحث على جوجل و تجد سوى كيفية الحصول على قائمة من العمليات.أريد فقط المهام التي سوف تظهر على شريط المهام.

أيضا جنبا إلى جنب مع ذلك ، فإنه سيكون من الرائع إذا كان يمكن الحصول على هذه العملية المهمة المرتبطة.وإذا أمكن الحصول على الصور المصغرة التي فيستا يستخدم على ALT-TAB القائمة مثل هذه الصورة:

alt-tab

أعتقد أنني سوف تضطر إلى استخدام pinvokes لأنه حقا لا يبدو أن هناك أي المكتبات للقيام بذلك بالفعل.أي أفكار ؟

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

المحلول

هذه المادة ينبغي أن أقول لك بالضبط ما يجب القيام به ، فإنه يظهر كيفية بناء الخاصة بك مهمة التبديل يشمل رمز حاجة إلى تعداد جميع النوافذ و تحديد ما إذا كانت "المهام" و يظهر لك كيفية استخدام PrintWindow api للحصول على معاينات على XP.

http://msdn.microsoft.com/en-us/library/ms997649.aspx

أيضا, هنا بلوق وظيفة التي تتحدث عن الخوارزمية المستخدمة لتحديد ما يظهر في Alt+علامة التبويب عرض.في الأساس تحتاج إلى التحقق من WS_EX_APPWINDOW و WS_EX_TOOLWINDOW جنبا إلى جنب مع إذا كانت نافذة مالك.

نصائح أخرى

من API (Win32) المنظور لا يوجد شيء مثل المهام (على الأقل ليس على أحد أن ويندوز مدير المهام/Alt-Tab يظهر).

تلك "المهام" هي في الواقع أعلى مستوى ويندوز.

وذلك من أجل الحصول على قائمة من تلك التي تحتاج إلى تعداد ويندوز (هنا PInvoke من أجل ذلك).

ثم ننظر في نمط windows لتحديد ما إذا كانت هي في الواقع أعلى مستوى ويندوز.

أنا لم أجربها لكن أظن شيئا من هذا القبيل:

using System.Diagnostics;
static void MyFunc()
{
    Process[] processes = Process.GetProcesses();
    foreach(Process p in processes)
    {
       if (p.MainWindowHandle != 0)
       { // This is a GUI process
       }
       else
       { // this is a non-GUI / invisible process
       }
    }
}

وهذه النقطة هي أن تحقق كل عملية WindowHandle.

@abelenky17

وأظن أن هذا لن تغطي جميع الحالات على سبيل المثال هناك عمليات الذين لديهم عدة أعلى مستوى windows (التي تظهر في إدارة المهام).ينظر على سبيل المثال:فايرفوكس, Windows Explorer IE, الخ...هذه التطبيقات يمكن أن يكون العديد من النوافذ على سطح المكتب.أيضا, فإنه سيتم التعامل مع الطرفية جلسات السيناريو بشكل صحيح (لأن تعداد جميع العمليات التي تعمل في النظام).

@دان C.

القيام بشيء من هذا القبيل:

p.ProcessName != "explorer"

يبدو موافق ؟ رائحتها سيئة.

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