⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dlgtestdlg.cpp

📁 获取CPU频率和名字
💻 CPP
字号:
// DlgTestDlg.cpp : 实现文件
//

#include "stdafx.h"
#include "DlgTest.h"
#include ".\dlgtestdlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif


CDlgTestDlg::CDlgTestDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CDlgTestDlg::IDD, pParent)
	, msg(_T(""))
	, fren(_T(""))
	, cpuid(_T(""))
{
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CDlgTestDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	DDX_Text(pDX, IDC_STATIC1, fren);
	DDX_Text(pDX, IDC_STATIC2, cpuid);
}

BEGIN_MESSAGE_MAP(CDlgTestDlg, CDialog)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	//}}AFX_MSG_MAP
	ON_WM_TIMER()
	ON_WM_DESTROY()
END_MESSAGE_MAP()


// CDlgTestDlg 消息处理程序
unsigned int mycpuid[80];

BOOL CDlgTestDlg::OnInitDialog()
{
	CDialog::OnInitDialog();
	::SetTimer(this->GetSafeHwnd(),1,1000,NULL);
	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
	}
	SetIcon(m_hIcon, TRUE);			// 设置大图标
	SetIcon(m_hIcon, FALSE);		// 设置小图标
					__asm{
					    mov eax,0
						cpuid
												
						mov mycpuid[0],ebx
                        mov mycpuid[4],edx
						mov mycpuid[8],ecx
					}
					cpuid = "CPUNAME: ";
					cpuid += (char*)mycpuid;
					UpdateData(0);
	
	return TRUE;  // 除非设置了控件的焦点,否则返回 TRUE
}
void CDlgTestDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	CDialog::OnSysCommand(nID, lParam);
}

void CDlgTestDlg::OnPaint() 
{
	CDialog::OnPaint();
}

//当用户拖动最小化窗口时系统调用此函数取得光标显示。
HCURSOR CDlgTestDlg::OnQueryDragIcon()
{
	return static_cast<HCURSOR>(m_hIcon);
}
unsigned int cpuclock,t=0;
int frenc[2];
void CDlgTestDlg::OnTimer(UINT nIDEvent)
{		
	if(t)
	{
	GetTickCount();
	__asm{
		mov ebx,eax
		sub eax,t
		mov ecx,eax
		mov t,ebx
		rdtsc
		mov ebx,offset frenc
		sub eax,[ebx+4]
		sbb edx,[ebx+0]
		div ecx
		mov cpuclock,eax
		rdtsc
		mov ecx,offset frenc
		mov [ecx+0],edx
		mov [ecx+4],eax
	}
	fren.Format("CPU frequency: %d KHz",cpuclock);
	UpdateData(0);
	}
	else
	{
		GetTickCount();
		__asm
		{
			mov t,eax
			rdtsc
			mov ecx,offset frenc
			mov [ecx+0],edx
			mov [ecx+4],eax
		}
	}
}

void CDlgTestDlg::OnDestroy()
{
	KillTimer(1);
	CDialog::OnDestroy();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -