亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Delphi > 正文

DELPHI7.0 獲取硬盤、CPU、網卡序列號的代碼

2020-01-31 20:52:23
字體:
來源:轉載
供稿:網友
復制代碼 代碼如下:

//引用及TYPE變量申明

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,nb30; {重要引用}

type
PASTAT = ^TASTAT;
TASTAT = record
adapter : TAdapterStatus;
name_buf : TNameBuffer;
end;

TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Edit2: TEdit;
Edit3: TEdit;
Button2: TButton;
Edit4: TEdit;
Label4: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}
type
TCPUID = array[1..4] of Longint;

//取硬盤系列號:
function GetIdeSerialNumber: pchar; //獲取硬盤的出廠系列號;
const IDENTIFY_BUFFER_SIZE = 512;
type
TIDERegs = packed record
bFeaturesReg: BYTE;
bSectorCountReg: BYTE;
bSectorNumberReg: BYTE;
bCylLowReg: BYTE;
bCylHighReg: BYTE;
bDriveHeadReg: BYTE;
bCommandReg: BYTE;
bReserved: BYTE;
end;

TSendCmdInParams = packed record
cBufferSize: DWORD;
irDriveRegs: TIDERegs;
bDriveNumber: BYTE;
bReserved: array[0..2] of Byte;
dwReserved: array[0..3] of DWORD;
bBuffer: array[0..0] of Byte;
end;

TIdSector = packed record
wGenConfig: Word;
wNumCyls: Word;
wReserved: Word;
wNumHeads: Word;
wBytesPerTrack: Word;
wBytesPerSector: Word;
wSectorsPerTrack: Word;
wVendorUnique: array[0..2] of Word;
sSerialNumber: array[0..19] of CHAR;
wBufferType: Word;
wBufferSize: Word;
wECCSize: Word;
sFirmwareRev: array[0..7] of Char;
sModelNumber: array[0..39] of Char;
wMoreVendorUnique: Word;
wDoubleWordIO: Word;
wCapabilities: Word;
wReserved1: Word;
wPIOTiming: Word;
wDMATiming: Word;
wBS: Word;
wNumCurrentCyls: Word;
wNumCurrentHeads: Word;
wNumCurrentSectorsPerTrack: Word;
ulCurrentSectorCapacity: DWORD;
wMultSectorStuff: Word;
ulTotalAddressableSectors: DWORD;
wSingleWordDMA: Word;
wMultiWordDMA: Word;
bReserved: array[0..127] of BYTE;
end;

PIdSector = ^TIdSector;
TDriverStatus = packed record
bDriverError: Byte;
bIDEStatus: Byte;
bReserved: array[0..1] of Byte;
dwReserved: array[0..1] of DWORD;
end;

TSendCmdOutParams = packed record
cBufferSize: DWORD;
DriverStatus: TDriverStatus;
bBuffer: array[0..0] of BYTE;
end;
var
hDevice: Thandle;
cbBytesReturned: DWORD;
SCIP: TSendCmdInParams;
aIdOutCmd: array[0..(SizeOf(TSendCmdOutParams) + IDENTIFY_BUFFER_SIZE-1)-1] of Byte;
IdOutCmd: TSendCmdOutParams absolute aIdOutCmd;

procedure ChangeByteOrder(var Data; Size: Integer);//函數中的過程
var
ptr: Pchar;
i: Integer;
c: Char;
begin
ptr := @Data;
for I := 0 to (Size shr 1) - 1 do begin
c := ptr^;
ptr^ := (ptr + 1)^;
(ptr + 1)^ := c;
Inc(ptr, 2);
end;
end;

begin //函數主體
Result := '';
if SysUtils.Win32Platform = VER_PLATFORM_WIN32_NT then
begin // Windows NT, Windows 2000
hDevice := CreateFile('//./PhysicalDrive0', GENERIC_READ or GENERIC_WRITE,
FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0);
end
else // Version Windows 95 OSR2, Windows 98
hDevice := CreateFile('//./SMARTVSD', 0, 0, nil, Create_NEW, 0, 0);
if hDevice = INVALID_HANDLE_VALUE then Exit;
try
FillChar(SCIP, SizeOf(TSendCmdInParams) - 1, #0);
FillChar(aIdOutCmd, SizeOf(aIdOutCmd), #0);
cbBytesReturned := 0;
with SCIP do
begin
cBufferSize := IDENTIFY_BUFFER_SIZE;
with irDriveRegs do
begin
bSectorCountReg := 1;
bSectorNumberReg := 1;
bDriveHeadReg := $A0;
bCommandReg := $EC;
end;
end;
if not DeviceIoControl(hDevice, $0007C088, @SCIP, SizeOf(TSendCmdInParams) - 1,@aIdOutCmd, SizeOf(aIdOutCmd), cbBytesReturned, nil) then Exit;
finally
CloseHandle(hDevice);
end;
with PIdSector(@IdOutCmd.bBuffer)^ do
begin
ChangeByteOrder(sSerialNumber, SizeOf(sSerialNumber));
(Pchar(@sSerialNumber) + SizeOf(sSerialNumber))^:= #0;
Result := Pchar(@sSerialNumber);
end;
end;
//=================================================================

//CPU系列號:
FUNCTION GetCPUID : TCPUID; assembler; register;
asm
PUSH EBX {Save affected register}
PUSH EDI
MOV EDI,EAX {@Resukt}
MOV EAX,1
DW $A20F {CPUID Command}
STOSD {CPUID[1]}
MOV EAX,EBX
STOSD {CPUID[2]}
MOV EAX,ECX
STOSD {CPUID[3]}
MOV EAX,EDX
STOSD {CPUID[4]}
POP EDI {Restore registers}
POP EBX
END;

function GetCPUIDStr:String;
var
CPUID:TCPUID;
begin
CPUID:=GetCPUID;
Result:=IntToHex(CPUID[1],8)+IntToHex(CPUID[2],8)+IntToHex(CPUID[3],8)+IntToHex(CPUID[4],8);
end;

///==================================================================================

///取MAC(非集成網卡):

function NBGetAdapterAddress(a: Integer): string;
var
NCB: TNCB; // Netbios control block //NetBios控制塊
ADAPTER: TADAPTERSTATUS; // Netbios adapter status//取網卡狀態
LANAENUM: TLANAENUM; // Netbios lana
intIdx: Integer; // Temporary work value//臨時變量
cRC: Char; // Netbios return code//NetBios返回值
strTemp: string; // Temporary string//臨時變量
begin
// Initialize
Result := '';
try
// Zero control blocl
ZeroMemory(@NCB, SizeOf(NCB));
// Issue enum command
NCB.ncb_command := Chr(NCBENUM);
cRC := NetBios(@NCB);
// Reissue enum command
NCB.ncb_buffer := @LANAENUM;
NCB.ncb_length := SizeOf(LANAENUM);
cRC := NetBios(@NCB);
if ord(cRC) <> 0 then
exit;
// Reset adapter
ZeroMemory(@NCB, SizeOf(NCB));
NCB.ncb_command := Chr(NCBRESET);
NCB.ncb_lana_num := LANAENUM.lana[a];
cRC := NetBios(@NCB);
if ord(cRC) <> 0 then
exit;
// Get adapter address
ZeroMemory(@NCB, SizeOf(NCB));
NCB.ncb_command := Chr(NCBASTAT);
NCB.ncb_lana_num := LANAENUM.lana[a];
StrPCopy(NCB.ncb_callname, '*');
NCB.ncb_buffer := @ADAPTER;
NCB.ncb_length := SizeOf(ADAPTER);
cRC := NetBios(@NCB);
// Convert it to string
strTemp := '';
for intIdx := 0 to 5 do
strTemp := strTemp + InttoHex(Integer(ADAPTER.adapter_address[intIdx]), 2);
Result := strTemp;
finally
end;
end;
//==========================================================================
//取MAC地址(集成網卡和非集成網卡):

function Getmac:string;
var
ncb : TNCB;
s:string;
adapt : TASTAT;
lanaEnum : TLanaEnum;
i, j, m : integer;
strPart, strMac : string;
begin
FillChar(ncb, SizeOf(TNCB), 0);
ncb.ncb_command := Char(NCBEnum);
ncb.ncb_buffer := PChar(@lanaEnum);
ncb.ncb_length := SizeOf(TLanaEnum);
s:=Netbios(@ncb);
for i := 0 to integer(lanaEnum.length)-1 do
begin
FillChar(ncb, SizeOf(TNCB), 0);
ncb.ncb_command := Char(NCBReset);
ncb.ncb_lana_num := lanaEnum.lana[i];
Netbios(@ncb);
Netbios(@ncb);
FillChar(ncb, SizeOf(TNCB), 0);
ncb.ncb_command := Chr(NCBAstat);
ncb.ncb_lana_num := lanaEnum.lana[i];
ncb.ncb_callname := '* ';
ncb.ncb_buffer := PChar(@adapt);
ncb.ncb_length := SizeOf(TASTAT);
m:=0;
if (Win32Platform = VER_PLATFORM_WIN32_NT) then
m:=1;
if m=1 then
begin
if Netbios(@ncb) = Chr(0) then
strMac := '';
for j := 0 to 5 do
begin
strPart := IntToHex(integer(adapt.adapter.adapter_address[j]), 2);
strMac := strMac + strPart + '-';
end;
SetLength(strMac, Length(strMac)-1);
end;
if m=0 then
if Netbios(@ncb) <> Chr(0) then
begin
strMac := '';
for j := 0 to 5 do
begin
strPart := IntToHex(integer(adapt.adapter.adapter_address[j]), 2);
strMac := strMac + strPart + '-';
end;
SetLength(strMac, Length(strMac)-1);
end;
end;
result:=strmac;
end;

function PartitionString(StrV,PrtSymbol: string): TStringList;
var
iTemp: integer;
begin
result := TStringList.Create;
iTemp := pos(PrtSymbol,StrV);
while iTemp>0 do begin
if iTemp>1 then result.Append(copy(StrV,1,iTemp-1));
delete(StrV,1,iTemp+length(PrtSymbol)-1);
iTemp := pos(PrtSymbol,StrV);
end;
if Strv<>'' then result.Append(StrV);
end;

function MacStr():String;
var
Str:TStrings;
i:Integer;
MacStr:String;
begin
MacStr:='';
Str:=TStringList.Create;
Str:=PartitionString(Getmac,'-');
for i:=0 to Str.Count-1 do
MacStr:=MacStr+Str[i];
Result:=MacStr;
end;

//==============================================


//調用示例
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit3.Text:=strpas(GetIdeSerialNumber);//取硬盤號
Edit2.text:=GetCPUIDStr;//CPU系列號
edit4.Text:=NBGetAdapterAddress(12);//非集成網卡
Edit1.text:=MacStr;//集成和非集成網卡

end;
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品国产一区二区三区久久狼黑人| 91精品国产乱码久久久久久蜜臀| 久久九九精品99国产精品| 亚洲视频在线播放| 久久这里只有精品视频首页| 亚洲理论在线a中文字幕| 69av在线视频| 欧美日韩在线视频一区| 91精品久久久久久| 国产91露脸中文字幕在线| 久久久久久久久久久亚洲| 色哟哟入口国产精品| 日韩成人av网| 欧美精品少妇videofree| 日韩激情av在线播放| 色99之美女主播在线视频| 国产日韩av在线| 亚洲日本aⅴ片在线观看香蕉| 日韩有码在线电影| 亚洲视频精品在线| 欧美在线观看网址综合| www.亚洲成人| 亚洲精品大尺度| 97碰碰碰免费色视频| 国产91色在线免费| 精品国产自在精品国产浪潮| 欧美国产日本在线| 在线观看欧美www| 久久久久久久电影一区| 少妇高潮久久久久久潘金莲| 欧美黑人性猛交| 亚洲成人久久电影| 91久久精品国产91性色| 午夜精品久久久久久久白皮肤| 亚洲美女久久久| 91精品国产九九九久久久亚洲| 国产一区二区三区欧美| 成人免费午夜电影| 久久最新资源网| 欧美尺度大的性做爰视频| 69av视频在线播放| 中文字幕精品视频| 欧美日韩在线看| 69久久夜色精品国产69| 国产精品视频不卡| 欧美交受高潮1| 国产精品午夜一区二区欲梦| 久久国产天堂福利天堂| 午夜精品久久久久久久男人的天堂| 欧美孕妇毛茸茸xxxx| 亚洲第一视频在线观看| 亚洲视频在线免费看| 91精品成人久久| 亚洲全黄一级网站| 亚洲va欧美va国产综合久久| 欧美亚洲午夜视频在线观看| 亚洲大胆人体av| 欧美日韩视频免费播放| 91国产高清在线| 国产欧美精品久久久| 国产精品白丝av嫩草影院| 久久久91精品国产一区不卡| 国产999视频| 亚洲综合中文字幕68页| 久久亚洲精品中文字幕冲田杏梨| 88国产精品欧美一区二区三区| 97视频在线观看亚洲| 欧美日韩在线影院| 精品国产拍在线观看| 亚洲另类欧美自拍| 日韩欧美高清在线视频| 亚洲情综合五月天| 久久久免费高清电视剧观看| 91禁外国网站| 精品欧美国产一区二区三区| 亚洲成人在线视频播放| 欧美精品少妇videofree| 在线日韩日本国产亚洲| 国产成人aa精品一区在线播放| 欧美色欧美亚洲高清在线视频| 亚洲欧洲偷拍精品| 成人黄色片在线| 国产高清视频一区三区| 91色视频在线导航| 97超视频免费观看| 欧美自拍大量在线观看| 在线观看日韩av| 日韩免费在线免费观看| 国内精品久久久久久久| 欧美视频裸体精品| 国产精品久久久久久久一区探花| 亚洲成色999久久网站| 国产精品精品久久久| 在线视频亚洲欧美| 成人免费视频网| 国产精品永久免费| 国产精品黄色影片导航在线观看| 日韩成人在线播放| 国产成人精品久久| 精品久久久久久中文字幕一区奶水| 国产欧美精品一区二区| 日韩欧美aⅴ综合网站发布| 欧美精品午夜视频| 日韩网站免费观看高清| 九九热这里只有精品免费看| 亚洲欧美日韩成人| 欧美激情免费看| 中文字幕精品视频| 亚洲天堂av电影| 国产精品免费久久久| 91po在线观看91精品国产性色| 国产亚洲精品久久久久久牛牛| 午夜精品www| 国产精品视频地址| 欧美性资源免费| 91精品国产综合久久香蕉的用户体验| 色综合久久天天综线观看| 国产欧美精品日韩| 亚州国产精品久久久| 亚洲国产中文字幕久久网| 国产成人精品日本亚洲| 日av在线播放中文不卡| 亚洲天堂日韩电影| 精品亚洲一区二区三区在线观看| 国产精品成人av性教育| 久久精品国产亚洲7777| 91美女福利视频高清| 亚洲精品一区二区在线| 欧美性猛交xxxx免费看久久久| 中文字幕欧美在线| 国产综合在线观看视频| 粉嫩老牛aⅴ一区二区三区| 91网站在线免费观看| 日韩高清有码在线| 欧美激情网站在线观看| 免费99精品国产自在在线| 色综合视频一区中文字幕| 在线免费观看羞羞视频一区二区| 国产精品激情自拍| 色婷婷综合久久久久| 国产欧美久久一区二区| 欧美乱大交xxxxx| 国产精品一区二区女厕厕| 久久免费国产精品1| 欧美在线日韩在线| 麻豆乱码国产一区二区三区| 亚洲精品一区av在线播放| 欧美日韩中文字幕综合视频| 亚洲美女在线视频| 日韩在线观看免费网站| 亚洲全黄一级网站| 欧美精品videos| 亚洲欧美成人在线| 久久久视频免费观看| 中文字幕最新精品| 日本精品久久中文字幕佐佐木| 欧美电影免费观看高清| 亚洲第一视频在线观看| 久久精品国产久精国产思思| 日韩精品视频中文在线观看| 欧美一级片一区| 欧美黑人xxx| 午夜欧美不卡精品aaaaa| 欧美二区乱c黑人|