青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

woaidongmao

文章均收錄自他人博客,但不喜標題前加-[轉貼],因其丑陋,見諒!~
隨筆 - 1469, 文章 - 0, 評論 - 661, 引用 - 0
數據加載中……

獲取Windwos的版本和名稱 -- GetVersion|GetVersionEx

·                                 http://flyxxtt.blogbus.com/logs/42705986.html

Windows API 中有兩個函數可以得到系統版本信息GetVersionGetVersionEx

      GetVersion這個函數曾經困擾了很多程序員,其本來設計的是在DWORD返回值中用低位的那個字表示MS-DOS的版本號,高位的那個字表示Windows版本號。對于每個字來說,高位字節代表主要版本號,低位字節代表次要版本號。可是因為編寫此函數的程序員犯了一個錯誤,使得此函數返回的Windows版本號顛倒了(即把主要版本號放到了低位字節,而次要版本號放到了高位字節)。當發現此錯誤的時候已經有很多程序員在使用這個函數了,Microsoft只好將錯就錯,直接把原來的API文檔給改了過來。

      為了解決GetVersion帶來的問題,Microsoft后來開發了一個新的函數GetVersionEx,用它能夠得到更詳細的Windows系統的版本信息,下面我就寫寫GetVersionEx的使用方法。

 

函數原型:

BOOL GetVersionEx(POSVERSIONINFO pVersionInformation);

我們先來看看OSVERSIONINFOEX這個結構:

typedef struct {

DWORD dwOSVersionInfoSize;       //在使用GetVersionEx之前要將此初始化為結構的大小

DWORD dwMajorVersion;               //系統主版本號

DWORD dwMinorVersion;               //系統次版本號

DWORD dwBuildNumber;               //系統構建號

DWORD dwPlatformId;                  //系統支持的平臺(詳見附1)

TCHAR szCSDVersion[128];          //系統補丁包的名稱

WORD wServicePackMajor;            //系統補丁包的主版本

WORD wServicePackMinor;            //系統補丁包的次版本

WORD wSuiteMask;                      //標識系統上的程序組(詳見附2)

BYTE wProductType;                    //標識系統類型(詳見附3)

BYTE wReserved;                         //保留,未使用

} OSVERSIONINFOEX, *POSVERSIONINFOEX;

這個結構在Windows 2000后出現,老版本的OSVERSIONINFO結構沒有wServicePackMajorwServicePackMinorwSuiteMaskwProductTypewReserved這幾個成員。

 

接著在調用函數之前先初始化結構的大小:

OSVERSIONINFOEX os;

os.dwOSVersionInfoSize=sizeof(os);

函數返回值為TRUE表示成功:

if(!GetVersionEx((OSVERSIONINFO *)&os))

{

      return FALSE;

}

函數調用成功以后就可以通過OSVERSIONINFOEX來查看系統的版本信息了。

 

下面是一個通過系統版本來判斷操作系統名稱的例子:

CString getSystemName()

{

    SYSTEM_INFO info;                                   //SYSTEM_INFO結構判斷64AMD處理器
    GetSystemInfo(&info);                               //
調用GetSystemInfo函數填充結構
    OSVERSIONINFOEX os;
    os.dwOSVersionInfoSize=sizeof(OSVERSIONINFOEX);  /*
在調用函數前必須用sizeof(OSVERSIONINFOEXA)填充dwOSVersionInfoSize結構成員*/
    if(GetVersionEx((OSVERSIONINFO *)&os))                  /*
調用GetVersionEx函數OSVERSIONINFOEX結構必須將指針類型強制轉換*/
    {
        CString vname;

        //下面根據版本信息判斷操作系統名稱

        switch(os.dwMajorVersion){                        //判斷主版本號
            case 4:
                switch(os.dwMinorVersion){                //
判斷次版本號
                    case 0:
                        if(os.dwPlatformId==VER_PLATFORM_WIN32_NT)
                            vname=_T("Microsoft Windows NT 4.0");                //1996
7月發布
                        else if(os.dwPlatformId==VER_PLATFORM_WIN32_WINDOWS)
                            vname=_T("Microsoft Windows 95");
                        break;
                    case 10:
                        vname=_T("Microsoft Windows 98");
                        break;
                    case 90:
                        vname=_T("Microsoft Windows Me");
                        break;
                }
                break;
            case 5:
                switch(os.dwMinorVersion){               //
再比較dwMinorVersion的值
                    case 0:
                        vname=_T("Microsoft Windows 2000");                    //1999
12月發布
                        break;
                    case 1:
                        vname=_T("Microsoft Windows XP");                    //2001
8月發布
                        break;
                    case 2:
                        if(os.wProductType==VER_NT_WORKSTATION && /

                           info.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64)

                            vname=_T("Microsoft Windows XP Professional x64 Edition");
                        else if(GetSystemMetrics(SM_SERVERR2)==0)
                            vname=_T("Microsoft Windows Server 2003");        //2003
3月發布
                        else if(GetSystemMetrics(SM_SERVERR2)!=0)
                            vname=_T("Microsoft Windows Server 2003 R2");
                        break;
                }
                break;
            case 6:
                switch(os.dwMinorVersion){
                    case 0:
                        if(os.wProductType==VER_NT_WORKSTATION)/*

                        VER_NT_WORKSTATION是桌面系統 */
                            vname=_T("Microsoft Windows Vista");
                        else
                            vname=_T("Microsoft Windows Server 2008");          //
服務器版本
                        break;
                    case 1:
                        if(os.wProductType==VER_NT_WORKSTATION)
                            vname=_T("Microsoft Windows 7");
                        else
                            vname=_T("Microsoft Windows Server 2008 R2");
                        break;
                }
                break;
            default:
                vname=_T("
未知操作系統");
        }
        return vname;
    }
    else
        return _T("");

}

以上只能判斷操作系統的名稱,那如何判斷它是什么版本的呢(Home版或Professional)

下面這個函數就返回具體的版本名稱

CString getVersionMark()

{

    OSVERSIONINFOEX os;
    os.dwOSVersionInfoSize=sizeof(OSVERSIONINFOEX);
    if(GetVersionEx((OSVERSIONINFO *)&os)){
        CString vmark;

        switch(os.dwMajorVersion){                //先判斷操作系統版本
            case 5:
                switch(os.dwMinorVersion){
                    case 0:                  //Windows 2000
                        if(os.wSuiteMask==VER_SUITE_ENTERPRISE)
                            vmark=_T("Advanced Server");
                        break;
                    case 1:                  //Windows XP
                        if(os.wSuiteMask==VER_SUITE_EMBEDDEDNT)
                            vmark=_T("Embedded");
                        else if(os.wSuiteMask==VER_SUITE_PERSONAL)
                            vmark=_T("Home Edition");
                        else
                            vmark=_T("Professional");
                        break;
                    case 2:
                        if(GetSystemMetrics(SM_SERVERR2)==0 && /

                        os.wSuiteMask==VER_SUITE_BLADE)  //Windows Server 2003
                            vmark=_T("Web Edition");
                        else if(GetSystemMetrics(SM_SERVERR2)==0 && /

                        os.wSuiteMask==VER_SUITE_COMPUTE_SERVER)
                            vmark=_T("Compute Cluster Edition");
                        else if(GetSystemMetrics(SM_SERVERR2)==0 && /

                        os.wSuiteMask==VER_SUITE_STORAGE_SERVER)
                            vmark=_T("Storage Server");
                        else if(GetSystemMetrics(SM_SERVERR2)==0 && /

                        os.wSuiteMask==VER_SUITE_DATACENTER)
                            vmark=_T("Datacenter Edition");
                        else if(GetSystemMetrics(SM_SERVERR2)==0 && /

                        os.wSuiteMask==VER_SUITE_ENTERPRISE)
                            vmark=_T("Enterprise Edition");
                        else if(GetSystemMetrics(SM_SERVERR2)!=0 &&  /

                           os.wSuiteMask==VER_SUITE_STORAGE_SERVER)  /*

                           Windows Server 2003 R2*/

                            vmark=_T("Storage Server");
                        break;
                }
                break;
            case 6:
                switch(os.dwMinorVersion){
                    case 0:
                        if(os.wProductType!=VER_NT_WORKSTATION && /

                        os.wSuiteMask==VER_SUITE_DATACENTER)  /*

                        Windows Server 2008*/
                            vmark=_T("Datacenter Server");
                        else if(os.wProductType!=VER_NT_WORKSTATION &&  /

                        os.wSuiteMask==VER_SUITE_ENTERPRISE)
                            vmark=_T("Enterprise");
                        else if(os.wProductType==VER_NT_WORKSTATION && /

                           os.wSuiteMask==VER_SUITE_PERSONAL)  //Windows Vista

                            vmark=_T("Home");
                        break;
                }
                break;
            default:
                vmark=_T("");
        }
        return vmark;
    }
    else
        return _T("");

}

另外,操作系統的補丁包名稱也可以從szCSDVersion直接獲取。

程序編譯出來后大家可以用不同版本的兼容模式運行這個程序,來檢測結果是不是正確,兼容模式會欺騙GetVersionEx這些API函數,拿Windows 98 兼容模式來說,程序會以為自己是在Windows 98 上運行。

有什么問題請給我留言,如果在本頁面下發沒有看到有留言請刷新一下頁面。

 

1dwPlatformId的值:

VER_PLATFORM_WIN32s (Win32s),

VER_PLATFORM_WIN32_WINDOWS (Windows 95/Windows 98),

VER_PLATFORM_WIN32_NT (Windows NT/Windows 2000),

VER_PLATFORM_WIN32_CEHH (Windows CE).

2wSuiteMask的值:

VER_SUITE_SMALLBUSINESS,

VER_SUITE_ENTERPRISE,

VER_SUITE_BACKOFFICE,

VER_SUITE_COMMUNICATIONS,

VER_SUITE_TERMINAL,

VER_SUITE_SMALLBUSINESS_RESTRICTED,

VER_SUITE_EMBEDDEDNT,

VER_SUITE_DATACENTER.

3wProductType的值:

VER_NT_WORKSTATION,

VER_NT_SERVER,

VER_NT_DOMAIN_CONTROLLER.

 

 

posted on 2011-07-23 00:01 肥仔 閱讀(1866) 評論(0)  編輯 收藏 引用 所屬分類: Windows開發

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美激情国产精品| 国产中文一区二区| 亚洲欧美日韩综合国产aⅴ| 亚洲成色777777在线观看影院| 亚洲欧美日本国产专区一区| 一区二区免费在线观看| 在线一区免费观看| 亚洲永久免费av| 欧美一级免费视频| 久久国产88| 免费成人av| 亚洲国内自拍| 亚洲欧美激情一区二区| 久久av红桃一区二区小说| 久久久久九九视频| 欧美成在线观看| 欧美性猛交xxxx乱大交蜜桃| 国产精品一卡| 最新日韩精品| 欧美一区二区三区四区高清| 麻豆精品视频在线观看视频| 亚洲精品综合久久中文字幕| 亚洲自拍偷拍麻豆| 快射av在线播放一区| 欧美日韩亚洲一区二区三区| 国产亚洲美州欧州综合国| 亚洲级视频在线观看免费1级| 亚洲影院高清在线| 噜噜噜躁狠狠躁狠狠精品视频 | 国产精品一国产精品k频道56| 欧美美女操人视频| 激情校园亚洲| 欧美日韩国产探花| 国产视频久久| 99国产精品视频免费观看一公开 | 欧美天堂亚洲电影院在线观看 | 欧美成人亚洲| 亚洲一区三区视频在线观看| 欧美成ee人免费视频| 国产视频久久久久久久| 日韩视频免费| 免费视频一区| 欧美一区二区三区在线视频| 欧美日韩国产欧美日美国产精品| 国内精品国产成人| 亚洲欧美日韩精品久久亚洲区| 欧美激情国产高清| 久久精品中文字幕一区二区三区| 欧美午夜不卡| 宅男精品视频| 亚洲国产三级网| 久久视频一区二区| 国产一区二区成人久久免费影院| 亚洲手机成人高清视频| 亚洲电影免费在线| 久久精品国产精品亚洲| 国产精品视频一二三| 亚洲一区二区免费在线| 久久久久免费| 午夜在线视频观看日韩17c| 欧美日韩成人综合天天影院| 亚洲毛片av在线| 亚洲国产成人高清精品| 麻豆av福利av久久av| 亚洲高清在线播放| 免费看的黄色欧美网站| 久久综合导航| 亚洲黄色成人| 亚洲国产精品小视频| 久久尤物电影视频在线观看| 一区在线影院| 欧美激情一区二区久久久| 男人的天堂成人在线| 最近中文字幕mv在线一区二区三区四区| 免费在线观看精品| 久久人人看视频| 亚洲高清影视| 亚洲精选成人| 国产精品亚洲综合久久| 久久福利精品| 久久裸体视频| 日韩亚洲在线| 亚洲视频一二三| 国产网站欧美日韩免费精品在线观看 | 国产一区二区三区四区| 久久久精品国产免费观看同学| 久久精品国产亚洲一区二区| 在线观看视频一区二区| 亚洲激情视频网站| 国产精品久久久91| 久久精品免费播放| 免费欧美高清视频| 亚洲欧美日本视频在线观看| 久久国产天堂福利天堂| 亚洲精品在线电影| 亚洲免费在线| 亚洲精品综合| 欧美一级大片在线观看| 91久久综合亚洲鲁鲁五月天| 亚洲欧美视频一区| 葵司免费一区二区三区四区五区| 麻豆视频一区二区| 亚洲一区二区伦理| 久久视频在线看| 午夜视频在线观看一区| 噜噜噜91成人网| 午夜视频在线观看一区二区| 免费成人黄色片| 久久精品国产一区二区三区免费看 | 99国产麻豆精品| 午夜一区二区三视频在线观看| 亚洲精品美女| 久久狠狠亚洲综合| 亚洲午夜精品网| 免费久久99精品国产自| 欧美一区二区三区视频在线| 欧美精品啪啪| 久久人人爽爽爽人久久久| 欧美日韩一区二区在线播放| 欧美成人精品高清在线播放| 国产日韩欧美一二三区| 中文精品一区二区三区 | 欧美日韩免费精品| 欧美gay视频激情| 狠狠干成人综合网| 亚洲天堂网在线观看| 亚洲看片免费| 美女视频黄a大片欧美| 久久久久国产精品午夜一区| 国产精品你懂的| 一区二区三区国产在线| 99视频精品免费观看| 蜜臀99久久精品久久久久久软件 | 国内成人在线| 午夜一区二区三区不卡视频| 亚洲欧美大片| 国产精品第2页| 欧美国产亚洲精品久久久8v| 欧美一区亚洲二区| 亚洲欧美成人一区二区三区| 中国av一区| 欧美精品成人一区二区在线观看 | 日韩视频在线一区二区| 亚洲人成毛片在线播放女女| 久久精品人人做人人爽| 久久午夜av| 亚洲国产精品电影在线观看| 另类国产ts人妖高潮视频| 玖玖视频精品| 亚洲成色精品| 免费日韩av| 91久久精品国产91久久性色| 亚洲精品国产精品国自产在线| 欧美精品一区二区三区很污很色的 | 欧美福利在线观看| 亚洲国产精品久久91精品| 亚洲精品在线三区| 欧美日韩国产成人精品| 亚洲美女色禁图| 欧美一区二区三区免费视频| 国产专区综合网| 蜜桃久久精品乱码一区二区| 亚洲欧美在线视频观看| 国产一区久久久| 久久亚洲精品视频| 亚洲精品欧洲| 欧美一级在线亚洲天堂| 精品99一区二区| 欧美精品一区在线播放| 亚洲欧美激情视频| 免费一级欧美在线大片| 中文精品在线| 激情伊人五月天久久综合| 欧美国产三级| 亚洲欧美综合v| 亚洲国产欧美国产综合一区| 亚洲一区二区三区四区五区黄| 国产日韩精品一区二区浪潮av| 久久精品国产清高在天天线 | 香港成人在线视频| 亚洲第一天堂av| 西瓜成人精品人成网站| 亚洲国产精品成人一区二区| 国产精品国产福利国产秒拍| 久久久免费精品| 中文亚洲视频在线| 女人色偷偷aa久久天堂| 亚洲一区二区三区四区在线观看| 激情婷婷亚洲| 国产视频一区在线观看| 欧美日韩在线观看一区二区三区| 美女91精品| 久久久久久久高潮| 欧美一区二区日韩| 99精品99| 亚洲美女尤物影院| 亚洲破处大片| 欧美激情亚洲精品| 蜜桃伊人久久| 久久欧美肥婆一二区|