?? 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 + -