Sign in to follow this  
Followers 0
Spider001

Extract icon's from almost any file (exe,lnk,......)

4 posts in this topic

This is written in c# maybe it can be implemeted in autoit.

Or if some one has time and can transfer this to autoit code?

For now i use it this way and on a later time i try to transfer it to autoit code.

using System;
using System.IO;
using System.Threading;
using System.Drawing;
using System.Runtime.InteropServices;

namespace Icon_extractor
{
    class Program
    {
        static void Main(string[] args)
        {
            switch (args.Length)
            {
                case 0:
                    uitleg();
                    break;
                case 1:
                    if (args[0] == "/?")
                    {
                        uitleg();
                    }
                    break;
                case 4:
                    Icon myIcon = Getpicture(Convert.ToString(args[0]), Convert.ToBoolean(args[1]));
                    if (Convert.ToBoolean(args[3]))
                    {
                        Bitmap bmp = myIcon.ToBitmap();
                        using (FileStream fs = new FileStream(Convert.ToString(args[2]) + ".bmp", FileMode.Create)) bmp.Save(fs, System.Drawing.Imaging.ImageFormat.Bmp);
                    }
                    else
                    {
                        using (FileStream fs = new FileStream(Convert.ToString(args[2]) + ".ico", FileMode.Create)) myIcon.Save(fs);
                    }
                    break;
            }
        }

        static Icon Getpicture(string fName, Boolean smallicon)
        {
            Shfileinfo shinfo = new Shfileinfo();
            //Use this to get the small Icon
            if (smallicon)
            {
                IntPtr hImgSmall = Win32.SHGetFileInfo(fName, 0, ref shinfo,
                                                       (uint)Marshal.SizeOf(shinfo),
                                                       Win32.ShgfiIcon |
                                                       Win32.ShgfiSmallicon);
            }
            else
            {
                //Use this to get the large Icon
                IntPtr hImgLarge = Win32.SHGetFileInfo(fName, 0,
                                                       ref shinfo, (uint)Marshal.SizeOf(shinfo),
                                                       Win32.ShgfiIcon | Win32.ShgfiLargeicon);
            }
            //The icon is returned in the hIcon member of the shinfo
            //struct
            return Icon.FromHandle(shinfo.hIcon);
        }

        private static void uitleg()
        {
            Console.WriteLine("extract icon to .ico file");
            Console.WriteLine("1st parameter file to extract");
            Console.WriteLine("2de parameter true = small false = big icon");
            Console.WriteLine("3de parameter place and name to save with give no extension");
            Console.WriteLine("3de parameter true = bmp  false = ico");
            Thread.Sleep(10000);
        }
    }

    [StructLayout(LayoutKind.Sequential)]
    public struct Shfileinfo
    {
        public IntPtr hIcon;
        public IntPtr iIcon;
        public uint dwAttributes;
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
        public string szDisplayName;
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)]
        public string szTypeName;
    };

    class Win32
    {
        public const uint ShgfiIcon = 0x100;
        public const uint ShgfiLargeicon = 0x0;    // 'Large icon
        public const uint ShgfiSmallicon = 0x1;    // 'Small icon

        [DllImport("shell32.dll")]
        public static extern IntPtr SHGetFileInfo(string pszPath,
                                    uint dwFileAttributes,
                                    ref Shfileinfo psfi,
                                    uint cbSizeFileInfo,
                                    uint uFlags);
    }
}

Share this post


Link to post
Share on other sites



SHGetFileInfo can be found if you search the help file. It's part of the WinAPI UDFs.


_AdapterConnections()_AlwaysRun()_AppMon()_AppMonEx()_BinaryBin()_CheckMsgBox()_CmdLineRaw()_ContextMenu()_ConvertLHWebColor()/_ConvertSHWebColor()_DesktopDimensions()_DisplayPassword()_DotNet_Load()/_DotNet_Unload()_Fibonacci()_FileCompare()_FileCompareContents()_FileNameByHandle()_FilePrefix/SRE()_FindInFile()_GetBackgroundColor()/_SetBackgroundColor()_GetConrolID()_GetCtrlClass()_GetDirectoryFormat()_GetDriveMediaType()_GetFilename()/_GetFilenameExt()_GetHardwareID()_GetIP()_GetIP_Country()_GetOSLanguage()_GetSavedSource()_GetStringSize()_GetSystemPaths()_GetURLImage()_GIFImage()_GoogleWeather()_GUICtrlCreateGroup()_GUICtrlListBox_CreateArray()_GUICtrlListView_CreateArray()_GUICtrlListView_SaveCSV()_GUICtrlListView_SaveHTML()_GUICtrlListView_SaveTxt()_GUICtrlListView_SaveXML()_GUICtrlMenu_Recent()_GUICtrlMenu_SetItemImage()_GUICtrlTreeView_CreateArray()_GUIDisable()_GUIImageList_SetIconFromHandle()_GUIRegisterMsg()_GUISetIcon()_Icon_Clear()/_Icon_Set()_IdleTime()_InetGet()_InetGetGUI()_InetGetProgress()_IPDetails()_IsFileOlder()_IsGUID()_IsHex()_IsPalindrome()_IsRegKey()_IsStringRegExp()_IsSystemDrive()_IsUPX()_IsValidType()_IsWebColor()_Language()_Log()_MicrosoftInternetConnectivity()_MSDNDataType()_PathFull/GetRelative/Split()_PathSplitEx()_PrintFromArray()_ProgressSetMarquee()_ReDim()_RockPaperScissors()/_RockPaperScissorsLizardSpock()_ScrollingCredits_SelfDelete()_SelfRename()_SelfUpdate()_SendTo()_ShellAll()_ShellFile()_ShellFolder()_SingletonHWID()_SingletonPID()_Startup()_StringCompact()_StringIsValid()_StringRegExpMetaCharacters()_StringReplaceWholeWord()_StringStripChars()_Temperature()_TrialPeriod()_UKToUSDate()/_USToUKDate()_WinAPI_Create_CTL_CODE()_WinAPI_CreateGUID()_WMIDateStringToDate()/_DateToWMIDateString()Au3 script parsingAutoIt SearchAutoIt3 PortableAutoIt3WrapperToPragmaAutoItWinGetTitle()/AutoItWinSetTitle()CodingDirToHTML5FileInstallrFileReadLastChars()GeoIP databaseGUI - Only Close ButtonGUI ExamplesGUICtrlDeleteImage()GUICtrlGetBkColor()GUICtrlGetStyle()GUIEventsGUIGetBkColor()Int_Parse() & Int_TryParse()IsISBN()LockFile()Mapping CtrlIDsOOP in AutoItParseHeadersToSciTE()PasswordValidPasteBinPosts Per DayPreExpandProtect GlobalsQueue()Resource UpdateResourcesExSciTE JumpSettings INISHELLHOOKShunting-YardSignature CreatorStack()Stopwatch()StringAddLF()/StringStripLF()StringEOLToCRLF()VSCROLLWM_COPYDATAMore Examples...

Updated: 04/09/2015

Share this post


Link to post
Share on other sites

You already have a >post open for this exact same question, and the exact same answer was given.


If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.
Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag Gude
How to ask questions the smart way!

I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from.

Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays.  -  ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script.  -  Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label.  -  _FileGetProperty - Retrieve the properties of a file  -  SciTE Toolbar - A toolbar demo for use with the SciTE editor  -  GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI.  -   Latin Square password generator

Share this post


Link to post
Share on other sites

Please don't double post.  Especially when you're provided the answer in both threads.


Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer.

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.
Sign in to follow this  
Followers 0