介绍:
有很多时候我需要知道机器的一些物理信息(比如激活技术),所以我就利用放高考假的时间,封装了一个可以获得硬盘的物理信息的类,方便大家。此类在我的机器上测试效果如下:
CGetMachineInfo类简介:
类名: | CGetMachineInfo |
类中的一些要说明的函数: |
功能 |
int ReadPhysicalDriveInNT (void) | 在NT内核系统下读取硬盘的物理信息 |
int ReadDrivePortsInWin9X (void) | 在9X内核系统下读取硬盘的物理信息 |
int ReadIdeDriveAsScsiDriveInNT (void) | 读入NT系统下的SCSI硬盘的物理信息 |
BOOL ReturnInfo(int drive, DWORD diskdata [256]) | 收集磁盘物理信息主函数 |
char *ConvertToString (DWORD, int , int )
|
把整型变量转换为字符串 |
CGetMachineInfo(void); | 类的构造函数,用于区分系统内核然后自动开始收集信息 |
类中的一些要说明的变量: |
变量说明 |
CString str_DN_Modol | 硬盘的出厂序号 |
CString str_DN_Serial | 驱动器的连续序号 |
CString str_DN_ControllerRevision | 硬盘驱动版本 |
CString str_HardDeskSize | 硬盘的大小(bytes) |
CString str_HardDeskBufferSize | 硬盘缓存大小(bytes) |
CString str_HardDeskType | 硬盘类型 |
CString str_Controller | 说明硬盘是主动盘还是辅动盘 |
CString str_HardDesk_Form | 说明所取的信息来源于电脑上的第几个硬盘 |
使用CGetMachineInfo库:
我使用了一个基于对话框的程序测试了这个类,我在对话框的初始化函数里构造了这个对象,因为类的构造函数会自动收集信息的所以构造了一个类变量后我们就可以直接的访问它所取得的信息就可以了。代码如下:
BOOL CHardDeskInfoDlg::OnInitDialog()
{
CDialog::OnInitDialog(); CGetMachineInfo m_Info; //构造这个类的变量
SetDlgItmText(IDC_HARDDESK_ID,m_Info.str_DN_Modol);//直接访问它收集到的信息
SetDlgItemText(IDC_STATIC_SERIAL,m_Info.str_DN_Serial);
SetDlgItemText(IDC_STATIC_CR,m_Info.str_DN_ControllerRevision);
SetDlgItemText(IDC_HARDDESK_SIZE,m_Info.str_HardDeskSize+" bytes");
SetDlgItemText(IDC_BUFFER_SIZE,m_Info.str_HardDeskBufferSize+" bytes");
SetDlgItemText(IDC_HARDDESK_TYPE,m_Info.str_HardDeskType);
SetDlgItemText(IDC_STATIC_Controller,m_Info.str_Controller);
......//
return TRUE; // 除非设置了控件的焦点,否则返回 TRUE
}
结尾:
这个类是很容易使用的,详细的大家可以看源代码(匆促中也许会有错,请各位哥姐多包含)。
测试程序编译通过 VC++ 7.0,类可以用于...大概5.0以上所有的VC版本吧?
本文配套源码