📄 程序如何才能识别目前的操作系统环境.txt
字号:
我 在 QA000011 “如何在VB 4.0程序中确定Win 95的语种”介 绍 过 了 区 分 Windows的 不 同 语 言 版 本 的 方 法 , 这 里 不 在 赘 述 。 下 面 , 我 们 分 16位 和 32位 两 种 情 况 介 绍 一 下 获 得 版 本 号 的 办 法 。
16位 程 序 通 常 是 使 用 Windows中 的 GetVersion()函 数 是 用 来 获 取 Windows及 DOS版 本 号 的 , 这 个 函 数 的 返 回 值 是 一 个 四 个 字 节 的 DWORD类 型 。 低 位 字 节 返 回 Windows主 版 本 号 。 返 回 值 的 低 位 字 的 高 位 字 节 说 明 Windows的 副 版 本 号 , 高 位 字 的 低 位 字 节 说 明 DOS的 副 版 本 号 , 高 位 字 的 高 位 字 节 说 明 DOS的 主 版 本 号 。 比 如 说 , 在 Windows 95下 调 用 这 一 函 数 返 回 0x07005F03。 高 位 字 0x0700说 明 DOS版 本 为 7.00。 低 位 字 的 低 位 字 节 0x03, 低 位 字 节 0x5F(十 进 制 95), 也 就 是 说 Windows 95的 Windows版 本 号 为 3.95(注 意 不 是 4.0)。 下 表 是 各 版 本 的 Windows 的 GetVersion()的 返 回 值 :
Windows版 本 号 DOS版 本 号
Windows 3.x 实 际 的 Windows版 本 号 实 际 的 DOS版 本 号 Windows for
Workgroup 3.11 3.10 实 际 的 DOS版 本 号 Windows NT(16位
Windows,或称WOW) 3.10 5.0
Windows 95 3.95 7.0
Windows 95 OSR2 3.95 7.1
GetVersion()是 标 准 的 Windows版 本 信 息 函 数 , 但 它 返 回 的 值 并 不 总 是 “ 真 实 ” 的 。 例 如 出 于 兼 容 性 的 考 虑 , Windows for Workgroup 3.11(注 意 这 和 Windows 3.11是 两 个 不 同 的 版 本 )返 回 的 版 本 号 是 3.10, 不 是 3.11。 你 可 以 使 用 GetFileVersionInfo()函 数 来 获 得 USER.EXE的 版 本 号 , 它 返 回 的 将 是 3.11。 Windows 3.2中 文 版 返 回 的 版 本 号 是 3.10, 而 不 是 3.20, 这 倒 不 是 技 术 原 因 , 而 是 因 为 Windows 3.2是 在 Windows 3.10的 基 础 上 汉 化 的 。 如 果 想 知 道 程 序 是 否 运 行 在 Windows NT环 境 下 , 16位 程 序 可 以 调 用 WinFlags()函 数 , 用 返 回 值 同 WF_WINNT相 与 , 如 果 不 为 零 说 明 运 行 在 Windows NT中 。 如 果 你 的 C++系 统 中 没 有 定 义 WF_WINNT常 数 , 可 以 加 上 下 面 这 句 :
#define WF_WINNT 0x4000
32位 程 序 仍 可 以 使 用 GetVersion()函 数 , 但 返 回 值 同 16位 不 同 。 32位 软 件 最 好 使 用 GetVersionEx()函 数 。 这 个 函 数 使 用 OSVERSIONINFO结 构 , 该 结 构 是 如 下 定 义 的 :
typedef struct _OSVERSIONINFO{
DWORD dwOSVersionInfoSize;
DWORD dwMajorVersion; // 主 版 本 号
DWORD dwMinorVersion; // 副 版 本 号
DWORD dwBuildNumber; // Build号
DWORD dwPlatformId;
TCHAR szCSDVersion[ 128 ];
} OSVERSIONINFO;
在 Windows 95上 , dwMajorVersion为 4, dwMinorVersion为 0, dwBuildNumber为 950, 也 就 是 说 Windows 95的 版 本 号 为 4.00.950。 dwPlatformId是 用 来 区 分 Windows 95、 Windows NT和 Win32s。 其 取 值 含 义 如 下 :
取 值 含 义
VER_PLATFORM_WIN32s Win32s on Windows 3.1
VER_PLATFORM_WIN32_WINDOWS Win32 on Windows 95
VER_PLATFORM_WIN32_NT Win32 on Windows NT
若 想 区 别 Windows 95与 Windows 95 OSR2, 要 看 dwBuildNumber, 如 果 dwBuildNumber的 低 位 字 大 于 1080, 则 系 统 为 Windows 95 OSR2或 更 高 版 本 。 在 Win32中 不 再 支 持 WinFlags()函 数 。
尽 管 GetVersionEx()函 数 和 GetVersion ()函 数 是 Windows提 供 的 标 准 的 版 本 函 数 , 但 在 实 际 编 程 使 用 GetFileVersionInfo()函 数 有 时 更 方 便 。
<END>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -