【2012年终总结】之四 获得CPU信息,剪贴板
2013-02-06 14:35
260 查看
//getCPUNumber.cpp
//使用上面的函数
//复制到剪贴板
//用来存储信息 DWORD deax; DWORD debx; DWORD decx; DWORD dedx; void ExeCPUID(DWORD veax)//初始化CPU { __asm { mov eax,veax cpuid mov deax,eax mov debx,ebx mov decx,ecx mov dedx,edx } } long GetCPUFreq()//获取CPU频率,单位: MHZ { int start1,start2; _asm rdtsc _asm mov start1,eax Sleep(50); _asm rdtsc _asm mov start2,eax return (start2-start1)/50000; } string GetManID()//获取制造商信息 { char ID[25];//存储制造商信息 memset(ID,0,sizeof(ID));//先清空数组 ID ExeCPUID(0);//初始化 memcpy(ID+0,&debx,4);//制造商信息前四个字符复制到数组 memcpy(ID+4,&dedx,4);//中间四个 memcpy(ID+8,&decx,4);//最后四个 //如果返回 char * ,会出现乱码;故返回 string 值 return string(ID); } string GetCPUType() { const DWORD id = 0x80000002; //从0x80000002开始,到0x80000004结束 char CPUType[49];//用来存储CPU型号信息 memset(CPUType,0,sizeof(CPUType));//初始化数组 for(DWORD t = 0 ; t < 3 ; t++ ) { ExeCPUID(id+t); //每次循环结束,保存信息到数组 memcpy(CPUType+16*t+ 0,&deax,4); memcpy(CPUType+16*t+ 4,&debx,4); memcpy(CPUType+16*t+ 8,&decx,4); memcpy(CPUType+16*t+12,&dedx,4); } return string(CPUType); } CString GetMac_SN() { unsigned long s1,s2; CString str; __asm { mov eax,0x01 xor edx,edx cpuid mov s1,edx mov s2,eax } str.Format(_T("%08X%08X"), s1, s2); return str; }
//使用上面的函数
void CgetCPUNumberDlg::OnBnClickedButton2() { // TODO: 在此添加控件通知处理程序代码; CString strCPUID = GetMac_SN(); CEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDIT1); pEdit->SetWindowText(strCPUID); CEdit* pEdit2 = (CEdit*)GetDlgItem(IDC_EDIT2); long nFreq = GetCPUFreq(); //主频; string strMaker = GetManID(); //制造商; string strModel = GetCPUType(); //型号; CString str("本机CPU信息如下:\r\n\r\n"); CString strTemp; strTemp.Format(_T("%d"), nFreq); str += "主频:"; str += strTemp; str += "\r\n\r\n"; str += "制造商:"; str += CString(strMaker.c_str()); str += "\r\n\r\n"; str += "型号:"; str += CString(strModel.c_str()); pEdit2->SetWindowText(str); }
//复制到剪贴板
void CgetCPUNumberDlg::OnBnClickedButton1() { // TODO: 在此添加控件通知处理程序代码; BOOL ret = OpenClipboard(); if (ret != TRUE) { AfxMessageBox(_T("打开剪贴板失败!")); return; } EmptyClipboard(); HGLOBAL hMem = GlobalAlloc(GMEM_MOVEABLE, 1024); LPVOID pMem = GlobalLock(hMem); char* pBuf = (char*)pMem; CString strCPUID; GetDlgItemText(IDC_EDIT1, strCPUID); int i = 0; int len = strCPUID.GetLength(); char chArray[1024] = {0}; for (i = 0; i < len; ++ i ) { chArray[i] = strCPUID.GetAt(i); } chArray[i] = '\0'; strcpy_s(pBuf, (len + 1) * sizeof(char), chArray); //把EDIT控件中的数据拷贝至指针指向的内存区域; GlobalUnlock(hMem); HANDLE hClipboard = SetClipboardData(CF_TEXT, hMem); CloseClipboard(); }
![](http://images.cnitblog.com/blog/431928/201302/06143451-a9bd3cb84ca34b9893edfbf76506620b.jpg)
相关文章推荐
- 【2012年终总结】之四 获得CPU信息,剪贴板
- FLEX tree动态获得信息时遇到的问题总结
- FEP: 测试 lineage, 获得 CPU, MEMORY 统计信息
- 在C++中使用cpuid指令获得CPU信息(转载闲人)
- 在C++中使用cpuid指令获得CPU信息
- FEP: 测试 docker matrix, 获得 CPU, MEMORY, 网络性能的 统计信息
- C++中使用cpuid指令获得CPU信息
- FLEX Tree动态获得信息时遇到的问题总结
- C++编程中,利用WINDOWS API获得系统状态信息[CPU占用率,硬盘使用情况,内存使用情况]
- python 在linux下通过top,和dh命令获得cpu,内存,以及硬盘信息
- 获得CPU的信息
- 在C++中使用CPU ID指令获得CPU信息
- CPU信息的获得
- C#封装获得机器(CPU、硬盘、BIOS、MAC地址)信息
- 研究心得------->CPU信息的获得,比较全面的。
- CPU信息的获得
- 在C++中使用CPU ID指令获得CPU信息
- FLEX Tree动态获得信息时遇到的问题总结
- C#从剪贴板获得信息
- 在C++中使用cpuid指令获得CPU信息