जब मैं विंडोज एपीआई विधि EnumChildWindows का उपयोग करने की बात आती हूं तो मुझे अजीब व्यवहार मिल रहा है। ऐसा लगता है कि बच्चों की खिड़कियों का एक वर्ग नहीं उठा रहा है। जब मैं जासूस ++ का उपयोग करके ड्रिल करता हूं तो मैं बच्चों को देख सकता हूं, लेकिन जब मैं अपना कोड निष्पादित करता हूं, तो यह उन लोगों को वापस नहीं करता है जिन्हें मैं Spy ++ में देखता हूं।EnumChildWindows बच्चों को क्यों छोड़ रहा है?
public delegate bool EnumWindowProc(IntPtr hWnd, IntPtr parameter);
[DllImport("user32")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool EnumChildWindows(IntPtr window, EnumWindowProc callback, IntPtr i);
public static 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;
}
private static bool EnumWindow(IntPtr handle, IntPtr pointer)
{
GCHandle gch = GCHandle.FromIntPtr(pointer);
List<IntPtr> list = gch.Target as List<IntPtr>;
if (list == null)
throw new InvalidCastException("GCHandle Target could not be cast as List<IntPtr>");
list.Add(handle);
return true;
}
वहाँ क्यों ऊपर स्क्रीनशॉट में हाइलाइट किए लाल अनुभाग मेरे संग्रह में डाला जा नहीं होगा के रूप में एक कारण (है:
आई स्पाई में ++ What I see in Spy++ http://img24.imageshack.us/img24/9264/spyhandles.png
यहाँ क्या देख मेरी कोड है List<IntPtr>
) EnumChildWindows को कॉल करते समय?
मैंने इस कोड को मेरे FindWindowsByClassAndTitle() फ़ंक्शन में कार्यान्वित किया और यह पहले से उपयोग किए जा रहे कोड से लगभग 30 मिलियन गुना तेज पाता है। – Anders