留个技术文章,写一下VB6里判断系统是否64位的代码。
先来建立您的 Module1.bas,代码如下:
'判断 64 位系统的 API:获取进程地址,获取模块句柄,获取当前进程,是否 64 位进程
Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long
Private Declare Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleA" (ByVal lpModuleName As String) As Long
Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
Private Declare Function IsWow64Process Lib "kernel32" (ByVal hProc As Long, bWow64Process As Long) As Long
Public IsWow64 As Boolean '主模块中的公用变量,其他模块直接引用即可,不必再运行函数判断。
Sub Main()
IsWow64 = IsWow64Func
'运行其他代码
'FrmMain.Show
End Sub
Private Function IsWow64Func() As Boolean '简单判断系统是 64 还是 32 位
'kernel32.dll 进程地址是否含有 IsWow64Process 句柄
IsWow64Func = CBool(GetProcAddress(GetModuleHandle("kernel32"), "IsWow64Process"))
End Function
'Private Function IsWow64Func() As Long '如果 IsWow64Process 存在(返回非零),系统即是 64 位。否则不需要判断,就是 32 位
' If GetProcAddress(GetModuleHandle("kernel32"), "IsWow64Process") = 0 Then 'kernel32.dll 进程地址不含有 IsWow64Process 句柄,也就是系统不是 64 位。此时本函数返回 [0]
' IsWow64Func = 0
' Else
' IsWow64Process GetCurrentProcess(), IsWow64B 'kernel32.dll 进程地址不含有 IsWow64Process 句柄,为 64 位系统。用第二个传入参数 [IsWow64B] 看当前进程是否 64 位。
' If IsWow64Pro = 0 Then
' IsWow64Func = -1 '被赋值为 0 ,是 64 位程序(当前进程)跑在 64 位系统(WOW64模式)下。此时本函数返回 [-1]
' Else
' IsWow64Func = 1 '被赋值为 1 ,是 32 位程序(当前进程)跑在 64 位系统(WOW64模式)下。此时本函数返回 [1]
' End If
' End If
' '也可以简写为 IsWow64Func = IIf(IsWow64Pro, 1, -1)
'End Function