The MASM Forum

General => The Campus => Topic started by: Ar0n on August 23, 2015, 08:38:52 AM

Title: how to get default icon for exe files
Post by: Ar0n on August 23, 2015, 08:38:52 AM
As the title says, how do I get the default icon for the exe files?
for example, the default icon in window XP is : (http://s4.postimg.org/mvo2o9n3d/exe_icon1.gif)
in Window 7: (http://s4.postimg.org/intafilnt/exe.jpg)
is there some safe/correct way to get this icon?

I found an application that does what I want:
http://www.nirsoft.net/utils/file_types_manager.html

not sure how it gets the icons...
any idea?
Title: Re: how to get default icon for exe files
Post by: jj2007 on August 23, 2015, 09:45:25 AM
Use SHGetFileInfo with the name of an existing executable - e.g. your own application. If it doesn't have an icon (see LoadIcon with IDI_APPLICATION), you'll get exactly what you wanted.
Title: Re: how to get default icon for exe files
Post by: dedndave on August 23, 2015, 09:46:39 AM
LoadIcon

https://msdn.microsoft.com/en-us/library/windows/desktop/ms648072%28v=vs.85%29.aspx (https://msdn.microsoft.com/en-us/library/windows/desktop/ms648072%28v=vs.85%29.aspx)

to load a system-defined icon (IDI_APPLICATION is the specific one you want)

    INVOKE  LoadIcon,0,IDI_APPLICATION

to load one from resource

    INVOKE  LoadIcon,hInstance,lpIconName

where lpIconName is either a resource ID number (less than 65536)
or, a pointer to a resource name string (rarely used this way)

in either case, EAX returns an HICON handle
if it is associated with a window, it will be deleted when the window is destroyed
otherwise, you should use DestroyIcon for non-system icon handles
Title: Re: how to get default icon for exe files
Post by: Ar0n on August 23, 2015, 11:13:20 AM
Well, I wanted to get the default system icon of EXE files... not the current icon of my application :-P but SHGetFileInfo worked by passing the extension! thanks!  Added the project if it's useful for someone else.
I tested it on Windows XP and 7.

If anyone can try it in Windows Vista, 8 or 10, it would be great.
Title: Re: how to get default icon for exe files
Post by: dedndave on August 23, 2015, 12:27:45 PM
    INVOKE  LoadIcon,NULL,IDI_APPLICATION
    mov     hIcon,eax


QuoteIDI_APPLICATION  Default application icon.
Title: Re: how to get default icon for exe files
Post by: Ar0n on August 23, 2015, 12:41:10 PM
Quote from: dedndave on August 23, 2015, 12:27:45 PM
    INVOKE  LoadIcon,NULL,IDI_APPLICATION
    mov     hIcon,eax


QuoteIDI_APPLICATION  Default application icon.
:t that worked as well! I thought you meant the custom icon you can set in the application. thanks dave.

Now I'm trying to get x48 and/or higher dimensions :-P
Title: Re: how to get default icon for exe files
Post by: dedndave on August 23, 2015, 01:10:11 PM
the dimension of an application icon will be fixed
you can get the size by calling GetSystemMetrics

QuoteSM_CXICON  The default width of an icon, in pixels. The LoadIcon function can load only icons with the dimensions that SM_CXICON and SM_CYICON specifies.

SM_CYICON  The default height of an icon, in pixels. The LoadIcon function can load only icons with the dimensions that SM_CXICON and SM_CYICON specifies.

of course, the operating system has that icon in a DLL, likely at various sizes
it's probably in Shell32.dll
however, you need the correct ordinal to index that icon
and - the ordinal may change from one windows version to the next (they usually don't)

to load icons of sizes other than those dimensioned by SM_CXICON and SM_CYICON,
you can use LoadImage

the best thing to do is to get the icon you want, in the sizes you want, and add them to the EXE as resource
Title: Re: how to get default icon for exe files
Post by: dedndave on August 23, 2015, 01:13:06 PM
http://masm32.com/board/index.php?topic=967.0 (http://masm32.com/board/index.php?topic=967.0)

Reply #18 of that thread has the attachment   :t
Title: Re: how to get default icon for exe files
Post by: dedndave on August 23, 2015, 01:25:06 PM
from what i can see, that icon (shell32.dll, index #3, XP) only comes in 32x32 and 16x16

it's a boring icon - pick something better - lol