VC++获取计算机Hardware Information (CPU ID, MainBoard Info, Hard Disk Serial, System Information)

转载:http://blog.csdn.net/yapingxin/article/details/50107799

转载:http://zhidao.baidu.com/link?url=A5K6NgF4pXAX2hp_NYCd97OEdHTBFlATxWb40HLv2XEbVjv2-LNNnBN1pheP51C_Rs0XYLAWSjySEfRWePKPW_

参考文章:http://www.codeproject.com/Articles/17973/How-To-Get-Hardware-Information-CPU-ID-MainBoard-I

1.计算机名称

 1 //计算机名称
 2 void DisplayComputerNameEx()
 3 {
 4     TCHAR scComputerName[MAX_COMPUTERNAME_LENGTH*2 + 1];
 5     DWORD lnNameLength = MAX_COMPUTERNAME_LENGTH*2;
 6
 7     GetComputerNameEx(ComputerNameNetBIOS, scComputerName, &lnNameLength);
 8
 9     _tprintf( _T("Computer name: %s\n"), scComputerName);
10 }

2.获取当前用户名(当前登录用户名)

 1 CString GetCurrentUserName()
 2 {
 3     CString strUserName;
 4
 5     LPTSTR szBuffer=new wchar_t[300];
 6     DWORD dwSize=300;
 7     GetUserName(szBuffer,&dwSize);
 8     strUserName=szBuffer;
 9
10     delete szBuffer;
11
12     return strUserName;
13 }

3.处理器个数

1 //处理器个数
2 void DisplayProcessorCount()
3 {
4     SYSTEM_INFO sysInfo;
5     GetSystemInfo(&sysInfo);
6
7     _tprintf( _T("Number of processors: %d \n"), sysInfo.dwNumberOfProcessors);
8 }

4.CPU  ID

  1 //处理器ID
  2 CString GetCPUID()
  3 {
  4
  5     CString CPUID;
  6
  7     unsigned long s1,s2;
  8
  9     unsigned char vendor_id[]="------------";
 10
 11     char sel;
 12
 13     sel=‘1‘;
 14
 15     CString VernderID;
 16
 17     CString MyCpuID,CPUID1,CPUID2;
 18
 19     switch(sel)
 20
 21     {
 22
 23     case ‘1‘:
 24
 25         __asm{
 26
 27             xor eax,eax//eax=0:取Vendor信息
 28
 29                 cpuid//取cpu id指令,可在Ring3级使用
 30
 31                 mov dword ptr vendor_id,ebx
 32
 33                 mov dword ptr vendor_id[+4],edx
 34
 35                 mov dword ptr vendor_id[+8],ecx
 36
 37         }
 38
 39         VernderID.Format(_T("%s-"),vendor_id);
 40
 41         __asm{
 42
 43             mov eax,01h//eax=1:取CPU序列号
 44
 45                 xor edx,edx
 46
 47                 cpuid
 48
 49                 mov s1,edx
 50
 51                 mov s2,eax
 52
 53         }
 54
 55         CPUID1.Format(_T("%08X%08X"),s1,s2);
 56
 57         __asm{
 58
 59             mov eax,03h
 60
 61                 xor ecx,ecx
 62
 63                 xor edx,edx
 64
 65                 cpuid
 66
 67                 mov s1,edx
 68
 69                 mov s2,ecx
 70
 71         }
 72
 73         CPUID2.Format(_T("%08X%08X"),s1,s2);
 74
 75         break;
 76
 77     case ‘2‘:
 78
 79         {
 80
 81             __asm{
 82
 83                 mov ecx,119h
 84
 85                     rdmsr
 86
 87                     or eax,00200000h
 88
 89                     wrmsr
 90
 91             }
 92
 93         }
 94
 95
 96         MessageBox(NULL,_T("CPU id is disabled."),_T("help"),MB_OK);
 97
 98         break;
 99
100     }
101
102     MyCpuID = CPUID1+CPUID2;
103
104     CPUID = MyCpuID;
105
106     return CPUID;
107
108 }

5.硬盘ID

  1 #define _WIN32_DCOM
  2 #include <iostream>
  3 using namespace std;
  4 #include <comdef.h>
  5 #include <Wbemidl.h>
  6
  7 #pragma comment(lib, "wbemuuid.lib")
  8
  9 int main(int argc, char **argv)
 10 {
 11     HRESULT hres;
 12
 13     // Step 1: --------------------------------------------------
 14     // Initialize COM. ------------------------------------------
 15
 16     hres =  CoInitializeEx(0, COINIT_MULTITHREADED);
 17     if (FAILED(hres))
 18     {
 19         cout << "Failed to initialize COM library. Error code = 0x"
 20             << hex << hres << endl;
 21         return 1;                  // Program has failed.
 22     }
 23
 24     // Step 2: --------------------------------------------------
 25     // Set general COM security levels --------------------------
 26     // Note: If you are using Windows 2000, you need to specify -
 27     // the default authentication credentials for a user by using
 28     // a SOLE_AUTHENTICATION_LIST structure in the pAuthList ----
 29     // parameter of CoInitializeSecurity ------------------------
 30
 31     hres =  CoInitializeSecurity(
 32         NULL,
 33         -1,                          // COM authentication
 34         NULL,                        // Authentication services
 35         NULL,                        // Reserved
 36         RPC_C_AUTHN_LEVEL_DEFAULT,   // Default authentication
 37         RPC_C_IMP_LEVEL_IMPERSONATE, // Default Impersonation
 38         NULL,                        // Authentication info
 39         EOAC_NONE,                   // Additional capabilities
 40         NULL                         // Reserved
 41         );
 42
 43     if (FAILED(hres))
 44     {
 45         cout << "Failed to initialize security. Error code = 0x"
 46             << hex << hres << endl;
 47         CoUninitialize();
 48         return 1;                    // Program has failed.
 49     }
 50
 51     // Step 3: ---------------------------------------------------
 52     // Obtain the initial locator to WMI -------------------------
 53
 54     IWbemLocator *pLoc = NULL;
 55
 56     hres = CoCreateInstance(
 57         CLSID_WbemLocator,
 58         0,
 59         CLSCTX_INPROC_SERVER,
 60         IID_IWbemLocator, (LPVOID *) &pLoc);
 61
 62     if (FAILED(hres))
 63     {
 64         cout << "Failed to create IWbemLocator object."
 65             << " Err code = 0x"
 66             << hex << hres << endl;
 67         CoUninitialize();
 68         return 1;                 // Program has failed.
 69     }
 70
 71     // Step 4: -----------------------------------------------------
 72     // Connect to WMI through the IWbemLocator::ConnectServer method
 73
 74     IWbemServices *pSvc = NULL;
 75
 76     // Connect to the root\cimv2 namespace with
 77     // the current user and obtain pointer pSvc
 78     // to make IWbemServices calls.
 79     hres = pLoc->ConnectServer(
 80         _bstr_t(L"ROOT\\CIMV2"), // Object path of WMI namespace
 81         NULL,                    // User name. NULL = current user
 82         NULL,                    // User password. NULL = current
 83         0,                       // Locale. NULL indicates current
 84         NULL,                    // Security flags.
 85         0,                       // Authority (e.g. Kerberos)
 86         0,                       // Context object
 87         &pSvc                    // pointer to IWbemServices proxy
 88         );
 89
 90     if (FAILED(hres))
 91     {
 92         cout << "Could not connect. Error code = 0x"
 93             << hex << hres << endl;
 94         pLoc->Release();
 95         CoUninitialize();
 96         return 1;                // Program has failed.
 97     }
 98
 99     cout << "Connected to ROOT\\CIMV2 WMI namespace" << endl;
100
101     // Step 5: --------------------------------------------------
102     // Set security levels on the proxy -------------------------
103
104     hres = CoSetProxyBlanket(
105         pSvc,                        // Indicates the proxy to set
106         RPC_C_AUTHN_WINNT,           // RPC_C_AUTHN_xxx
107         RPC_C_AUTHZ_NONE,            // RPC_C_AUTHZ_xxx
108         NULL,                        // Server principal name
109         RPC_C_AUTHN_LEVEL_CALL,      // RPC_C_AUTHN_LEVEL_xxx
110         RPC_C_IMP_LEVEL_IMPERSONATE, // RPC_C_IMP_LEVEL_xxx
111         NULL,                        // client identity
112         EOAC_NONE                    // proxy capabilities
113         );
114
115     if (FAILED(hres))
116     {
117         cout << "Could not set proxy blanket. Error code = 0x"
118             << hex << hres << endl;
119         pSvc->Release();
120         pLoc->Release();
121         CoUninitialize();
122         return 1;               // Program has failed.
123     }
124
125     // Step 6: --------------------------------------------------
126     // Use the IWbemServices pointer to make requests of WMI ----
127
128     // For example, get the name of the operating system
129     IEnumWbemClassObject* pEnumerator = NULL;
130     hres = pSvc->ExecQuery(
131         bstr_t("WQL"),
132         bstr_t("SELECT * FROM Win32_PhysicalMedia"),
133         WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
134         NULL,
135         &pEnumerator);
136
137     if (FAILED(hres))
138     {
139         cout << "Query for physical media failed."
140             << " Error code = 0x"
141             << hex << hres << endl;
142         pSvc->Release();
143         pLoc->Release();
144         CoUninitialize();
145         return 1;               // Program has failed.
146     }
147
148     // Step 7: -------------------------------------------------
149     // Get the data from the query in step 6 -------------------
150
151     IWbemClassObject *pclsObj = NULL;
152     ULONG uReturn = 0;
153
154     while (pEnumerator)
155     {
156         HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1,
157             &pclsObj, &uReturn);
158
159         if(0 == uReturn)
160         {
161             break;
162         }
163
164         VARIANT vtProp;
165
166         // Get the value of the Name property
167         hr = pclsObj->Get(L"SerialNumber", 0, &vtProp, 0, 0);
168
169         wcout << "Serial Number : " << vtProp.bstrVal << endl;
170         VariantClear(&vtProp);
171     }
172
173     // Cleanup
174     // ========
175
176     pSvc->Release();
177     pLoc->Release();
178     pEnumerator->Release();
179     pclsObj->Release();
180     CoUninitialize();
181
182     return 0;   // Program successfully completed.
183 }

6.主板ID

  1 //获取主板ID
  2 BOOL GetMainBoardInfoByCmd(char* & lpszBaseBoard)
  3 {
  4     const long COMMAND_SIZE = 1020; // Command line output buffer
  5     const DWORD WAIT_TIME = 500; // INFINITE
  6
  7     // The command to get mainboard serial number
  8     TCHAR szFetCmd[] = _T("wmic BaseBoard get SerialNumber");
  9
 10     // Pre- information of mainboard serial number
 11     const std::string strEnSearch = "SerialNumber";
 12
 13     BOOL fReturnCode = FALSE;
 14     HANDLE hReadPipe = NULL;  // Pipeline for READ
 15     HANDLE hWritePipe = NULL; // Pipeline for WRITE
 16     PROCESS_INFORMATION pi;   // Process information
 17     STARTUPINFO            si;   // Control-command window info
 18     SECURITY_ATTRIBUTES sa;   // Security attributes
 19
 20     char szBuffer[COMMAND_SIZE + 1] = { 0 }; // Command line output buffer
 21     std::string strBuffer;
 22     DWORD count = 0;
 23     size_t pos = 0;
 24     size_t i = 0;
 25     size_t j = 0;
 26
 27     lpszBaseBoard = (char*)malloc((COMMAND_SIZE + 1)*sizeof(char));
 28     memset(lpszBaseBoard, 0x00, (COMMAND_SIZE + 1)*sizeof(char));
 29
 30     memset(&pi, 0, sizeof(pi));
 31     memset(&si, 0, sizeof(si));
 32     memset(&sa, 0, sizeof(sa));
 33
 34     pi.hProcess = NULL;
 35     pi.hThread = NULL;
 36     si.cb = sizeof(STARTUPINFO);
 37     sa.nLength = sizeof(SECURITY_ATTRIBUTES);
 38     sa.lpSecurityDescriptor = NULL;
 39     sa.bInheritHandle = TRUE;
 40
 41     // Step 1: Create pipeline
 42     fReturnCode = CreatePipe(&hReadPipe, &hWritePipe, &sa, 0);
 43     if (!fReturnCode)
 44     {
 45         goto EXIT;
 46     }
 47
 48     // Step 2: Set command line window to be specific READ / WRITE pipeline
 49     GetStartupInfo(&si);
 50     si.hStdError = hWritePipe;
 51     si.hStdOutput = hWritePipe;
 52     si.wShowWindow = SW_HIDE; // hide command line window
 53     si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
 54
 55     // Step 3: Create process to get command line handle
 56     fReturnCode = CreateProcess(NULL, szFetCmd, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi);
 57     if (!fReturnCode)
 58     {
 59         goto EXIT;
 60     }
 61
 62     // Step 4: Get return back data
 63     WaitForSingleObject(pi.hProcess, WAIT_TIME);
 64     fReturnCode = ReadFile(hReadPipe, szBuffer, COMMAND_SIZE, &count, 0);
 65     if (!fReturnCode)
 66     {
 67         goto EXIT;
 68     }
 69
 70     // Step 5: Search for mainboard serial number
 71     fReturnCode = FALSE;
 72     strBuffer = szBuffer;
 73     pos = strBuffer.find(strEnSearch);
 74
 75     if (pos < 0) // NOT FOUND
 76     {
 77         goto EXIT;
 78     }
 79     else
 80     {
 81         strBuffer = strBuffer.substr(pos + strEnSearch.length());
 82     }
 83
 84     memset(szBuffer, 0x00, sizeof(szBuffer));
 85     strcpy_s(szBuffer, strBuffer.c_str());
 86
 87     // Get ride of <space>, \r, \n
 88     j = 0;
 89     for (i = 0; i < strlen(szBuffer); i++)
 90     {
 91         if (szBuffer[i] != ‘ ‘ && szBuffer[i] != ‘\n‘ && szBuffer[i] != ‘\r‘)
 92         {
 93             lpszBaseBoard[j] = szBuffer[i];
 94             j++;
 95         }
 96     }
 97
 98     fReturnCode = TRUE;
 99
100 EXIT:
101     CloseHandle(hWritePipe);
102     CloseHandle(hReadPipe);
103     CloseHandle(pi.hProcess);
104     CloseHandle(pi.hThread);
105
106     return(fReturnCode);
107 }

获取主板ID的用法

 1 {
 2     . . . . . .
 3    char* lpszMainBoardSN = NULL;
 4     GetMainBoardInfoByCmd(lpszMainBoardSN);
 5
 6     if (lpszMainBoardSN)
 7     {
 8         printf("%s\n", lpszMainBoardSN);
 9
10         free(lpszMainBoardSN);
11         lpszMainBoardSN = NULL;
12     }
13     else
14     {
15         printf("N/A\n");
16     }
17
18    . . . . . .
19 }

示例Demo

时间: 2024-08-04 07:25:29

VC++获取计算机Hardware Information (CPU ID, MainBoard Info, Hard Disk Serial, System Information)的相关文章

vc 获取 硬盘序列号 和 cpu

vc 获取 硬盘序列号 和 cpu 唯一iD的方法?如题---------网上找来很多资料 也没找到, 要支持xp win7 32/64 系统下都能获取 硬盘序列号 和cpu ID 哪位朋友帮帮忙:------解决方案--------------------不是很确定 没有测试64位的 http://blog.sina.com.cn/s/blog_612b382d0100efdt.html------解决方案--------------------CString cpu_id(){ int s1

VC获取计算机名和IP地址

void GetPcNameAndIp(CString &strPCName,vector<CString> &vIp) { vIp.clear(); WSADATA wsadata; WORD dwVersionRequested; int err = WSAStartup(dwVersionRequested,&wsadata); char hostname[128]; if(gethostname(hostname,128)==0) { strPCName.For

JAVA获取计算机CPU、硬盘、主板、网络等信息

通过使用第三方开源jar包sigar.jar我们可以获得本地的信息 1.下载sigar.jar sigar官方主页 sigar-1.6.4.zip 2.按照主页上的说明解压包后将相应的文件copy到java路径.比如windows32位操作系统需要将lib中sigar-x86-winnt.dll文件拷贝到java SDK目录的bin内 参考官方主页上的配置项. File Language Description Required sigar.jar Java Java API Yes (for

取计算机特征码(网卡MAC、硬盘序列号、CPU ID、BIOS编号)

以下代码可以取得系统特征码(网卡MAC.硬盘序列号.CPU ID.BIOS编号) BYTE szSystemInfo[4096]; // 在程序执行完毕后,此处存储取得的系统特征码    UINT uSystemInfoLen = 0; // 在程序执行完毕后,此处存储取得的系统特征码的长度 // 网卡 MAC 地址,注意: MAC 地址是可以在注册表中修改的    {        UINT uErrorCode = 0;        IP_ADAPTER_INFO iai;       

通过js获取计算机内网ip,计算机名,mac地址

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en"> <head> <meta http-equiv="

[C#] 获取计算机内部信息 - ComputerInfoHelper

获取计算机内部信息 - ComputerInfoHelper 一.代码 ComputerInfoHelper.cs /// <summary> /// 计算机信息助手类 /// </summary> public class ComputerInfoHelper { /// <summary> /// 获取硬盘容量汇总 /// </summary> public static long GetTotalDiskSize() { try { var diskD

如何获取多核、多cpu系统中指定cpu的序列号

如何获取多核.多cpu系统中指定cpu的序列号作者:SkyJacker(转贴请保持完整并注明作者和出处)http://www.cnpack.orgCnPack IV  QQ Group: 1309702007-01-23 感谢:Passion,Bahamut,早安,空气,SkyJacker...没有Bahamut的奇思妙点,就没有这片文章. 在多cpu.多核中,会随机的获得不同的序列号.这就为我们根据cpu序列号来制作注册机带来了很大的麻烦.Windows 2000/xp允许设置进程和线程的亲缘

java使用siger 获取服务器硬件信息(CPU 内存 网络 io等)

通过使用第三方开源jar包sigar.jar我们可以获得本地的信息 1.下载sigar.jar sigar官方主页 sigar-1.6.4.zip 2.按照主页上的说明解压包后将相应的文件copy到java路径.比如windows32位操作系统需要将lib中sigar-x86-winnt.dll文件拷贝到java SDK目录的bin内 参考官方主页上的配置项. File Language Description Required sigar.jar Java Java API Yes (for

.NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?

原文:.NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用? 都知道可以在任务管理器中查看进程的 CPU 和内存占用,那么如何通过 .NET 编写代码的方式来获取到 CPU 和内存占用呢? .NET 中提供了 PerformanceCounter 类型,可以用来监视系统中大量的性能问题. 本文内容 获取全局 CPU 和内存占用 获取当前进程的 CPU 和内存占用 获取全局 CPU 和内存占用 要获取到全系统中的 CPU 占用率,获取全系统中内存占用,需要首先分