天津市大学生档案存放:怎样在DELPHI中取得物理硬盘的序列号?

来源:百度文库 编辑:查人人中国名人网 时间:2024/05/04 14:43:11
可以通过调用DLL文件来取得,但是想利用DELPHI自身代码或相关的DELPHI控件来取得,希望高手能介绍或推荐。
以下两行无法在DELPHI7中编译通过
lds dx,MID { Load pointeraddr. }
call DOS3Call { Supposed to be faster than INT 21H }
显示信息如下:
Build
[Error] Unit1.pas(42): Operand size mismatch
[Error] Unit1.pas(43): Undeclared identifier: 'DOS3Call'
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'
不知如何解决,请帮忙。

我翻翻~三年前的~抄的
type
MIDPtr = ^MIDRec;
MIDRec = Record
InfoLevel: word;
SerialNum: LongInt;
VolLabel: Packed Array [0..10] of Char;
FileSysType: Packed Array [0..7] of Char;
end;

function GetDriveSerialNum(MID: MIDPtr; drive: Word): Boolean; assembler;
asm
push DS { Just for safety, I dont think its really needed }
mov ax,440Dh { Function Get Media ID }
mov bx,drive { drive no (0-Default, 1-A ...) }
mov cx,0866h { category and minor code }
lds dx,MID { Load pointeraddr. }
call DOS3Call { Supposed to be faster than INT 21H }
jc @@err
mov al,1 { No carry so return TRUE }
jmp @@ok
@@err:
mov al,0 { Carry set so return FALSE }
@@ok:
pop DS { Restore DS, were not supposed to change it }
end;

procedure TForm1.NrBtnClick(Sender: TObject);
var
Info: MIDRec;
begin
Info.InfoLevel:=0; { Information Level }
If GetDriveSerialNum(@Info,0) then { Do something with it... }
ListBox.Items.Add(IntToStr(Info.SerialNum)+' '+Info.VolLabel);
end;

-----------2----------
写的
procedure TForm1.Button1Click(Sender: TObject);
var
a,b:dword;
serialNum:Dword;
begin
GetVolumeInformation('D:\',nil,0,@SerialNum, a, b, nil, 0);
Edit1.Text:=inttohex(SerialNum,8);
end;

-------------3---------
半年前的地址:http://www.5ivb.net/Down/8/daima20055177716265/