首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > PB >

PB 判断系统是32位仍是64位

2013-06-25 
PB 判断系统是32位还是64位如题,查了F1,PB内部好象也没有方法。[解决办法]用APIGetNativeSystemInfo()http:

PB 判断系统是32位还是64位
如题,查了F1,PB内部好象也没有方法。
[解决办法]
用API  GetNativeSystemInfo()
http://msdn.microsoft.com/zh-cn/library/ms724340(v=vs.85).aspx

顺便借花献佛,不过不是很全,下面结构、声明我都给你补上
http://bbs.csdn.net/topics/390226702

结构:

global type osversioninfo from structure
stringdwOSVersionInfoSize
stringdwMajorVersion
stringdwMinorVersion
stringdwBuildNumber
stringdwPlatformId
stringszCSDVersion
end type


global type osversioninfoex from structure
stringdwOSVersionInfoSize
stringdwMajorVersion
stringdwMinorVersion
stringdwBuildNumber
stringdwPlatformId
stringszCSDVersion
stringwServicePackMajor
stringwServicePackMinor
stringwSuiteMask
stringwProductType
stringwReserved
end type


global type system_info from structure
longwprocessorarchitecture
longwreserved
longdwpagesize
longlpminimumapplicationaddress
longlpmaximumapplicationaddress
longdwactiveprocessormask
longdwnumberofprocessors
longdwprocessortype
longdwallocationgranularity
longwprocessorlevel
longwprocessorrevision
end type


函数:
//====================================================================
// 事件: n_appmanager.of_apifunctionpresent()
//--------------------------------
// 描述:判断API是不否成功
//--------------------------------
// 参数:
// valuestringls_functionname
// valuestringls_dllname     
//--------------------------------
// 返回:  boolean
//--------------------------------
// 作者:TANGYONG 日期: 2012年09月19日
//--------------------------------
//Copyright (c) 2002-2012 TRUEWAY(TM), All rights reserved.
//--------------------------------
// 修改历史:
//
//====================================================================


String ls_pathname,ls_pathname_add
Long ls_ihandle , ls_ihandle1,ls_laddr
Boolean ls_freelib
ls_freelib  = FALSE
ls_pathname = Space(255)
ls_ihandle = GetModuleHandle(ls_dllname) //获取一个应用程序或动态链接库的模块句柄
GetSystemDirectory(ls_pathname,255) //获取DLL路径
ls_pathname_add =  ls_pathname+'\'+ls_dllname
IF  ls_ihandle = 0 THEN
ls_ihandle = LoadLibraryEx(ls_pathname_add, 0, DONT_RESOLVE_DLL_REFERENCES)
ls_freelib = TRUE
END IF
IF  ls_ihandle <>  0 THEN
ls_laddr = GetProcAddress(ls_ihandle, ls_functionName)
IF ls_freelib = TRUE THEN
FreeLibrary( ls_ihandle) //用FreeLibrary函数释放DLL
END IF
END IF

IF  ls_laddr <> 0 THEN
RETURN  TRUE
ELSE
RETURN  FALSE


END IF



//====================================================================
// 事件: n_appmanager.of_infoversion64bit()
//--------------------------------
// 描述:判断系统位数
//--------------------------------
// 参数:
//--------------------------------
// 返回:  string
//--------------------------------
// 作者:TANGYONG 日期: 2012年09月19日
//--------------------------------
//Copyright (c) 2002-2012 TRUEWAY(TM), All rights reserved.
//--------------------------------
// 修改历史:
//
//====================================================================


Long lngret = 1
String strtemp
system_info si
Boolean  iswow64process , ls_getnativesysteminfo
blniswin64bit = FALSE
iswow64process = of_apifunctionpresent("IsWow64Process", "kernel32")
ls_getnativesysteminfo = of_apifunctionpresent("GetNativeSystemInfo", "kernel32")
IF iswow64process = TRUE THEN
IsWow64Process(  GetCurrentProcess() ,lngret) //获取句柄
IF ls_getnativesysteminfo = TRUE AND  lngret <> 0 THEN
GetNativeSystemInfo( si)
IF si.wprocessorarchitecture = PROCESSOR_ARCHITECTURE_AMD64 OR  si.wprocessorarchitecture =  PROCESSOR_ARCHITECTURE_IA64 THEN //判断系统多少位
strtemp = "64bits"
blniswin64bit = TRUE
ELSE
strtemp = " 32bits"
END IF
ELSE
strtemp = " 32bits"
END IF
ELSE
strtemp = " 32bits"
END IF


RETURN strtemp


实例变量:
Long PROCESSOR_ARCHITECTURE_AMD64 = 9
Long PROCESSOR_ARCHITECTURE_ARM
Long PROCESSOR_ARCHITECTURE_IA64 = 6
Long PROCESSOR_ARCHITECTURE_INTEL = 0
Long PROCESSOR_ARCHITECTURE_UNKNOWN = 65535

Long DONT_RESOLVE_DLL_REFERENCES = 1

Boolean blniswin64bit


声明:
//获取系统版本信息API函数
FUNCTION ULong GetVersionEx(REF osversioninfoex lpVersionInformation) LIBRARY "kernel32.dll" ALIAS FOR "GetVersionExA;"
FUNCTION ULong GetVersion(REF osversioninfo lpVersionInformation) LIBRARY "kernel32.dll" ALIAS FOR "GetVersionExA"
FUNCTION ULong GetModuleHandle(REF String lpModuleName) LIBRARY "kernel32.dll" ALIAS FOR "GetModuleHandleA" //获取一个应用程序或动态链接库的模块句柄 

FUNCTION ULong LoadLibraryEx(REF String lpLibFileName,ULong hFile,ULong dwFlags) LIBRARY "kernel32.dll" ALIAS FOR "LoadLibraryExA" //返回库模块句柄
FUNCTION ULong GetProcAddress(ULong hModule,REF String lpProcName) LIBRARY "kernel32.dll" ALIAS FOR "GetProcAddress" //检索指定的动态链接库(DLL)中的输出库函数地址 加上ansi为api中Unicode与ansi区别

FUNCTION ULong FreeLibrary(ULong hLibModule) LIBRARY "kernel32.dll" //卸载进程模块
FUNCTION ULong GetCurrentProcess() LIBRARY "kernel32.dll" //返回当前进程的句柄
SUBROUTINE  IsWow64Process (Long hProcess  , REF Long Wow64Process ) LIBRARY "kernel32.dll" //自定义API ,防止系统不是XP以上



SUBROUTINE GetNativeSystemInfo(REF system_info lpSystemInfo) LIBRARY "kernel32.dll"


FUNCTION UInt GetSystemDirectory(REF String lpBuffer,UInt uSize) LIBRARY "kernel32.dll" ALIAS FOR "GetSystemDirectoryA"



能给的都给你了,你懂得PB 判断系统是32位仍是64位

热点排行