Mega Code Archive

 
Categories / Delphi / Examples
 

Getdiscsnnoworky

unit SNoUnit; {Richard Ebbs Feb 1999...} {Wee prog to retrieve the serial number from a disc in a drive. Here we look for the CD serial number only but the code will work in principle for a disc in any drive...} {THIS DOESN'T HAPPEN. NO WORKY. ACCESS VIOLATION EXCEPTION RAISED THE CAUSE OF WHICH IS NOT OBVIOUS...} interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TSerPacket = record Info: Word; {info level: always zero...} SerNo: LongInt; {disk serial number...} Vol: Array[1..11] of char; FileType: Array[1..8] of char; end; type TMainForm = class(TForm) GoButton: TButton; ExitButton: TButton; procedure ExitButtonClick(Sender: TObject); procedure GoButtonClick(Sender: TObject); private {private declarations} public {public declarations} end; var MainForm: TMainForm; implementation {$R *.DFM} var SPacket: TSerPacket; procedure TMainForm.ExitButtonClick(Sender: TObject); begin Close; end; function GetSerialInfo(Drive: Byte): Byte; assembler; asm mov ah, 69h {this is where you 1 set serial, 0 to get serial number...} mov al, 0 {drive number 0 = default, 1 = A, 2 = B , 3 = C, 4=D...} mov bl, 1 mov dx, offset [SPacket] int 21h end; function SetSerialInfo(Drive: Byte; SerNo: LongInt): Boolean; begin GetSerialInfo(Drive); SPacket.SerNo := SerNo; asm mov ah, 69h {this is where you use 1 to set, or 0 to get, the serial number...} mov al, 1 {drive number 0 = default, 1 = A, 2 = B , 3 = C, 4=D...} mov bl, Drive mov dx, offset [SPacket] int 21h end; end; procedure DisplaySerialInfo; var S, infoStr, SNoStr, volStr, typeStr, msgStr: String; begin infoStr := 'Info level: ' + String(Char(SPacket.Info)) + #0; {WriteLn('Info level: ', SPacket.Info);} SNoStr := 'Serial Num: ' + IntToStr(SPacket.SerNo) + #0; {WriteLn('Serial Num: ', SPacket.SerNo);} {FillChar(S, SizeOf(S), #0);} S := String(SPacket.Vol) + #0; {line above is better than 2 lines below which it replaces...} {Move(SPacket.Vol[1], S[1], 11);} {S[Length(S)] := #0;} volStr := 'Vol: ' + S + #0; {WriteLn('Vol: ', S);} FillChar(S, SizeOf(S), #0); S := String(SPacket.FileType) + #0; {line above is better than 2 lines below which it replaces...} {Move(Spacket.FileType,S[1], 8); S[Length(S)] := #0;} typeStr := 'Type: ' + S + #0; {WriteLn('Type: ', S);} msgStr := infoStr + SNoStr + volStr + typeStr; Application.MessageBox(PChar(msgStr), ' CD Serial Number', mb_OK); end; procedure TMainForm.GoButtonClick(Sender: TObject); begin {SHOULD TEST THAT THERE'S A DISC IN THE DRIVE, FIRST, HERE...} {'1' is for drive A, '2' is for drive B, '3' is for drive C, and '4' is for drive D...} {SetSerialInfo(1, 12);} GetSerialInfo(1); DisplaySerialInfo; end; end.