public int GetInteger(IntegerProperty prop)
        {
            //valid values are 0x961 to 0x978
            if (!ClientUtils.IsEnumValid(prop, (int)prop, (int)IntegerProperty.ImageCount, (int)IntegerProperty.MinDpi5))
            {
                throw new InvalidEnumArgumentException(nameof(prop), (int)prop, typeof(IntegerProperty));
            }

            int val = 0;

            lastHResult = UxTheme.GetThemeInt(this, part, state, (int)prop, ref val);
            return(val);
        }
        public static Image GetDwmWindowButton(AeroTitlebarButtonPart button, TitlebarButtonState state)
        {
            const int tmtAtlasrect  = 8002;
            const int tmtImagecount = 2401;

            using (var vs = GetDwmWindowVisualTheme())
            {
                using (var hInstance = LoadAeroTheme())
                {
                    Image result;
                    using (var nWindow = CreateNativeWindow())
                    {
                        using (var theme = LoadAeroThemeData(nWindow))
                        {
                            var atlas = GetImageAtlasFromTheme(vs, hInstance);
                            if (atlas == null)
                            {
                                return(null);
                            }

                            var rect = GetThemeRect(theme, (int)button, (int)state, tmtAtlasrect);

                            result = Slice(atlas, rect.Location, rect.Size);
                            if (state != TitlebarButtonState.None)
                            {
                                //Slice the buttons
                                UxTheme.GetThemeInt(theme, (int)button, (int)state, tmtImagecount, out var count);

                                var buttonSize = rect.Height / count;

                                var startPoint = Point.Empty;
                                var btnSize    = new Size(rect.Width, buttonSize);
                                startPoint.Offset(0, buttonSize * ((int)state - 1));

                                var buttonRect = new Rectangle(startPoint, btnSize);
                                buttonRect.Inflate(-1, -1);
                                result = Slice(result, buttonRect.Location, buttonRect.Size);
                            }
                        }
                    }

                    return(result);
                }
            }
        }