예제 #1
0
파일: Helpers.cs 프로젝트: mbhul/RoboCOM
        //****************************************************************************
        //See: https://stackoverflow.com/questions/42449050/cant-get-a-window-handle
        //****************************************************************************
        private static IntPtr[] FindChildWindows(IntPtr display, IntPtr window,
                                                 string title, ref List <IntPtr> windows)
        {
            IntPtr rootWindow;
            IntPtr parentWindow;

            IntPtr[] childWindows = new IntPtr[0];

            int childWindowsLength;

            X11lib.XQueryTree(display, window,
                              out rootWindow, out parentWindow,
                              out childWindows, out childWindowsLength);

            childWindows = new IntPtr[childWindowsLength];

            X11lib.XQueryTree(display, window,
                              out rootWindow, out parentWindow,
                              out childWindows, out childWindowsLength);

            string windowFetchedTitle;

            X11lib.XFetchName(display, window, out windowFetchedTitle);

            if (title == windowFetchedTitle &&
                !windows.Contains(window))
            {
                windows.Add(window);
            }

            for (int childWindowsIndexer = 0;
                 childWindowsIndexer < childWindows.Length;
                 childWindowsIndexer++)
            {
                IntPtr childWindow = childWindows[childWindowsIndexer];

                string childWindowFetchedTitle;

                X11lib.XFetchName(display, childWindow,
                                  out childWindowFetchedTitle);

                if (title == childWindowFetchedTitle &&
                    !windows.Contains(childWindow))
                {
                    windows.Add(childWindow);
                }

                FindChildWindows(display, childWindow, title, ref windows);
            }

            windows.TrimExcess();

            return(windows.ToArray());
        }