示例#1
0
        /// <summary>
        ///     Get the icon for a hWnd
        /// </summary>
        /// <typeparam name="TIcon">The return type for the icon, can be Icon, Bitmap or BitmapSource</typeparam>
        /// <param name="window">IInteropWindow</param>
        /// <param name="useLargeIcons">true to try to get a big icon first</param>
        /// <returns>TIcon</returns>
        public static TIcon GetIconFromWindow <TIcon>(this IInteropWindow window, bool useLargeIcons = false) where TIcon : class
        {
            var iconSmall  = IntPtr.Zero;
            var iconBig    = new IntPtr(1);
            var iconSmall2 = new IntPtr(2);

            IntPtr iconHandle;

            if (useLargeIcons)
            {
                iconHandle = User32Api.SendMessage(window.Handle, WindowsMessages.WM_GETICON, iconBig, IntPtr.Zero);
                if (iconHandle == IntPtr.Zero)
                {
                    iconHandle = User32Api.GetClassLongWrapper(window.Handle, ClassLongIndex.IconHandle);
                }
            }
            else
            {
                iconHandle = User32Api.SendMessage(window.Handle, WindowsMessages.WM_GETICON, iconSmall2, IntPtr.Zero);
            }
            if (iconHandle == IntPtr.Zero)
            {
                iconHandle = User32Api.SendMessage(window.Handle, WindowsMessages.WM_GETICON, iconSmall, IntPtr.Zero);
            }
            if (iconHandle == IntPtr.Zero)
            {
                iconHandle = User32Api.GetClassLongWrapper(window.Handle, ClassLongIndex.SmallIconHandle);
            }
            if (iconHandle == IntPtr.Zero)
            {
                iconHandle = User32Api.SendMessage(window.Handle, WindowsMessages.WM_GETICON, iconBig, IntPtr.Zero);
            }
            if (iconHandle == IntPtr.Zero)
            {
                iconHandle = User32Api.GetClassLongWrapper(window.Handle, ClassLongIndex.IconHandle);
            }
            if (iconHandle != IntPtr.Zero)
            {
                return(IconHelper.IconHandleTo <TIcon>(iconHandle));
            }
            // Nothing found
            return(default(TIcon));
        }