/// <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)); }