C/C++ Windows API——獲取計算機信息 轉


函數 頭文件 作用
GetVersionEx <windows.h> 獲取系統版本信息(deprecated)
VerifyVersionInfo <VersionHelpers.h> 判斷當前系統信息是否符合條件
GetComputerName <windows.h> 獲取計算機名稱
GetUserName <windows.h> 獲取用戶名
memset <windows.h> 對結構體或數組進行清零操作,跨平台
ZeroMemory <windows.h> 對結構體或數組進行清零操作,僅適用於Windows
={0}   是結構體和數組的一種初始化方式,它是將結構體中基本類型變量賦默認值,當結構體中有非基本類型(例如類對象)時,會編譯錯誤,這也是一種保護。
LOBYTE   取1個字節(byte)的低4位
HIBYTE   取1個字節(byte)的高4位
LOWORD   取2個字節(short)的低8位
HIWORD   取2個字節(short)的高8位
// ComputerInfo.cpp : 定義控制台應用程序的入口點。 // #include "stdafx.h" #include <windows.h>//GetComputerName,GetUserName #include <VersionHelpers.h>//IsWindows7OrGreater, IsWindows10OrGreater int main() { BOOL ret; /* typedef struct { DWORD dwOSVersionInfoSize; //在使用GetVersionEx之前要將此初始化為結構的大小 DWORD dwMajorVersion; //系統主版本號 DWORD dwMinorVersion; //系統次版本號 DWORD dwBuildNumber; //系統構建號 DWORD dwPlatformId; //系統支持的平台 TCHAR szCSDVersion[128]; //系統補丁包的名稱 WORD wServicePackMajor; //系統補丁包的主版本 WORD wServicePackMinor; //系統補丁包的次版本 WORD wSuiteMask; //標識系統上的程序組 BYTE wProductType; //標識系統類型 BYTE wReserved; //保留,未使用 } OSVERSIONINFOEX, *POSVERSIONINFOEX; //Compile Error: GetVersionEx‘ declared deprecated BOOL GetVersionEx(POSVERSIONINFO pVersionInformation); return 如果函數成功,返回值是一個非零值。 */ /* https://msdn.microsoft.com/en-us/ms724833(v=vs.85) typedef struct _OSVERSIONINFOEX { DWORD dwOSVersionInfoSize; DWORD dwMajorVersion; DWORD dwMinorVersion; DWORD dwBuildNumber; DWORD dwPlatformId; TCHAR szCSDVersion[128]; WORD wServicePackMajor; WORD wServicePackMinor; WORD wSuiteMask; BYTE wProductType; BYTE wReserved; } OSVERSIONINFOEX, *POSVERSIONINFOEX, *LPOSVERSIONINFOEX; BOOL WINAPI VerifyVersionInfo( _In_ LPOSVERSIONINFOEX lpVersionInfo, //HIBYTE(_WIN32_WINNT_WIN7) _In_ DWORD dwTypeMask, _In_ DWORDLONG dwlConditionMask //VER_SET_CONDITION 可以是 VER_GREATER,VERSION_EQU,VERSION_LESS ); */ OSVERSIONINFOEX versionInfo; //Initialize the OSVERSIONINFOEX structure. ZeroMemory(&versionInfo, sizeof(versionInfo)); versionInfo.dwMajorVersion = HIBYTE(_WIN32_WINNT_WIN7); DWORD dwTypeMask = VER_MAJORVERSION; DWORDLONG dwlConditionMask = 0; VER_SET_CONDITION(dwlConditionMask, VER_MAJORVERSION, VER_GREATER); ret = VerifyVersionInfo(&versionInfo, dwTypeMask, dwlConditionMask); printf("VerifyVersionInfo %d -> %d\n", versionInfo.dwMajorVersion, ret); ret = IsWindowsServer(); printf("IsWindowsServer -> %d\n", ret); ret = IsWindows7OrGreater(); printf("IsWindows7OrGreater -> %d\n", ret); TCHAR szComputerName[MAX_COMPUTERNAME_LENGTH + 1]; DWORD len = MAX_COMPUTERNAME_LENGTH + 1; /* BOOL WINAPI GetComputerName( __out LPTSTR lpBuffer, //指向一塊內存緩沖區,這個緩沖區用於接收計算機名稱或群集的虛擬服務器名稱。緩沖區的大小應該足夠大,以便能夠容納MAX_COMPUTERNAME_LENGTH + 1個字符。 __inout LPDWORD lpnSize //在輸入時,指定的緩沖區的大小,這個大小是按照TCHAR計算的;在輸出的時候,字符的長度不包括終止空字符\0。 ); return 如果函數成功,返回值是一個非零值。 */ ret = GetComputerName(szComputerName, &len); if (!ret) { printf("GetComputerName fail(%ld)\n", GetLastError()); } else { wprintf(L"GetComputerName -> %s, len=%d\n", szComputerName, len); } /* BOOL WINAPI GetComputerName( __out LPTSTR lpBuffer, __in_out LPDWORD lpnSize ); */ ret = GetUserName(szComputerName, &len); if (!ret) { printf("GetUserName fail(%ld)\n", GetLastError()); } else { wprintf(L"GetUserName -> %s, len=%d\n", szComputerName, len); } system("pause"); return 0; }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM