zoukankan      html  css  js  c++  java
  • 【2012年终总结】之四 获得CPU信息,剪贴板

    //getCPUNumber.cpp

     1 //用来存储信息
     2 DWORD deax;
     3 DWORD debx;
     4 DWORD decx;
     5 DWORD dedx;
     6 
     7 void ExeCPUID(DWORD veax)//初始化CPU
     8 {
     9     __asm
    10     {
    11         mov eax,veax
    12             cpuid
    13             mov deax,eax
    14             mov debx,ebx
    15             mov decx,ecx
    16             mov dedx,edx
    17     }
    18 }
    19 
    20 long GetCPUFreq()//获取CPU频率,单位: MHZ
    21 {
    22     int start1,start2;
    23     _asm rdtsc
    24         _asm mov start1,eax
    25         Sleep(50);
    26     _asm rdtsc
    27         _asm mov start2,eax
    28         return (start2-start1)/50000;
    29 }
    30 
    31 string GetManID()//获取制造商信息
    32 {
    33     char ID[25];//存储制造商信息
    34     memset(ID,0,sizeof(ID));//先清空数组 ID
    35     ExeCPUID(0);//初始化
    36     memcpy(ID+0,&debx,4);//制造商信息前四个字符复制到数组
    37     memcpy(ID+4,&dedx,4);//中间四个
    38     memcpy(ID+8,&decx,4);//最后四个
    39     //如果返回 char * ,会出现乱码;故返回 string 值
    40     return string(ID);
    41 }
    42 
    43 string GetCPUType()
    44 {
    45     const DWORD id = 0x80000002; //从0x80000002开始,到0x80000004结束
    46     char CPUType[49];//用来存储CPU型号信息
    47     memset(CPUType,0,sizeof(CPUType));//初始化数组
    48 
    49     for(DWORD t = 0 ; t < 3 ; t++ )
    50     {
    51         ExeCPUID(id+t);
    52         //每次循环结束,保存信息到数组
    53         memcpy(CPUType+16*t+ 0,&deax,4);
    54         memcpy(CPUType+16*t+ 4,&debx,4);
    55         memcpy(CPUType+16*t+ 8,&decx,4);
    56         memcpy(CPUType+16*t+12,&dedx,4);
    57     }
    58 
    59     return string(CPUType);
    60 }
    61 
    62 
    63 CString GetMac_SN()
    64 { 
    65     unsigned long s1,s2;
    66     CString str;
    67 
    68     __asm
    69     {
    70         mov eax,0x01
    71             xor edx,edx
    72             cpuid
    73             mov s1,edx
    74             mov s2,eax
    75     } 
    76     
    77     str.Format(_T("%08X%08X"), s1, s2); 
    78 
    79     return str;
    80 }

    //使用上面的函数

     1 void CgetCPUNumberDlg::OnBnClickedButton2()
     2 {
     3     // TODO: 在此添加控件通知处理程序代码;
     4 
     5     CString strCPUID = GetMac_SN();
     6 
     7     CEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDIT1);
     8     pEdit->SetWindowText(strCPUID); 
     9 
    10     CEdit* pEdit2 = (CEdit*)GetDlgItem(IDC_EDIT2);
    11 
    12     long nFreq = GetCPUFreq();      //主频;
    13     string strMaker = GetManID();   //制造商;
    14     string strModel = GetCPUType(); //型号;
    15 
    16     CString str("本机CPU信息如下:\r\n\r\n");
    17     CString strTemp;
    18     strTemp.Format(_T("%d"), nFreq);
    19 
    20     str += "主频:";
    21     str += strTemp;
    22 
    23     str += "\r\n\r\n";
    24     str += "制造商:";
    25     str += CString(strMaker.c_str());
    26 
    27     str += "\r\n\r\n";
    28     str += "型号:";
    29     str += CString(strModel.c_str());
    30 
    31 
    32     pEdit2->SetWindowText(str);
    33 
    34 }

    //复制到剪贴板

     1 void CgetCPUNumberDlg::OnBnClickedButton1()
     2 {
     3     // TODO: 在此添加控件通知处理程序代码;
     4 
     5     BOOL ret = OpenClipboard();
     6     if (ret != TRUE)
     7     {
     8         AfxMessageBox(_T("打开剪贴板失败!"));
     9         return;
    10     }
    11 
    12     EmptyClipboard();
    13 
    14     HGLOBAL hMem = GlobalAlloc(GMEM_MOVEABLE, 1024);
    15 
    16     LPVOID pMem = GlobalLock(hMem);
    17 
    18     char* pBuf = (char*)pMem;
    19 
    20     CString strCPUID;
    21     GetDlgItemText(IDC_EDIT1, strCPUID);
    22 
    23     int i = 0;
    24     int len = strCPUID.GetLength();
    25     char chArray[1024] = {0}; 
    26 
    27     for (i = 0; i < len; ++ i )
    28     {
    29         chArray[i] = strCPUID.GetAt(i);
    30     }
    31     chArray[i] = '\0';
    32 
    33     strcpy_s(pBuf, (len + 1) * sizeof(char), chArray);  //把EDIT控件中的数据拷贝至指针指向的内存区域;
    34 
    35     GlobalUnlock(hMem);
    36 
    37 
    38     HANDLE hClipboard = SetClipboardData(CF_TEXT, hMem);
    39 
    40     CloseClipboard();
    41 }

     

      

  • 相关阅读:
    php常见细节错误
    php+jquery注册实例
    yii2添加自定义字段
    yii2开启session
    yii2中textarea中的默认值设置
    yii2.0分页
    yii2多语言
    mysql中查询值为NULL的记录
    yii Html中的a标签使用
    yii2顶部导航使用
  • 原文地址:https://www.cnblogs.com/cuish/p/2905855.html
Copyright © 2011-2022 走看看