当前位置: 首页 > news >正文

[Windows编程] 如何判断操作系统是64位还是32位

64位Wnidows 里面有个叫Wow64 的模拟器技术,可以使32位的程序在64位Windows 上运行。 当你想在程序里面针对32b位/ 64位系统执行不同代码的时候, 需要判断操作系统是32位还是64位。 使用 Windows API函数 GetNativeSystemInfo 可以获得这个信息。

代码示例:

SYSTEM_INFO si;
GetNativeSystemInfo(&si);

if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64 ||

si.wProcessorArchitecture != PROCESSOR_ARCHITECTURE_IA64 )

{

//64 位操作系统

}

else

{

// 32 位操作系统

}

另外,Windows API 还提供了 IsWow64Process 函数判断程序是不是运行在Wow64模拟器之上。

代码示例:

BOOL bIsWow64 = FALSE;
IsWow64Process(GetCurrentProcess(), &bIsWow64);


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

typedef void (WINAPI *LPFN_PGNSI)(LPSYSTEM_INFO);

typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);

LPFN_PGNSI pGNSI = (LPFN_PGNSI ) GetProcAddress(

GetModuleHandle(TEXT("kernel32.dll")), "GetNativeSystemInfo");

LPFN_ISWOW64PROCESS fnIsWow64Process = (LPFN_ISWOW64PROCESS) GetProcAddress(
GetModuleHandle(TEXT("kernel32")),"IsWow64Process");

>> 原创文章的版权属于作者,转载请注明出处和作者信息(http://blog.csdn.net/WinGeek/), 谢谢。 <<

相关文章:

  • 使用Roslyn动态编译和执行
  • 利用Windows7内置功能管理虚拟磁盘
  • 使用cecil 完成 code injection
  • 善用属性
  • SQLServer任意列之间的聚合
  • [编程技巧] 巧用CPU缓存优化代码:数组 vs. 链表
  • 保存Bitmap到内存流中引发“GDI+中发生一般性错误”
  • Asp.net Mvc使用PagedList分页
  • [Web开发] PSD 转换成HTML/CSS 的工具网站
  • 算法练习--整数拆分为素数乘积
  • 算法练习--卡片游戏
  • [IE编程] 了解Urlmon.dll和Wininet.dll
  • 算法练习--小球下落
  • 在LINQ to SQL中处理“更新已被其它用户删除对象”的错误
  • 算法练习--打印Cantor 数表
  • 【刷算法】求1+2+3+...+n
  • CentOS 7 防火墙操作
  • ES6之路之模块详解
  • Javascript基础之Array数组API
  • java第三方包学习之lombok
  • maya建模与骨骼动画快速实现人工鱼
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • nodejs调试方法
  • Shell编程
  • VuePress 静态网站生成
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 用 Swift 编写面向协议的视图
  • ionic异常记录
  • #调用传感器数据_Flink使用函数之监控传感器温度上升提醒
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (转)创业的注意事项
  • (转)关于多人操作数据的处理策略
  • (转)我也是一只IT小小鸟
  • ***原理与防范
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .NET Framework Client Profile - a Subset of the .NET Framework Redistribution
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地定义和使用弱事件
  • .stream().map与.stream().flatMap的使用
  • /使用匿名内部类来复写Handler当中的handlerMessage()方法
  • @requestBody写与不写的情况
  • [ 云计算 | AWS 实践 ] Java 如何重命名 Amazon S3 中的文件和文件夹
  • []串口通信 零星笔记
  • [20170705]diff比较执行结果的内容.txt
  • [8-23]知识梳理:文件系统、Bash基础特性、目录管理、文件管理、文本查看编辑处理...
  • [ABP实战开源项目]---ABP实时服务-通知系统.发布模式
  • [AIGC] Java 和 Kotlin 的区别
  • [ai笔记4] 将AI工具场景化,应用于生活和工作
  • [Android 数据通信] android cmwap接入点
  • [AutoSar]状态管理(五)Dcm与BswM、EcuM的复位实现
  • [C++]二叉搜索树
  • [FROM COM张]如何解决Nios II SBTE中出现的undefined reference to `xxx'警告
  • [HITCON 2017]SSRFme perl语言的 GET open file 造成rce
  • [Java][算法 双指针]Day 02---LeetCode 热题 100---04~07
  • [P7885][Android13] 解决5G信号良好状态栏信号只有两格的问题
  • [PHP] 面向对象