Thủ tục hoặc hàm nào xác định phiên bản của Windows vậy? (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

Hoàng Trọng Nghĩa

Chuyên gia GPE
Thành viên BQT
Moderator
Tham gia
17/8/08
Bài viết
8,662
Được thích
16,725
Giới tính
Nam
Tôi muốn biết máy đang sử dụng là WinXP hay Win7 hay Win nào đó thì dùng thủ tục hoặc hàm gì vậy các bạn?

Cám ơn rất nhiều.
 
Upvote 0
Upvote 0
Như anh đang xài Win7 thì sau khi chạy thủ tục trong Immediate:

?Application.OperatingSystem

Kết quả:

Windows (32-bit) NT 6.01

Anh cũng chả biết nó là Win nào nữa! hic hic.

Nó nè anh, anh biến tấu lại nhé:
Windows NT 5.0 = Windows 2000
Windows NT 5.1 = Windows XP (32-bit)
Windows NT 5.2 = Windows XP (64-bit), Windows Server 2003, Windows Home Server
Windows NT 6.0 = Windows Vista, Windows Server 2008
Windows NT 6.1 = Windows 7, Windows Server 2008 R2
 
Upvote 0
Như anh đang xài Win7 thì sau khi chạy thủ tục trong Immediate:

?Application.OperatingSystem

Kết quả:

Windows (32-bit) NT 6.01

Anh cũng chả biết nó là Win nào nữa! hic hic.

Anh thử:

Mã:
Sub Check_Windows_Version()
Dim oOSInfo As OSVERSIONINFO 
oOSInfo.dwOSVersionInfoSize = Len(oOSInfo)   GetVersionEx oOSInfo

MsgBox "Version of Current OS is " & oOSInfo.dwMajorVersion & "." & oOSInfo.dwMinorVersion  

End Sub

 
Upvote 0
Thật ra nó phải như sau:

Mã:
Private Type OSVERSIONINFO
        dwOSVersionInfoSize As Long
        dwMajorVersion As Long
        dwMinorVersion As Long
        dwBuildNumber As Long
        dwPlatformId As Long
        szCSDVersion As String * 128
    End Type
    
    Public Declare Function GetVersionExA Lib "kernel32" (lpVersionInformation As OSVERSIONINFO) As Integer
    Public Function getVersion() As String
        Dim osinfo As OSVERSIONINFO
        Dim retvalue As Integer

        osinfo.dwOSVersionInfoSize = 148
        osinfo.szCSDVersion = Space$(128)
        retvalue = GetVersionExA(osinfo)

        Select Case osinfo.dwMajorVersion + osinfo.dwMinorVersion / 10
            Case 5#
                getVersion = "Windows 2000"
            Case 5.1
                getVersion = "Windows XP (32-bit)"
            Case 5.2
                getVersion = "Windows XP (64-bit), 2003 Server, Home Server"
            Case 6#
                getVersion = "Windows Vista, 2008 Server"
            Case 6.1
                getVersion = "Windows 7, 2008 Server R2"
            Case Else
                getVersion = "Other version"
        End Select
    End Function

Test đoạn này

Mã:
Sub Test()
MsgBox getVersion

End Sub
 
Upvote 0
Upvote 0
Có khi người ta kiểm tra ở file nào đó khi chạy chứ ai mà chẳng biết xem trong đó bạn.

Đúng vậy đó, từ WinXP trở về trước thì thư mục Desktop nó có cấu trúc:

C:\Documents and Settings\TenNguoiDung\Desktop

Nhưng các phiên bản về sau nó có cấu trúc:

C:\Users\TenNguoiDung\Desktop

Do đó, Khi lưu tập tin vào Desktop phải lưu ý vấn đề phiên bản của nó mới dùng cho các version khác nhau một cách chính xác.
 
Upvote 0
Upvote 0
Đúng là các thành viên giỏi code thì mới nghiên cứu chứ tôi thì ko biết code, chỉ dùng cách trên vừa đơn giản, dễ dùng dễ biết các driver cần update.

Tôi ví dụ bạn muốn gọi hay lưu 1 file ở desktop nào đó = code, để cho nó chạy được với các phiên bản của win thì bạn phải làm sao?
 
Upvote 0
Upvote 0
Tôi đã nói là tôi hoàn toàn mù tịt, chưa biết 1 khái niệm gì về code nên KHÔNG THỂ BIẾT LÀM SAO!
Nếu vậy thì tranh cãi để làm gì hả bạn. Người ta dùng code thì để người ta dùng, mỗi người đều có mục đích riêng của họ mà.
 
Upvote 0
Thật ra nó phải như sau:

Mã:
Private Type OSVERSIONINFO
        dwOSVersionInfoSize As Long
        dwMajorVersion As Long
        dwMinorVersion As Long
        dwBuildNumber As Long
        dwPlatformId As Long
        szCSDVersion As String * 128
    End Type
    
    Public Declare Function GetVersionExA Lib "kernel32" (lpVersionInformation As OSVERSIONINFO) As Integer
    Public Function getVersion() As String
        Dim osinfo As OSVERSIONINFO
        Dim retvalue As Integer

        osinfo.dwOSVersionInfoSize = 148
        osinfo.szCSDVersion = Space$(128)
        retvalue = GetVersionExA(osinfo)

        Select Case osinfo.dwMajorVersion + osinfo.dwMinorVersion / 10
            Case 5#
                getVersion = "Windows 2000"
            Case 5.1
                getVersion = "Windows XP (32-bit)"
            Case 5.2
                getVersion = "Windows XP (64-bit), 2003 Server, Home Server"
            Case 6#
                getVersion = "Windows Vista, 2008 Server"
            Case 6.1
                getVersion = "Windows 7, 2008 Server R2"
            Case Else
                getVersion = "Other version"
        End Select
    End Function

Test đoạn này

Mã:
Sub Test()
MsgBox getVersion

End Sub
Ngắn gọn thế này cũng được vậy:
Mã:
Sub GetOSName()
  Dim Item
  On Error Resume Next
  With GetObject("Winmgmts:")
    For Each Item In .ExecQuery("SELECT * FROM Win32_OperatingSystem")
      MsgBox Item.Caption
    Next
  End With
End Sub
Cũng có thể dùng WMIC trong DOS: wmic os get caption
Câu lệnh màu đỏ ấy có thể "nhúng" vào VBA cũng lấy được tên HDH
(và còn cả đống lệnh khác, chẳng hạn là systeminfo)
 
Upvote 0

Bài viết mới nhất

Back
Top Bottom