?? cmosdlg.cpp
字號:
// CMOSDlg.cpp : 實現文件
//
#include "stdafx.h"
#include "CMOS.h"
#include "CMOSDlg.h"
#include "CtrlCMOS.h"
#include "ModifyDlg.h"
#include ".\cmosdlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
extern bool WINNT;
// 用于應用程序“關于”菜單項的 CAboutDlg 對話框
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// 對話框數據
enum { IDD = IDD_ABOUTBOX };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
// 實現
protected:
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()
// CCMOSDlg 對話框
CCMOSDlg::CCMOSDlg(CWnd* pParent /*=NULL*/)
: CDialog(CCMOSDlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CCMOSDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_LISTOFFSET, m_listoffset);
DDX_Control(pDX, IDC_BTNREADCMOS, m_readCMOS);
DDX_Control(pDX, IDC_BTNREADFILE, m_readCMOSfile);
DDX_Control(pDX, IDC_BTNWRITECMOS, m_writeCMOS);
DDX_Control(pDX, IDC_BTNSAVE, m_save);
DDX_Control(pDX, IDC_BTNREADBIOS, m_readBIOS);
}
BEGIN_MESSAGE_MAP(CCMOSDlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_BN_CLICKED(IDC_BTNREADCMOS, OnBnClickedBtnreadcmos)
ON_BN_CLICKED(IDC_BTNREADFILE, OnBnClickedBtnreadfile)
ON_BN_CLICKED(IDC_BTNREADBIOS, OnBnClickedBtnreadbios)
// ON_NOTIFY(HDN_ITEMDBLCLICK, 0, OnHdnItemdblclickListoffset)
ON_NOTIFY(NM_DBLCLK, IDC_LISTOFFSET, OnNMDblclkListoffset)
// ON_NOTIFY(LVN_ITEMCHANGED, IDC_LISTOFFSET, OnLvnItemchangedListoffset)
ON_BN_CLICKED(IDC_BTNSAVE, OnBnClickedBtnsave)
ON_BN_CLICKED(IDCANCEL, OnBnClickedCancel)
ON_BN_CLICKED(IDC_BTNWRITECMOS, OnBnClickedBtnwritecmos)
END_MESSAGE_MAP()
// CCMOSDlg 消息處理程序
BOOL CCMOSDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// 將\“關于...\”菜單項添加到系統菜單中。
// IDM_ABOUTBOX 必須在系統命令范圍內。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// 設置此對話框的圖標。當應用程序主窗口不是對話框時,框架將自動
// 執行此操作
SetIcon(m_hIcon, TRUE); // 設置大圖標
SetIcon(m_hIcon, FALSE); // 設置小圖標
// TODO: 在此添加額外的初始化代碼
if(WINNT == true)
{
m_readBIOS.EnableWindow(true);
m_readCMOS.EnableWindow(false);
m_readCMOSfile.EnableWindow(false);
m_writeCMOS.EnableWindow(false);
m_save.EnableWindow(false);
}
else
{
m_readBIOS.EnableWindow(false);
m_readCMOS.EnableWindow(true);
m_readCMOSfile.EnableWindow(true);
m_writeCMOS.EnableWindow(true);
m_save.EnableWindow(true);
}
m_listoffset.SetExtendedStyle( LVS_EX_FULLROWSELECT );
m_listoffset.InsertColumn(0,"OFFSET",LVCFMT_CENTER,80);
m_listoffset.InsertColumn(1,"DESCRIPTION",LVCFMT_LEFT,180);
m_listoffset.InsertColumn(2,"VALUE",LVCFMT_CENTER,120);
char temp[0x80][40] =
{
"Seconds",
"Seconds alarm",
"Minutes",
"Minutes alarm",
"Hours",
"Hours alarm",
"Day of the week",
"Day of the month",
"Month",
"Year",
"Status register A",
"Status register B",
"Status register C",
"Status register D",
"Diagnostic register",
"Shutdown register",
"Diskette drive types",
"BIOS DEPENDENT",
"Hard disk type",
"BIOS DEPENDENT",
"Equipment byte",
"Base memory low",
"Base memory high",
"Extended memory low",
"Extended. memory high",
"Hard disk 0 ext. type",
"Hard disk 1 ext. type",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"CMOS checksum high",
"CMOS checksum low",
"Extended memory low",
"Extended memory high",
"Date century byte (ISA)/CRC low (MCA)",
"Power on information flags",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"Date century byte (MCA)",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT",
"BIOS DEPENDENT"
};
int i;
for (i=0;i<=0X7F;i++)
{
char buffer[6];
_i64toa(i,buffer,16);
char b[2];
b[0] = 'H';
b[1] = '\0';
strcat(buffer,b);
m_listoffset.InsertItem(i, buffer);
}
for (i=0;i<=0x7f;i++)
{
m_listoffset.SetItemText(i,1,temp[i]);
}
return TRUE; // 除非設置了控件的焦點,否則返回 TRUE
}
void CCMOSDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// 如果向對話框添加最小化按鈕,則需要下面的代碼
// 來繪制該圖標。對于使用文檔/視圖模型的 MFC 應用程序,
// 這將由框架自動完成。
void CCMOSDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于繪制的設備上下文
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// 使圖標在工作矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// 繪制圖標
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
//當用戶拖動最小化窗口時系統調用此函數取得光標顯示。
HCURSOR CCMOSDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
void CCMOSDlg::OnBnClickedBtnreadcmos()
{
CString sPath;
GetModuleFileName(NULL,sPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH);
sPath.ReleaseBuffer ();
int nPos;
nPos=sPath.ReverseFind ('\\');
sPath=sPath.Left (nPos);
CString lpszFile = sPath + "\\READCMOS.EXE";
CString lpszFIleDes = sPath +"\\CMOS.MEM";
CFile frecord;
frecord.Remove(lpszFIleDes);
ShellExecute(0, "open", lpszFile, lpszFIleDes, NULL, SW_HIDE);
MessageBox("Read CMOS Successfull!");
CCtrlCMOS CMOS;
if (!frecord.Open(lpszFIleDes,CFile::modeRead))
{ /* 打開一個二進制文件 */
}
frecord.Read(CMOS.CMOSRecord,128); /* 從文件中讀CMOS內存信息 */
frecord.Close();
for (int i=0;i<=0x7f;i++)
{
char buffer[6];
BYTE temp = *(CMOS.CMOSRecord+i);
_i64toa(temp,buffer,10);
m_listoffset.SetItemText(i,2,buffer);
}
}
void CCMOSDlg::OnBnClickedBtnreadfile()
{
// TODO: 在此添加控件通知處理程序代碼
CCtrlCMOS CMOS;
CMOS.ReadFileWin98();
for (int i=0;i<=0x7f;i++)
{
char buffer[6];
BYTE temp = *(CMOS.CMOSRecord+i);
_i64toa(temp,buffer,10);
m_listoffset.SetItemText(i,2,buffer);
}
}
void CCMOSDlg::OnBnClickedBtnreadbios()
{
// TODO: 在此添加控件通知處理程序代碼
CCtrlCMOS CMOS;
CMOS.ReadBIOSWINNT();
}
void CCMOSDlg::OnNMDblclkListoffset(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: 在此添加控件通知處理程序代碼
POSITION pos = m_listoffset.GetFirstSelectedItemPosition();
if(pos)
{
CString value;
int nItem = m_listoffset.GetNextSelectedItem(pos);
value = m_listoffset.GetItemText(nItem,2);
CModifyDlg dlg;
dlg.m_value = value;
if(dlg.DoModal()==IDOK)
{
m_listoffset.SetItemText(nItem,2,dlg.m_value);
}
}
*pResult = 0;
}
void CCMOSDlg::OnBnClickedBtnsave()
{
CCtrlCMOS CMOS;
CString temp;
for (int i=0;i<=0x7f;i++)
{
temp = m_listoffset.GetItemText(i,2);
BYTE value = (BYTE)atoi(temp);
*(CMOS.CMOSRecord+i) = value;
}
CString sPath;
GetModuleFileName(NULL,sPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH);
sPath.ReleaseBuffer ();
int nPos;
nPos=sPath.ReverseFind ('\\');
sPath=sPath.Left (nPos);
CString lpszFile = sPath + "\\MODIFIEDCMOS.MEM";
CFile fcmos;
fcmos.Open(lpszFile,CFile::modeCreate|CFile::modeWrite);
fcmos.Write(CMOS.CMOSRecord,0x80);
fcmos.Close();
MessageBox("Modified CMOS saved to "+lpszFile);
}
void CCMOSDlg::OnBnClickedCancel()
{
// TODO: 在此添加控件通知處理程序代碼
OnCancel();
}
void CCMOSDlg::OnBnClickedBtnwritecmos()
{
// TODO: 在此添加控件通知處理程序代碼
CCtrlCMOS CMOS;
CString temp;
for (int i=0;i<=0x7f;i++)
{
temp = m_listoffset.GetItemText(i,2);
BYTE value = (BYTE)atoi(temp);
*(CMOS.CMOSRecord+i) = value;
}
CString sPath;
GetModuleFileName(NULL,sPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH);
sPath.ReleaseBuffer ();
int nPos;
nPos=sPath.ReverseFind ('\\');
sPath=sPath.Left (nPos);
CString lpszFile = sPath + "\\PUTCMOS.EXE";
CString lpszFIleDes = sPath +"\\CMOS.MEM";
CFile fcmos;
fcmos.Open(lpszFIleDes,CFile::modeCreate|CFile::modeWrite);
fcmos.Write(CMOS.CMOSRecord,0x80);
fcmos.Close();
MessageBox("Modified CMOS saved to "+lpszFIleDes);
ShellExecute(0, "open", lpszFile, lpszFIleDes, NULL, SW_HIDE);
MessageBox("Put to CMOS Successfull!");
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -