2010-01-20 16 views
9

Làm việc trên một dự án và cần có khả năng xác định xem O/S là Windows 7, Vista hay mặc định là XP. Tôi hiểu rằng tôi có thể chạy vào Win2K và các phiên bản trước đó, nhưng chúng ta hãy chỉ nói rằng đó không phải là một mối quan tâm như mã khác sẽ bắt rằng trước khi nó được đến thời điểm này. Ứng dụng của tôi sẽ có trong C++ trong thời gian sử dụng VS2005. Tôi đã tìm thấy các bài báo và mã mẫu giống nhau nhưng chúng dường như cồng kềnh cho việc sử dụng của tôi. Chỉ cần tìm kiếm một sự trở lại nhanh chóng và bẩn thỉu.Xác định nếu O/S là Windows 7

http://msdn.microsoft.com/en-us/library/ms724358%28VS.85%29.aspx

Trả lời

18

Danh sách Windows Version, sử dụng GetVersionEx:

Version Number Description 
6.1    Windows 7 /Windows 2008 R2 
6.0    Windows Vista/Windows 2008 
5.2    Windows 2003 
5.1    Windows XP 
5.0    Windows 2000 
+0

Thật không may điều này không phân biệt được giữa các nền tảng Máy trạm và Máy chủ gần đây. Xem: http://www.codeproject.com/script/Articles/ViewDownloads.aspx?aid=10476 –

+0

Xem thêm http://en.wikipedia.org/wiki/List_of_Microsoft_Windows_versions để biết danh sách cập nhật. Bạn cũng có thể kiểm tra osvi.wProductType == VER_NT_WORKSTATION cho các phiên bản "bình thường" so với "Máy chủ" của Windows: tức là 6.1 là Windows 7 (đúng) hoặc Windows Server 2008 R2 (sai). – ddevienne

18

Nói chung, bạn không muốn được thử nghiệm chống lại một số phiên bản cụ thể, nhưng thay vì kiểm tra cho một tính năng đặc biệt. Nếu bạn thực sự muốn phát hiện "Windows 7 trở lên", tuy nhiên ...

#include <windows.h> 

bool IsWin7OrLater() { 
    DWORD version = GetVersion(); 
    DWORD major = (DWORD) (LOBYTE(LOWORD(version))); 
    DWORD minor = (DWORD) (HIBYTE(LOWORD(version))); 

    return (major > 6) || ((major == 6) && (minor >= 1)); 
} 

Năm 2000, so sánh lớn và nhỏ so với 5 và 0 tương ứng. Đối với XP, so sánh với 5 và 1. Đối với Vista, 6 và 0.

3

Windows 8.1 SDK 1) giới thiệu một số Version Helper functions, giúp xác định phiên bản của hệ điều hành một ứng dụng đang chạy trên:

#include <VersionHelpers.h> 

... 

    if (IsWindows7OrGreater()) { 
     // Windows 7 or above 
    } else if (IsWindowsVistaOrGreater()) { 
     // Windows Vista 
    } else if (IsWindowsXPOrGreater()) { 
     // Windows XP 
    } else { 
     // Unsupported version of Windows 
    } 

Nếu bạn cần phân biệt giữa các phiên bản máy khách và máy chủ của Windows, bạn có thể gọi IsWindowsServer.


1) Windows 8.1 SDK có thể được sử dụng để xây dựng các ứng dụng cho tất cả các phiên bản hỗ trợ của Windows.

Các vấn đề liên quan