|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Visual Basic Helper Routines GetFileVersionInfo: Handy Routines for Identifying Shell32 Versions |
||
Posted: | Tuesday January 14, 2003 | |
Updated: | Monday December 26, 2011 | |
Applies to: | VB4-32, VB5, VB6 | |
Developed with: | VB6, Windows XP | |
OS restrictions: | None | |
Author: | VBnet - Randy Birch | |
Related: |
GetVersionEx: Windows Version, Service Pack and Platform Info GetSystemInfo: System Processor Information |
|
Prerequisites |
None. |
|
Some
APIs, notably the Shell_NotifyIcon API, require the an application tailor
its code to accommodate the version of Windows shell32.dll. This demo
provides the code; by passing a version number to the routine it will
return True if shell32.dll is at least that version. This
information can then be used to adjust the app to perform tasks
applicable to the Shell's available methods.
A discussion of the requirement for this code can be seen at Shell_NotifyIcon: Windows Systray NOTIFYICONDATA Overview. |
BAS Module Code |
None. |
|
Form Code |
On a form, add a command button, and three text boxes Text1/Text2/Text3. Labels are optional. Add the following code to the form: |
|
Option Explicit '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Copyright ©1996-2011 VBnet/Randy Birch, All Rights Reserved. ' Some pages may also contain other copyrights by the author. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Distribution: You can freely use this code in your own ' applications, but you may not reproduce ' or publish this code on any web site, ' online service, or distribute as source ' on any media without express permission. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Private Declare Function GetFileVersionInfoSize Lib "version.dll" _ Alias "GetFileVersionInfoSizeA" _ (ByVal lptstrFilename As String, _ lpdwHandle As Long) As Long Private Declare Function GetFileVersionInfo Lib "version.dll" _ Alias "GetFileVersionInfoA" _ (ByVal lptstrFilename As String, _ ByVal dwHandle As Long, _ ByVal dwLen As Long, _ lpData As Any) As Long Private Declare Function VerQueryValue Lib "version.dll" _ Alias "VerQueryValueA" _ (pBlock As Any, _ ByVal lpSubBlock As String, _ lpBuffer As Any, _ nVerSize As Long) As Long Private Declare Sub CopyMemory Lib "kernel32" _ Alias "RtlMoveMemory" _ (Destination As Any, _ Source As Any, _ ByVal Length As Long) Private Sub Form_Load() Command1.Caption = "Shell Version" End Sub Private Sub Command1_Click() Text1.Text = IsShellVersion(3) Text2.Text = IsShellVersion(5) Text3.Text = IsShellVersion(6) End Sub Private Function IsShellVersion(ByVal version As Long) As Boolean 'returns True if the Shell version '(shell32.dll) is equal or later than 'the value passed as 'version' Dim nBufferSize As Long Dim nUnused As Long Dim lpBuffer As Long Dim nVerMajor As Integer Dim bBuffer() As Byte Const sDLLFile As String = "shell32.dll" nBufferSize = GetFileVersionInfoSize(sDLLFile, nUnused) If nBufferSize > 0 Then ReDim bBuffer(nBufferSize - 1) As Byte Call GetFileVersionInfo(sDLLFile, 0&, nBufferSize, bBuffer(0)) If VerQueryValue(bBuffer(0), "\", lpBuffer, nUnused) = 1 Then CopyMemory nVerMajor, ByVal lpBuffer + 10, 2 IsShellVersion = nVerMajor >= version End If 'VerQueryValue End If 'nBufferSize End Function |
Comments |
Running the project will populate the text boxes with True if the shell is at least the requested version. |
|
|
|
|||||
|
|||||
|
|||||
Copyright ©1996-2011 VBnet and Randy Birch. All Rights Reserved. |