我的微店
得闲笔记
我命由我不由天

在看一个外国佬的代码的时候,看到一个API函数,然后随手查了查MSDN,原来是新加的用来判断是否是Win64位系统的,于是写了一个函数用来判断是否是64位操作系统:


代码
 1 function IsWin64: Boolean;  
 2 var  
 3    Kernel32Handle: THandle;  
 4    IsWow64Process: function(Handle: Windows.THandle; var Res: Windows.BOOL): Windows.BOOL; stdcall;  
 5    GetNativeSystemInfo: procedure(var lpSystemInfo: TSystemInfo); stdcall;  
 6    isWoW64: Bool;  
 7    SystemInfo: TSystemInfo;  
 8 const  
 9    PROCESSOR_ARCHITECTURE_AMD64 = 9;  
10    PROCESSOR_ARCHITECTURE_IA64 = 6;  
11 begin  
12   Kernel32Handle := GetModuleHandle('KERNEL32.DLL');  
13   if Kernel32Handle = 0 then  
14     Kernel32Handle := LoadLibrary('KERNEL32.DLL');  
15   if Kernel32Handle <> 0 then  
16   begin  
17     IsWOW64Process := GetProcAddress(Kernel32Handle,'IsWow64Process');  
18     GetNativeSystemInfo := GetProcAddress(Kernel32Handle,'GetNativeSystemInfo');  
19     if Assigned(IsWow64Process) then  
20     begin  
21       IsWow64Process(GetCurrentProcess,isWoW64);  
22       Result := isWoW64 and Assigned(GetNativeSystemInfo);  
23       if Result then  
24       begin  
25         GetNativeSystemInfo(SystemInfo);  
26         Result := (SystemInfo.wProcessorArchitecture = PROCESSOR_ARCHITECTURE_AMD64) or  
27                   (SystemInfo.wProcessorArchitecture = PROCESSOR_ARCHITECTURE_IA64);  
28       end;  
29     end  
30     else Result := False;  
31   end  
32   else Result := False;  
33 end;  


需要注意是GetNativeSystemInfo 函数从Windows XP 开始才有, 而 IsWow64Process 函数从 Windows XP with SP2 以及 Windows Server 2003 with SP1 开始才有。 所以使用该函数的时候最好用GetProcAddress

posted on 2010-01-01 23:52  不得闲  阅读(3775)  评论(2编辑  收藏  举报