vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Mails senden, abrufen und decodieren - ganz easy ;-)  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik:    |   VB-Versionen: VB602.04.12
Prüfen, ob die Anwendung auf 64-Bit Systemen im Wow64-Emulator ausgeführt wird

Mit dieser Funktion lässt sich prüfen, ob die eigene 32-Bit Anwendung auf einem 64-Bit Windows-System im Wow64-Emulator ausgeführt wird.

Autor:  Dieter OtterBewertung:     [ Jetzt bewerten ]Views:  1.610 
http://www.tools4vb.de/System:  WinXP, Win7, Win8, Win10, Win11 Beispielprojekt 

Auf den Anwendersystemen ist immer häufiger ein 64-Bit Windows-System zu finden. Heute zeigen wir Ihnen, wie sich ermitteln lässt, ob die eigene 32-Bit VB6 Anwendung auf einem Windows 64-Bit System im sogenannten Wow64-Emulator ausgeführt wird.

Hierfür stellt uns die kernel32 Bibliothek eine Funktion namens IsWow64Process zur Verfügung. Da diese Funktion aber nicht unter allen Betriebssystemen verfügbar ist, müssen wir zunächst prüfen, ob die Funktion in der DLL tatsächlich existiert. Hierfür verwenden wir den bereits bekannten Tipp:  Funktion in einer DLL vorhanden?

Fügen Sie nachfolgenden Code in ein Modul ein.

' Benötrite API-Deklarationen
Private Declare Function LoadLibrary Lib "kernel32" _
  Alias "LoadLibraryA" ( _
  ByVal lpLibFileName As String) As Long
 
Private Declare Function FreeLibrary Lib "kernel32" ( _
  ByVal hLibModule As Long) As Long
 
Private Declare Function GetProcAddress Lib "kernel32" ( _
  ByVal hModule As Long, _
  ByVal lpProcName As String) As Long
 
Private Declare Function GetCurrentProcess Lib "kernel32.dll" () As Long
 
Private Declare Function IsWow64Process Lib "kernel32" ( _
  ByVal hProcess As Long, _
  ByRef wow64Process As Boolean) As Long
' Funktion in DLL vorhanden?
Public Function DLLFunctionAvail(ByVal sFile As String, _
  ByVal sProcedure As String) As Boolean
 
  Dim nHandle As Long
 
  ' DLL laden
  nHandle = LoadLibrary(sFile)
  If nHandle <> 0 Then
    ' Versuch die Adresse der Funktion zu ermitteln
    If CBool(GetProcAddress(nHandle, sProcedure)) = True Then
      ' Jepp: Funktion vorhanden
      DLLFunctionAvail = True
    End If
 
    ' Speicher wieder freigeben
    Call FreeLibrary(nHandle)
  End If
End Function
' Prüft, ob die Anwendung im Wow64-Emulator ausgeführt wird
' Hinweis: Der Wow64-Emulator steht nur unter 64-Bit Systemen zur Verfügung
' Auf diese Weise lässt sich abfragen, ob die eigene 32-Bit Anwendung
' unter Windows 64-Bit ausgeführt wird
Public Function IsWow64() As Boolean
  Dim bWow64 As Boolean
 
  ' 1. Prüfen, ob die IsWow64Process-Funktion verfügbar ist
  If DLLFunctionAvail("kernel32", "IsWow64Process") Then
    ' 2. Jetzt abfragen, ob der eigene Prozess im Wow64-Emulator ausgeführt wird
    If IsWow64Process(GetCurrentProcess, bWow64) <> 0 Then
      IsWow64 = bWow64
    End If
  End If
End Function

Beispielaufruf:

If IsWow64() Then
  MsgBox "Die Anwendung wird unter Windows 64-Bit als 32-Bit Anwendung im Wow64-Emulator ausgeführt!"
Else
  MsgBox "Die Anwendung wird unter Windows 32-Bit ausgeführt!"
End If