Login | Register   
LinkedIn
Google+
Twitter
RSS Feed
Download our iPhone app
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
Browse DevX
Sign up for e-mail newsletters from DevX


Tip of the Day
Language: VB4/32,VB5,VB6
Expertise: Intermediate
Aug 7, 1999

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 * 80
End Type

Public Const SHGFI_EXETYPE = &H2000

Public 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, Win32
Const WIN16_GUI = &H454E   ' NE, Win16
Const 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 Visual C++ Windows Shell Programming by Dino Esposito.
Dino Esposito
 
Comment and Contribute

 

 

 

 

 


(Maximum characters: 1200). You have 1200 characters left.

 

 

Sitemap
Thanks for your registration, follow us on our social networks to keep up-to-date