怎么写代码 来识别操作系统的本版
用什么函数或者代码
识别操作系统的版本是 XP sp1还是 XP sp2 或者 是98的
有没有这样的语句啊
[解决办法]
XP sp1还是 XP sp2 ,没有相关资料
Private Type OSVERSIONINFO
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long
szCSDVersion As String * 128
End Type
Private Declare Function GetVersionEx Lib "kernel32 " Alias "GetVersionExA " _
(LpVersionInformation As OSVERSIONINFO) As Long
Private Sub Command1_Click()
Dim verinfo As OSVERSIONINFO
Dim msg
verinfo.dwOSVersionInfoSize = Len(verinfo)
GetVersionEx verinfo
Select Case verinfo.dwPlatformId
Case 0
msg = msg & "Windows 32s "
Case 1
msg = msg & "Windows 95 "
Case 2
msg = msg & "Windows NT "
Case Else
msg = verinfo.dwPlatformId
End Select
Debug.Print msg
End Sub
[解决办法]
GetVersionEx可以得到当前操作系统版本,可以参考微软http://support.microsoft.com/kb/189249/zh-cn
XP2p这个查注册表就是
干脆全部查注册表:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion]
"ProductName "= "Microsoft Windows XP "
"CSDVersion "= "Service Pack 2 "
[解决办法]
要判断是什么系统,主要是看
dwMajorVersion dwMinorVersion dwBuildNumber
这3个成员
win98 是 4.x
win 2000 是 5.0
xp 是 5.1
2003 是 5.2
vista 是 6.0
一种系统不同 build 和 sp 之间的 dwBuildNumber 和 szCSDVersion 也不一样
[解决办法]
如果是sp2
你的GetVersionEx 得到的OSVERSIONINFO.szCSDVersion 就会是 "Service Pack 2 "
[解决办法]
Private Type OSVERSIONINFO
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long
szCSDVersion As String * 128
End Type
Private Declare Function GetVersionEx Lib "kernel32 " Alias "GetVersionExA " _
(LpVersionInformation As OSVERSIONINFO) As Long
Private Sub Command1_Click()
Dim verinfo As OSVERSIONINFO
Dim msg
verinfo.dwOSVersionInfoSize = Len(verinfo)
GetVersionEx verinfo
Select Case verinfo.dwMajorVersion
Case 4
'这里都是win98或者以前的版本,我想你应该不会关心他们了
Case 5 'win 2000/xp/2003
if verinfo.dwMinorVersion = 0 then
'windows v5.0 这是win 2000
end if
if verinfo.dwMinorVersion = 1 then
'windows v5.1 这是win xp
end if
if verinfo.dwMinorVersion = 2 then
'windows v5.2 这是win 2003
end if
Case 6
msg = msg & "Windows NT "
End Select
Debug.Print msg
End Sub
[解决办法]
有个地方有点小问题
Case 6
msg = msg & "Windows Vista "
[解决办法]
楼上正解:
Public Declare Function GetVersionExA Lib "kernel32 " ( _
lpVersionInformation As OSVERSIONINFO _
) As Integer
Public Type OSVERSIONINFO
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long
szCSDVersion As String * 128
End Type
Public Function getVersion() As String
Dim osinfo As OSVERSIONINFO
Dim retvalue As Integer
osinfo.dwOSVersionInfoSize = 148
osinfo.szCSDVersion = Space$(128)
retvalue = GetVersionExA(osinfo)
With osinfo
Select Case .dwPlatformId
Case 1
Select Case .dwMinorVersion
Case 0
getVersion = "Windows 95 "
Case 10
getVersion = "Windows 98 "
Case 90
getVersion = "Windows Millennium "
End Select
Case 2
Select Case .dwMajorVersion
Case 3
getVersion = "Windows NT 3.51 "
Case 4
getVersion = "Windows NT 4.0 "
Case 5
If .dwMinorVersion = 0 Then
getVersion = "Windows 2000 "
Else
getVersion = "Windows XP "
End If
End Select
Case Else
getVersion = "Failed "
End Select
getVersion = getVersion & " " & .szCSDVersion
End With
End Function
[解决办法]
VirtualDesktop(^_^ Blog 又更新了) 已经说了很清楚了,.szCSDVersion 返回你所要的信息,而且我的示例中已经加上了这个信息:getVersion = getVersion & " " & .szCSDVersion,你测试一下不就行了吗?.......
[解决办法]
你仔细看看示例,getVersion是个函数。你只要把上面的代码复制到一个模块中,窗体中加上如下代码:
Private Sub Form_Load()
MsgBox getVersion
End Sub
[解决办法]
要下面这个?
dim s
s=trim(getVersion) 'getVersion返回的是一个string,包含空格等,所以要处理一下
s=replace(s,chr(0),vbnullstring)
if s= "Windows XP Service Pack 1 " then
'这是xp sp1
elseif s= "Windows XP Service Pack 2 " then
'这是 xp sp2
end if
[解决办法]
不是
dim s
s=replace(s,chr(0),vbnullstring) 'getVersion返回的是一个string,包含空格等,所以要处理一下
s=trim(getVersion)
if s= "Windows XP Service Pack 1 " then
'这是xp sp1
elseif s= "Windows XP Service Pack 2 " then
'这是 xp sp2
end if
这个可以放在窗体按钮单击事件中
其它是个函数,放在模块中
[解决办法]
看来你基础不够扎实,最好看看书吧?
许多东西不是一层不变的,要根据实际情况灵活应用的
[解决办法]
学习
[解决办法]
try:
Private Sub Command1_Click()
Dim s
s = Trim(getVersion)
s = Replace(s, Chr(0), vbNullString)
If s = "Windows XP Service Pack 1 " Then
Text1 = "1 "
If s = "Windows XP Service Pack 2 " Then
Text1 = "2 "
End If
End Sub