C 實現獲取系統名稱

2021-09-23 13:25:06 字數 3538 閱讀 1868

專案中需要用到作業系統名及版本資訊:下面是用兩種方法實現的

一種是通過查詢登錄檔:

#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...