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

📄 smbiosinfodlg.cpp

📁 Windows下Hardware直接读写
💻 CPP
字号:
// SMBiosInfoDlg.cpp : 实现文件
//

#include "stdafx.h"
#include "HW_sigal.h"
#include "SMBiosInfoDlg.h"
#include ".\smbiosinfodlg.h"
#include ".\SMStdStr.h"
#include ".\SMBiosInformation.h"

// CSMBiosInfoDlg 对话框

IMPLEMENT_DYNAMIC(CSMBiosInfoDlg, CDialog)
CSMBiosInfoDlg::CSMBiosInfoDlg(CWnd* pParent /*=NULL*/, int typeNum)
	: CDialog(CSMBiosInfoDlg::IDD, pParent)
	, m_strSmbiosInfo(_T(""))
{
	m_typeNum = typeNum;
}

CSMBiosInfoDlg::~CSMBiosInfoDlg()
{
}

void CSMBiosInfoDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//	DDX_Text(pDX, IDC_EDIT_TEST_INFO, m_strSmbiosInfo);
	DDX_Control(pDX, IDC_LIST_SM_DATA, m_listSmData);
}


BEGIN_MESSAGE_MAP(CSMBiosInfoDlg, CDialog)
	ON_WM_SHOWWINDOW()
//	ON_NOTIFY(TCN_SELCHANGE, IDC_TAB_SMBIOS_Info, OnTcnSelchangeTabSmbiosInfo)
END_MESSAGE_MAP()


// CSMBiosInfoDlg 消息处理程序

void CSMBiosInfoDlg::OnShowWindow(BOOL bShow, UINT nStatus)
{
	CDialog::OnShowWindow(bShow, nStatus);

	// TODO: 在此处添加消息处理程序代码
	//find the type in the list

	list <DMITYPEINFO>::iterator it;
	it = m_smBiosInfo.listDMITypeInfo.begin();
	for(int index=0; index<m_typeNum; index++, it++)
	{
	}
	if(it == m_smBiosInfo.listDMITypeInfo.end())
	{
	}
	else
	{
		//find it, //show the data of this type
		ListView_SetExtendedListViewStyleEx(m_listSmData.GetSafeHwnd(), LVS_EX_FULLROWSELECT , LVS_EX_FULLROWSELECT);

		CRect rect;
		this->m_listSmData.GetClientRect(&rect);
		int nInterval = rect.Width()/8;
		this->m_listSmData.InsertColumn(0, _T("Offset"), LVCFMT_LEFT, nInterval);
		this->m_listSmData.InsertColumn(1, _T("Values(Hex)"), LVCFMT_LEFT, nInterval*4);
		this->m_listSmData.InsertColumn(2, _T("ASIIC(Text)"), LVCFMT_LEFT, rect.Width()-5*nInterval); 

		ShowMemoryData(0, it->endAddr - it->startAddr, it->pBuffer);
	}
	

}

void CSMBiosInfoDlg::OnTcnSelchangeTabSmbiosInfo(NMHDR *pNMHDR, LRESULT *pResult)
{
	// TODO: 在此添加控件通知处理程序代码
	*pResult = 0;
}

int CSMBiosInfoDlg::ShowMemoryData(PBYTE baseAddress, unsigned long rSize, PBYTE pBuffer)
{
	LV_ITEM lvi;
	TCHAR szItem[256];
	lvi.mask = LVIF_TEXT;
	for(int i=0; i < (int)rSize/16+1; i++)
	{
		int show_size = (rSize - 16*i) >16?16:(rSize - 16*i);
		if(show_size == 0)
		{
			break;
		}
		
		// First item
		memset(szItem, 0, sizeof(szItem));
		lvi.iItem = i;
		lvi.iSubItem = 0;
		_stprintf(szItem, _T("%08x"), baseAddress+i*16);
		lvi.pszText = szItem;
		m_listSmData.InsertItem(&lvi);

		
		// SubItem 1
		memset(szItem, 0, sizeof(szItem));
		lvi.iSubItem = 1;
		
		for(int offset = 0 ; offset < show_size; offset++)
		{
			for(int j=0; j<2; j++)
			{
				_stprintf(szItem+offset*2+j, _T("%01x"), (pBuffer[i*16 + offset]>>((1-j)*4))&0x0F );
			}
		}

		CString strTemp = CString(szItem);
		strTemp.MakeUpper();

		lvi.pszText = strTemp.GetBuffer();
		m_listSmData.SetItem(&lvi);

		// SubItem 2
		memset(szItem, 0, sizeof(szItem));
		lvi.iSubItem = 2;
		for(int offset=0; offset < show_size; offset++)
		{
			if(pBuffer[i*16 + offset]>31 && pBuffer[i*16 + offset] != 127)
			{
				sprintf(szItem+offset, _T("%c"), pBuffer[i*16 + offset]);
			}
			else
			{
				szItem[offset] = '.';
			}
		}
		szItem[16] = 0;
		lvi.pszText = _T(szItem);
		m_listSmData.SetItem(&lvi);
	}
	return 0;
}

⌨️ 快捷键说明

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