所以我有一些常数:
const ushort _WIN32_WINNT_NT4 = 0x0400;
const ushort _WIN32_WINNT_WIN2K = 0x0500;
....
然后我有一个主要版本号、次要版本号和服务包号,当您将它们连接在一起时,它与上面的数字相同 - 除了其中两个是int
,一个是string
. 我可以将它们全部放入这样的字符串中:
string version = majorVersion.ToString() + minorVersion.ToString() + sp;
对于 Windows 2000,这看起来像"500"
. 它“匹配” ushort,只是没有0x0
.
我想做的是移交version
给一个函数,因为ushort
它返回正确的操作系统:
private static string WindowsVersion(ushort uniNum)
{
switch (uniNum)
{
case _WIN32_WINNT_NT4:
return "Windows NT 4.0";
case _WIN32_WINNT_WIN2K:
return "Windows 2000";
....
default:
return "Unknown OS version.";
}
}
问题是,即使我这样做:
ushort uniNum = Convert.ToUInt16(version);
并说它发送它作为500
,常数是0x0500
,所以它永远不会找到操作系统并返回Unknown OS version
,而是。当我调试并悬停在 上时_WIN32_WINNT_WIN2K
,它实际上1280
是十进制格式。
_WIN32_WINNT_NT4
显示为1024
,因此"400"
永远不会匹配它。
如果我包括“0x0”:
ushort uniNum = Convert.ToUInt16("0x0" + version);
它给了我一个错误,即输入格式不正确。
我可能遗漏了一些简单的东西,但我在任何地方都找不到任何有用的东西。