📄 unithddisk.cpp
字号:
/*-------------------------------------------------------------------------*\
| |
| IDE 硬盘参数读取程序 |
| ~~~~~~~~~~~~~~~~~~~~ |
| Copyright (C) 1997-2003, Victor Chen |
| Email: victor@cppfans.com |
| Homepage: http://www.cppfans.com |
| |
\*-------------------------------------------------------------------------*/
#include <vcl.h>
#pragma hdrstop
#include "UnitHdDisk.h"
#include "IDE_DISK.H"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TFormHdParams *FormHdParams;
//---------------------------------------------------------------------------
__fastcall TFormHdParams::TFormHdParams(TComponent* Owner)
: TForm(Owner)
{
Memo1->Text = "读取硬盘参数\r\nCopyright (C) Victor Chen\r\nHomepage: http://www.cppfans.com/\r\n\r\n";
Memo1->Lines->Add("按“硬盘参数”按钮读取硬盘参数\r\n==============================================");
bWinIoInitOK = InitializeWinIo();
if(!bWinIoInitOK)
{
Application->MessageBox("不能装载 WinIO 程序!","错误信息",MB_OK|MB_ICONSTOP);
Application->Terminate();
}
}
//---------------------------------------------------------------------------
__fastcall TFormHdParams::~TFormHdParams()
{
if(bWinIoInitOK)
ShutdownWinIo();
}
//---------------------------------------------------------------------------
void __fastcall TFormHdParams::ButtonHdParamsClick(TObject *Sender)
{
TIdePortAddrItem ControllerPorts[] = {IDE1_Port, IDE2_Port};
AnsiString ControllerNames[] = {"IDE0", "IDE1"};
char *HardDiskNames[] = {"主盘", "从盘"};
char HardDiskDetected; //bit 0:master, bit 1:slave
TIDE_ID_Inf IDE_Info;
char Str[128];
for(int i=0; i<2; i++)
{
Memo1->Lines->Add("正在检测: " + ControllerNames[i] + ", 可能需要几秒钟时间, 请稍候……");
HardDiskDetected=DetectHDD(ControllerPorts[i]);
switch(HardDiskDetected&3)
{
case 0: Memo1->Lines->Add("没检测到硬盘"); break;
case 1: Memo1->Lines->Add("检测到主盘"); break;
case 2: Memo1->Lines->Add("检测到从盘"); break;
case 3: Memo1->Lines->Add("检测到主盘和从盘"); break;
}
for(int k=0;k<2;k++) //primary/slave disk
if(HardDiskDetected & (1<<k))
{
Memo1->Lines->Add("==============================================");
Memo1->Lines->Add(ControllerNames[i] + HardDiskNames[k] + ":");
Memo1->Lines->Add("----------------------------------------------");
GetHDDInfo(&IDE_Info, k, ControllerPorts[i]);
//---------- model, serial number & firmware revision
WordToStr(Str, IDE_Info.nModel, 20);
Memo1->Lines->Add("型 号: " + AnsiString(Str).Trim());
WordToStr(Str, IDE_Info.Serial, 10);
Memo1->Lines->Add("序 列 号: " + AnsiString(Str).Trim());
WordToStr(Str, IDE_Info.Revisn, 4);
Memo1->Lines->Add("固件版本: " + AnsiString(Str).Trim());
//---------- capacity
unsigned long LbaCap = IDE_Info.LBASec/2048, NomCap = ((unsigned long)(IDE_Info.L_Cyln)*(IDE_Info.L_Head)*(IDE_Info.L_Sect))/2048;
Memo1->Lines->Add("容 量: " + AnsiString().sprintf("%lu Mb",LbaCap>NomCap?LbaCap:NomCap));
//---- output hard disk normal information
Memo1->Lines->Add(AnsiString().sprintf("柱 面 数: %u", IDE_Info.L_Cyln));
Memo1->Lines->Add(AnsiString().sprintf("磁 头 数: %u", IDE_Info.L_Head));
Memo1->Lines->Add(AnsiString().sprintf("扇 区 数: %u", IDE_Info.L_Sect));
Memo1->Lines->Add(AnsiString().sprintf("缓存容量: %u kb", IDE_Info.BufNum>>1));
Memo1->Lines->Add(AnsiString().sprintf("ECC 字节: %u bytes", IDE_Info.ECCByt));
Memo1->Lines->Add(AnsiString().sprintf("LBA 支持: %s", (IDE_Info.Capabs&IDE_LBA_Spp)?"是":"否"));
}
Memo1->Lines->Add("==============================================");
}
}
//---------------------------------------------------------------------------
void __fastcall TFormHdParams::ButtonExitClick(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -