private static bool EnumWindow(IntPtr handle, IntPtr pointer) doesn't run

江枫思渺然 提交于 2020-01-25 14:27:22

问题


I have the following code that seems to work on one of my projects but it doesn't work on a different one. Code is exactly the same on both but the method EnumWindow never gets executed.

Here is the code:

    [System.Runtime.InteropServices.DllImport("user32.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto)]
    public static extern Int32 GetClassName(IntPtr hWnd, StringBuilder StrPtrClassName, Int32 nMaxCount);

    [System.Runtime.InteropServices.DllImport("user32")]
    [return: System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.Bool)]
    public static extern bool EnumChildWindows(IntPtr window, EnumWindowProc callback, IntPtr 

    public static List<IntPtr> GetChildWindows(IntPtr parent)
    {
        List<IntPtr> result = new List<IntPtr>();
        System.Runtime.InteropServices.GCHandle listHandle = System.Runtime.InteropServices.GCHandle.Alloc(result);
        try
        {
            EnumWindowProc childProc = new EnumWindowProc(EnumWindow);
            EnumChildWindows(parent, childProc, System.Runtime.InteropServices.GCHandle.ToIntPtr(listHandle));
        }
        finally
        {
            if (listHandle.IsAllocated)
                listHandle.Free();
        }
        return result;
    }

    private static bool EnumWindow(IntPtr handle, IntPtr pointer)
    {
        System.Runtime.InteropServices.GCHandle gch = System.Runtime.InteropServices.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 am trying to do is to get the all the childrens from iexplorer.exe process. The only difference between the two projects is that in one of them I am the one who opens manually an instance of IE and in the other one IE boots from the code.

In both cases, I am able to catch the right Process and the right main windows handle but no idea why in the second project I cannot get any children.

Any idea?

Thanks in advance :)

来源:https://stackoverflow.com/questions/23379238/private-static-bool-enumwindowintptr-handle-intptr-pointer-doesnt-run

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!