unit AppIconLoader; //https://delphihaven.wordpress.com/2014/01/20/loading-the-apps-icon-into-a-timage-on-windows/ interface uses System.SysUtils, System.Classes, FMX.Graphics; function GetAppIcon(Dest: TBitmap): Boolean; implementation uses {$IF DEFINED(ANDROID)} AndroidApi.JniBridge, AndroidApi.Jni.App, AndroidApi.Jni.GraphicsContentViewText, FMX.Helpers.Android, {$IF CompilerVersion > 27}Androidapi.Helpers, {$ENDIF} {$ELSEIF DEFINED(MSWINDOWS)} Vcl.Graphics, {$ENDIF} FMX.Surfaces; function GetAppIcon(Dest: FMX.Graphics.TBitmap): Boolean; {$IF DEFINED(ANDROID)} var Activity: JActivity; Drawable: JDrawable; Bitmap: JBitmap; Surface: TBitmapSurface; begin Result := False; {$IF CompilerVersion > 27} Activity := TAndroidHelper.Activity; {$ELSE} Activity := SharedActivity; {$ENDIF} Drawable := Activity.getPackageManager.getApplicationIcon(Activity.getApplicationInfo); Bitmap := TJBitmapDrawable.Wrap((Drawable as ILocalObject).GetObjectID).getBitmap; Surface := TBitmapSurface.Create; try if not JBitmapToSurface(Bitmap, Surface) then Exit; Dest.Assign(Surface); finally Surface.Free; end; Result := True; end; {$ELSEIF DEFINED(MSWINDOWS)} var Icon: TIcon; Stream: TMemoryStream; begin Result := False; Stream := nil; Icon := TIcon.Create; try Icon.LoadFromResourceName(HInstance, 'MAINICON'); if Icon.Handle = 0 then Exit; Stream := TMemoryStream.Create; Icon.SaveToStream(Stream); Stream.Position := 0; Dest.LoadFromStream(Stream); finally Icon.Free; Stream.Free; end; Result := True; end; {$ELSE} begin Result := False; end; {$ENDIF} end.