devxlogo

Determine whether a program is 16- or 32-bit

Determine whether a program is 16- or 32-bit

Even if we’re living in a 32-bit world, and closer and closer to the 64-bit day, 16-bit programs are still running out there. Knowing whether a given EXE is 32-bit or not can be useful when you have to arrange version checking routine, for example to detect which version of a product is installed.

The Win32 SDK makes available a multi-use function called SHGetFileInfo() that serves the purpose. It is declared like this:

Type SHFILEINFO   hIcon As Long   iIcon As Long   dwAttributes As Long   szDisplayName As String * MAX_PATH   szTypeName As String * 80End TypePublic Const SHGFI_EXETYPE = &H2000Public Declare Function SHGetFileInfo Lib "shell32.dll" Alias "SHGetFileInfoA" _    ( ByVal pszPath As String, ByVal dwFileAttributes As Long, _    psfi As SHFILEINFO, ByVal cbFileInfo As Long, ByVal uFlags As Long ) As _    Long 

Its usage is:

dw = SHGetFileInfo(exename, 0, sfi, Len(sfi), SHGFI_EXETYPE)

The returned low word contains the signature of the executable. You must compare it against the following values:

Const WIN32_GUI = &H4550   ' PE, Win32Const WIN16_GUI = &H454E   ' NE, Win16Const WIN16_DOS = &H5A4D   ' MZ, MS-DOS

You can obtain the low word in this way:

dw = SHGetFileInfo(exename, 0, sfi, Len(sfi), SHGFI_EXETYPE)lowWord = dw And &H7FFF

This tip is taken from the book VisualC++ Windows Shell Programming by Dino Esposito.

See also  How IoT Tech Will Transform Logistics
devxblackblue

About Our Editorial Process

At DevX, we’re dedicated to tech entrepreneurship. Our team closely follows industry shifts, new products, AI breakthroughs, technology trends, and funding announcements. Articles undergo thorough editing to ensure accuracy and clarity, reflecting DevX’s style and supporting entrepreneurs in the tech sphere.

See our full editorial policy.

About Our Journalist