سؤال

أنا بناء التطبيق أنه بالنظر إلى تطبيق آخر mainWindowhandle ذلك بجمع المعلومات حول إطار الدولة.ليس لدي أي مشكلة في جمع المعلومات عن الطفل ويندوز, ولكن أنا لا يمكن الوصول إلى غيرها من النوافذ المفتوحة من تطبيق أو حتى القوائم.هل هناك أي طريقة للحصول على جميع مقابض إطار من طلب ؟

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

المحلول

هل يمكن أن تفعل ما Process.MainWindowHandle يبدو أن تفعل:استخدام P/استدعاء استدعاء EnumWindows الوظيفة التي تحتج على طريقة الاستدعاء لكل مستوى أعلى النافذة في النظام.

في رد اتصل GetWindowThreadProcessId, و قارن نافذة معرف العملية مع Process.Id;إن عملية معرفات المباراة ، إضافة مقبض الإطار إلى قائمة.

نصائح أخرى

أولا، سيكون لديك للحصول على windowhandle من mainwindow التطبيق.

 [DllImport("user32.dll", SetLastError = true)]
 static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

 IntPtr hWnd = (IntPtr)FindWindow(windowName, null);

وبعد ذلك، يمكنك استخدام هذا المؤشر للحصول على كل childwindows:

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool EnumChildWindows(IntPtr hwndParent, EnumWindowsProc lpEnumFunc, IntPtr lParam);

private List<IntPtr> GetChildWindows(IntPtr parent)  
{  
    List<IntPtr> result = new List<IntPtr>();  
    GCHandle listHandle = GCHandle.Alloc(result);  
    try  
    {  
         EnumWindowProc childProc = new EnumWindowProc(EnumWindow);  
         EnumChildWindows(parent, childProc, GCHandle.ToIntPtr(listHandle));  
    }  
    finally  
    {  
         if (listHandle.IsAllocated)  
               listHandle.Free();  
    }  
    return result;  
}   
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top