專案中需要用到作業系統名及版本資訊:下面是用兩種方法實現的
一種是通過查詢登錄檔:
#include "stdafx.h"
#include #include #include #include #include #include "registrycontrol.h"
using namespace std;
#pragma warning(disable:4996)
#define sys_info_path1 (l"software\\microsoft\\windows nt\\currentversion")
bool systemnameinfo(wchar_t *wzsystemname,int size)
; dword dwbuffsize = sizeof(wzproduct);
if (!reg.getstrin**alue(l"productname", wzproduct, &dwbuffsize))
reg.closekey();
stringcchcopy(wzsystemname,size,l"microsoft ");
stringcchcat(wzsystemname,size,wzproduct);
stringcchcat(wzsystemname,size,l" ");
if (iswow64())
else }
int _tmain(int argc, _tchar* ar**)
方法二:
通過getversionex和rtlgetntversionnumbers 查詢系統主次版本號,根據系統版本號返回相應的系統名稱:
#include "stdafx.h"
#include #include #include #include #include #include "registrycontrol.h"
using namespace std;
#pragma warning(disable:4996)
#define sm_serverr2 89
#define winversion_2012 4026541440 //microsoft windows server 2012 r2 的buildnumber號
#define winversion_10 4026546233 //microsoft windows 10 的buildnumber號
#define winversion_10_1 4026548974
typedef void (winapi *pgnsi) (lpsystem_info);
typedef bool (winapi *pgpi)(dword,dword,dword,dword,pdword);
typedef bool (winapi *lpfn_iswow64process)(handle, pbool);
#define bufsize 256
void getversiontype(uint utype,wstring & versiontype)
; switch( utype )
versiontype = pszos;
}bool iswow64() //判斷是否是64位系統
return biswow64;
}bool getsystemname(wchar_t *buf, int bufsize)
pgnsi = (pgnsi) getprocaddress(getmodulehandle(text("kernel32.dll")), "getnativesysteminfo");
if(null != pgnsi)
pgnsi(&si);
else
getsysteminfo(&si);
stringcchcopy(buf, bufsize, text("microsoft "));
if (dwmajor >= 6)
else
getversiontype(dwtype, wstrversiontype);
stringcchcat(buf,bufsize,wstrversiontype.c_str());
if (iswow64())
stringcchcat(buf, bufsize,text("x64"));
else
stringcchcat(buf, bufsize,text("x86"));
//return vname.c_str();
return true;
} if (dwmajor == 10 && dwminor == 0) //win 10
if (osvi.dwmajorversion == 6)
break;
case 1:
break;
case 2:
break;
}getversiontype(dwtype, wstrversiontype);
stringcchcat(buf,bufsize,wstrversiontype.c_str());
if (iswow64())
stringcchcat(buf, bufsize,text("x64"));
else
stringcchcat(buf, bufsize,text("x86"));
return true;
} }else
else
else if( osvi.wsuitemask & ver_suite_enterprise )
else
}if (iswow64())
stringcchcat(buf, bufsize,text("x64"));
else
stringcchcat(buf, bufsize,text("x86"));
}break;
case 1:
break;
case 2:
else
stringcchcat(buf, bufsize, text("windows server 2003 "));
// test for the server type.
if ( osvi.wproducttype != ver_nt_workstation )
else if ( si.wprocessorarchitecture==processor_architecture_amd64 )
else
}break;}}
break;
case 4:
switch (osvi.dwminorversion)
break;
default:
stringcchcat(buf, bufsize, text("unknown os"));
break;
} }
} return true;
}int _tmain(int argc, _tchar* ar**)
C 獲取xml屬性名稱
工作需要,讀取乙個超大量的xml檔案,從xml檔案中,讀取節點,以及節點下的屬性名稱,用屬性名稱進行建表操作。在網上查詢資料未果,於是自己尋找辦法。在xmlelement類下有乙個屬性是attributes,返回值為xmlattributecollection,節點element的屬性儲存在xmla...
如何獲取C 物件的名稱
最近在寫乙個有關活 的演算法,需要通過活 中的乙個節點,得出活 的所有開始節點。為了驗證演算法的正確性,想要在遍歷到每個節點時把節點的物件輸出來,當然可以為節點物件設定乙個成員,在構造的時候不同的物件傳入不同的值,比如 nodeclass node1 node1 可是覺得每次要把那個名字再敲一遍,有...
獲取串列埠名稱的方法(C )
需要使用到的命名空間 using system.io.ports using microsoft.win32 registrykey 類 官網的介紹 下面是獲取串列埠名稱的方法 void checkserialport if cbportone.items.count 0 需要使用到的命名空間 us...