internal static IntPtr GetGameViewWindowHandle(int processId)
        {
            const string GameViewCaption         = "UnityEditor.GameView";
            const string UnityContainerClassName = "UnityContainerWndClass";

            var window = new IntPtr();

            Win32Helpers.EnumWindows(delegate(IntPtr hWnd, IntPtr lParam)
            {
                if (!Win32Helpers.IsWindowVisible(hWnd))
                {
                    return(true);
                }

                var windowProcessId = 0;
                Win32Helpers.GetWindowThreadProcessId(hWnd,
                                                      out windowProcessId);

                if (windowProcessId == processId)
                {
                    var builder = new StringBuilder(256);
                    Win32Helpers.GetClassName(hWnd, builder, 256);

                    if (builder.ToString() == UnityContainerClassName)
                    {
                        Win32Helpers.EnumChildWindows(hWnd,
                                                      delegate(IntPtr childHwnd, IntPtr childParam)
                        {
                            if (!Win32Helpers.IsWindowVisible(childHwnd))
                            {
                                return(true);
                            }

                            var childLength =
                                Win32Helpers.GetWindowTextLength(childHwnd);
                            if (childLength == 0)
                            {
                                return(true);
                            }

                            var childBuilder =
                                new StringBuilder(childLength);
                            Win32Helpers.GetWindowText(childHwnd,
                                                       childBuilder, childLength + 1);

                            if (childBuilder.ToString() == GameViewCaption)
                            {
                                //Found it!
                                window = childHwnd;
                                return(false);
                            }

                            return(true);
                        },
                                                      IntPtr.Zero);
                    }
                }

                return(true);
            }, IntPtr.Zero);

            if (window.Equals(IntPtr.Zero))
            {
                Debug.LogError("Could not find game view!");
            }

            return(window);
        }
 private static bool IsMainWindow(IntPtr hwnd)
 {
     return(Win32Helpers.GetWindow(hwnd, Win32Helpers.GW_OWNER) ==
            IntPtr.Zero && Win32Helpers.IsWindowVisible(hwnd));
 }