public static Rect GetEditorMainWindowPos() { var containerWinType = ReflectionUtility.GetAllChildClasses(typeof(ScriptableObject), true).Where(t => t.Name == "ContainerWindow").FirstOrDefault(); if (containerWinType == null) { throw new System.MissingMemberException("Can't find internal type ContainerWindow. Maybe something has changed inside Unity"); } var showModeField = containerWinType.GetField("m_ShowMode", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); var positionProperty = containerWinType.GetProperty("position", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance); if (showModeField == null || positionProperty == null) { throw new System.MissingFieldException("Can't find internal fields 'm_ShowMode' or 'position'. Maybe something has changed inside Unity"); } var windows = Resources.FindObjectsOfTypeAll(containerWinType); foreach (var win in windows) { var showmode = (int)showModeField.GetValue(win); if (showmode == 4) // main window { var pos = (Rect)positionProperty.GetValue(win, null); return(pos); } } throw new System.NotSupportedException("Can't find internal main window. Maybe something has changed inside Unity"); }