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 |