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


IsWow64Process 指定されたプロセスの実行に、WOW64 が使用されているかどうかを決定
GetCurrentProcess 現在のプロセスに対応する疑似ハンドルを取得
GetNativeSystemInfo WOW64 で実行中のアプリケーションシステムに関する情報を取得
 

  

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

Type SYSTEM_INFO
    dwOemId                     As Long       'このメンバは使われない
    dwPageSize                  As Long       'メモリページのサイズ
    lpMinimumApplicationAddress As Long       'アプリケーションが利用可能なメモリ空間の最下位アドレス
    lpMaximumApplicationAddress As Long       'アプリケーションが利用可能なメモリ空間の最上位アドレス
    dwActiveProcessorMask       As Long       'システム中に存在するプロセッサのビットマスク
    dwNumberOfProcessors        As Long       'システム中に存在するプロセッサの数
    dwProcessorType             As Long       'プロセッサの種類(386・486・586)
    dwAllocationGranularity     As Long       'メモリ空間割り当ての最小単位
    wProcessorLevel             As Integer    'プロセッサの種類(WindowsNT系OSのみ)
    wProcessorRevision          As Integer    'プロセッサのバージョン(WindowsNT系OSのみ)
End Type

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

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

'WOW64 で実行中のアプリケーションシステムに関する情報を取得
Declare Sub Api_GetNativeSystemInfo Lib "kernel32" Alias "GetNativeSystemInfo" (lpSystemInfo As SYSTEM_INFO)

Var Shared Button1 As Object

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

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl()
Sub Button1_on()
    Var Value As Long
    Var Ret As Long

    Ret = Api_IsWow64Process(GetCurrentProcess, Value)
    If Value = 0 Then
        A% = MessageBox("", "このアプリケーションは、" & Chr$(13, 10) & "64Bitコンピューターの" & Chr$(13, 10) & "x86エミュレーションで" & Chr$(13, 10) & "動作していません!", 0, 2)
         
    Else
        Var si64 As SYSTEM_INFO
        Api_GetNativeSystemInfo si64
        A% = MessageBox("", "64ビットシステム上の" & Chr$(13, 10) & "プロセッサの数: " & Chr$(13, 10) & Str$(si64.dwNumberOfProcessors), 0, 2)
    End If
End Sub
'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End