高分:关于获取操作系统版本

Smallfrogs 2003-11-23 07:17:12
程序是这样的

BOOL CRegFixDlg::OnInitDialog()
{
CDialog::OnInitDialog();

// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, TRUE); // Set small icon

OSVERSIONINFO osinfo;
int num=osinfo.dwMajorVersion ;
if (num==5)
MessageBox(_T("NT5"));
DWORD iButtonStyle=WS_CHILD|WS_VISIBLE|BS_CENTER|BS_FLAT|BS_MULTILINE|BS_VCENTER;
m_button1.Create (_T("Button1"),iButtonStyle,CRect(20,197,100,227),this,501);

......
}

就是说先判断操作系统版本,如果是Windows 2000/XP/Server 2003,就弹出信息,提示是NT5

但是现在根本没有弹出信息来

这是怎么回事啊?
...全文
186 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
kuibobo 2003-11-24
  • 打赏
  • 举报
回复
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()
函数有时更方便。


一个实例:
OSVERSIONINFO osvi;
memset(&osvi, 0, sizeof(OSVERSIONINFO));
osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
GetVersionEx (&osvi);

CString s;
// s.Format("你的Windows版本为:%d.%d", osvi.dwMajorVersion, osvi.dwMinorVersion);
DWORD info=osvi.dwMajorVersion,of=osvi.dwMinorVersion;
// AfxMessageBox(info,of,MB_OK);
// m_info=info+of;
UpdateData(false);
Smallfrogs 2003-11-23
  • 打赏
  • 举报
回复
不必了

问题解决了

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧