64Bit版のx86エミュレータで動作しているかの判断          <TOP>


IsWow64Process 指定されたプロセスの実行に、WOW64 が使用されているかどうかを決定
GetModuleHandle 指定の実行モジュールのハンドルを取得
GetProcAddress 実行モジュール内の関数アドレスを取得
GetCurrentProcess 現在のプロセスに対応する疑似ハンドルを取得

 

Windows 7 Professional SP1(32Bit版)の例        Windows 7 Home Premium SP1(64Bit版)の例
 

 

'================================================================
'= 64Bit版のx86エミュレータで動作しているかの判別(U)
'=    (IsWow64Process2.bas)
'================================================================
#include "Windows.bi"

' 指定されたプロセスの実行に、WOW64 が使用されているかどうかを決定
Declare Function Api_IsWow64Process& Lib "kernel32" Alias "IsWow64Process" (ByVal hProcess&, ByRef Wow64Process&)

' 指定の実行モジュールのハンドルを取得
Declare Function Api_GetModuleHandle& Lib "Kernel32" Alias "GetModuleHandleA" (ByVal ModuleName$)

' 実行モジュール内の関数アドレスを取得
Declare Function Api_GetProcAddress& Lib "Kernel32" Alias "GetProcAddress" (ByVal ModuleHandle&, ByVal ProcName$)

' 現在のプロセスに対応する疑似ハンドルを取得
Declare Function Api_GetCurrentProcess& Lib "Kernel32" Alias "GetCurrentProcess" ()

Var Shared Button1 As Object

Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14

'================================================================
'=
'================================================================
Declare Function IsWow64() As Integer
Function IsWow64() As Integer
    Var Wow64 As Long
    Var Wow64Proc As Long

    Wow64 = False
    Wow64Proc = Api_GetProcAddress(Api_GetModuleHandle("kernel32"), "Wow64Process")
    If (0 <> Wow64Proc) Then
        If 0 = Api_Wow64Process(Api_GetCurrentProcess(), Wow64) Then
           ' handle error
        End If
    End If
    IsWow64 = (Wow64 <> 0)
End Function

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl()
Sub Button1_on()
    If IsWow64() = True then
        A% = MessageBox("", "Windows x64 で動作しています!", 0, 2)
    Else
        A% = MessageBox("", "Windows x64 で動作していません!", 0, 2)
    End If
End Sub

'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End