PDA

View Full Version : نصب برنامه با توجه به سریال هارد



Mahdi_S_T
جمعه 06 خرداد 1384, 11:33 صبح
بعضی نرم افزارها وقتی نصب میشه یه شماره سریال میده که باید آنرا به شرکت مورد نظر اعلام کنی تا شماره سریال اصلی را بده ( ظاهرا با توجه به شماره سریال هارد این کار را میکند ) اگه دوستان اینچنین کدی نوشته اند . لطفا سورس انرا اینجا بگذارند .
با تشکر

Touska
جمعه 06 خرداد 1384, 11:42 صبح
کاری نداره با استفاده از کامپوننت MMSystem Information شماره سریال هارد رو بخون و بعد خودت یک فرمول براش

بساز. یک ضربی یا تقسیمی.

Source خوندن شماره سریال هارد هم تو اینترنت پر است.

موفق باشید
:flower:

Delphi Skyline
جمعه 06 خرداد 1384, 14:13 عصر
یا می تونی با یک الگوریتم اول عددی رو به بیننده بدی .
دوم اونو با الگوریتم دیگه تغییر بدی تا بخونش .
:موفق:

Delphi KDE
جمعه 06 خرداد 1384, 23:10 عصر
اگر جستجو میکردی قبلا مطرح شده بود
کد زیر را آقای کرامتی زحمتش رو کشیدند که میتونه شماره سریال هار رو به دست بیاری در اکثر کد های دیگر با فرمت کردن درایو کد تولید شده تغییر میکنه ولی در کد زیر شماره سریال واقعی هارد دیسک رو به شما میده که با فرمت کردن و پارتیشن بندی تغییر نمیکنه


//for windows 98 copy Smartvsd.vxd in %WINDIR%/System

program IdeSN;

// PURPOSE: Simple console application that extract first IDE disk serial number.

{$APPTYPE CONSOLE}

uses
Windows,
SysUtils; // only for Win32Platform and SysErrorMessage

//-------------------------------------------------------------
function GetIdeDiskSerialNumber : String;
type
TSrbIoControl = packed record
HeaderLength : ULONG;
Signature : Array[0..7] of Char;
Timeout : ULONG;
ControlCode : ULONG;
ReturnCode : ULONG;
Length : ULONG;
end;
SRB_IO_CONTROL = TSrbIoControl;
PSrbIoControl = ^TSrbIoControl;

TIDERegs = packed record
bFeaturesReg : Byte; // Used for specifying SMART "commands".
bSectorCountReg : Byte; // IDE sector count register
bSectorNumberReg : Byte; // IDE sector number register
bCylLowReg : Byte; // IDE low order cylinder value
bCylHighReg : Byte; // IDE high order cylinder value
bDriveHeadReg : Byte; // IDE drive/head register
bCommandReg : Byte; // Actual IDE command.
bReserved : Byte; // reserved. Must be zero.
end;
IDEREGS = TIDERegs;
PIDERegs = ^TIDERegs;

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;
SENDCMDINPARAMS = TSendCmdInParams;
PSendCmdInParams = ^TSendCmdInParams;

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 : ULONG;
wMultSectorStuff : Word;
ulTotalAddressableSectors : ULONG;
wSingleWordDMA : Word;
wMultiWordDMA : Word;
bReserved : Array[0..127] of Byte;
end;
PIdSector = ^TIdSector;

const
IDE_ID_FUNCTION = $EC;
IDENTIFY_BUFFER_SIZE = 512;
DFP_RECEIVE_DRIVE_DATA = $0007c088;
IOCTL_SCSI_MINIPORT = $0004d008;
IOCTL_SCSI_MINIPORT_IDENTIFY = $001b0501;
DataSize = sizeof(TSendCmdInParams)-1+IDENTIFY_BUFFER_SIZE;
BufferSize = SizeOf(SRB_IO_CONTROL)+DataSize;
W9xBufferSize = IDENTIFY_BUFFER_SIZE+16;
var
hDevice : THandle;
cbBytesReturned : DWORD;
pInData : PSendCmdInParams;
pOutData : Pointer; // PSendCmdOutParams
Buffer : Array[0..BufferSize-1] of Byte;
srbControl : TSrbIoControl absolute Buffer;

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 := '';
FillChar(Buffer,BufferSize,#0);
if Win32Platform=VER_PLATFORM_WIN32_NT then
begin // Windows NT, Windows 2000
// Get SCSI port handle
hDevice := CreateFile( '\\.\Scsi0:',
GENERIC_READ or GENERIC_WRITE,
FILE_SHARE_READ or FILE_SHARE_WRITE,
nil, OPEN_EXISTING, 0, 0 );
if hDevice=INVALID_HANDLE_VALUE then Exit;
try
srbControl.HeaderLength := SizeOf(SRB_IO_CONTROL);
System.Move('SCSIDISK',srbControl.Signature,8);
srbControl.Timeout := 2;
srbControl.Length := DataSize;
srbControl.ControlCode := IOCTL_SCSI_MINIPORT_IDENTIFY;
pInData := PSendCmdInParams(PChar(@Buffer)
+SizeOf(SRB_IO_CONTROL));
pOutData := pInData;
with pInData^ do
begin
cBufferSize := IDENTIFY_BUFFER_SIZE;
bDriveNumber := 0;
with irDriveRegs do
begin
bFeaturesReg := 0;
bSectorCountReg := 1;
bSectorNumberReg := 1;
bCylLowReg := 0;
bCylHighReg := 0;
bDriveHeadReg := $A0;
bCommandReg := IDE_ID_FUNCTION;
end;
end;
if not DeviceIoControl( hDevice, IOCTL_SCSI_MINIPORT,
@Buffer, BufferSize, @Buffer, BufferSize,
cbBytesReturned, nil ) then Exit;
finally
CloseHandle(hDevice);
end;
end
else
begin // Windows 95 OSR2, Windows 98
hDevice := CreateFile( '\\.\SMARTVSD', 0, 0, nil,
CREATE_NEW, 0, 0 );
if hDevice=INVALID_HANDLE_VALUE then Exit;
try
pInData := PSendCmdInParams(@Buffer);
pOutData := @pInData^.bBuffer;
with pInData^ do
begin
cBufferSize := IDENTIFY_BUFFER_SIZE;
bDriveNumber := 0;
with irDriveRegs do
begin
bFeaturesReg := 0;
bSectorCountReg := 1;
bSectorNumberReg := 1;
bCylLowReg := 0;
bCylHighReg := 0;
bDriveHeadReg := $A0;
bCommandReg := IDE_ID_FUNCTION;
end;
end;
if not DeviceIoControl( hDevice, DFP_RECEIVE_DRIVE_DATA,
pInData, SizeOf(TSendCmdInParams)-1, pOutData,
W9xBufferSize, cbBytesReturned, nil ) then Exit;
finally
CloseHandle(hDevice);
end;
end;
with PIdSector(PChar(pOutData)+16)^ do
begin
ChangeByteOrder(sSerialNumber,SizeOf(sSerialNumber ));
SetString(Result,sSerialNumber,SizeOf(sSerialNumbe r));
end;
end;

این هم روش استفاده از کد بالا :


var s : String;
rc : DWORD;
begin
s := GetIdeDiskSerialNumber;
if s='' then
begin
rc := GetLastError;
if rc=0 then WriteLn('IDE drive is not support SMART feature')
else WriteLn(SysErrorMessage(rc));
end
else WriteLn('Disk serial number: ''', s,'''');
end.

دنیای دلفی
شنبه 07 خرداد 1384, 11:15 صبح
متاسفانه این کد فقط برروی تعدادی از هارد دیسک ها جواب می دهد
:strange:

Mahdi_S_T
شنبه 07 خرداد 1384, 22:15 عصر
آدرس سایت این کامپوننت کجاست ؟ ( MMSystem Information)

دنیای دلفی
شنبه 07 خرداد 1384, 22:38 عصر
MMSystem Information

اصلا همچین کامپوننتی وجود ندارد .
:strange:

سالومه
یک شنبه 08 خرداد 1384, 11:08 صبح
کد زیر را آقای کرامتی زحمتش رو کشیدند...

http://delphi.cartall.com.pl/Pytania/pyt41.htm

؟ ؟ ؟ ؟ ؟ ؟ ؟ ؟ ؟ ؟ ؟ ؟ ؟ ؟

mnkh2005
یک شنبه 08 خرداد 1384, 11:29 صبح
حالا چطوری میشه سریال مادربرد را درآورد؟ ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

Delphi KDE
یک شنبه 08 خرداد 1384, 19:47 عصر
آدرس سایت این کامپوننت کجاست ؟ ( MMSystem Information)

فکر کنم Touskaمنظورش MiTeC System Information Component باشه
که نسخه بدون سورس رو میتونید از ادرس زیر مجانی تهیه کنید

http://www.mitec.cz

Mahdi_S_T
سه شنبه 10 خرداد 1384, 15:02 عصر
اون سورس بالایی ک جواب نداد.

بالاخره این همه نرم افزار که بصورت شماره سریال کار می کند و در سطح ایران پخش است از چی استفاده می کنند ( با همه هاردها هم کار می کنه ؟ )

javidtaheri
سه شنبه 10 خرداد 1384, 15:47 عصر
در کتاب 296 مثال آقای ریاضی این مثال آمده

Mahdi_S_T
چهارشنبه 11 خرداد 1384, 14:13 عصر
باید نگاه کنم ولی فکر کنم که اون لیبل را میدهد نه شماره سریال هارد را

Alen
جمعه 13 خرداد 1384, 07:33 صبح
کامپوننتی که Delphi KDE زحمت کشیده معرفی کرده (MiTec System Information) از لحاظ کارآیی حرف ندارد و انواع و اقسام شماره سریالها و دیگر اطلاعات مربوط به انواع سخت افزار را قابل دسترسی می کند ، دستش درد نکند :flower: :موفق: :تشویق:
فقط یک مشکل دارد و آن اینکه اگر آن را بر روی فرم قرار دهی در هر بار اجرای برنامه نام شرکت سازنده را اعلام می کند اگر راه حلی برای این مشکل وجود داشته باشد عالی است :sad2:

Mahdi_S_T
جمعه 13 خرداد 1384, 09:05 صبح
آخه اون نسخه شرط افزار است و ... . :sorry:

Alen
یک شنبه 15 خرداد 1384, 07:50 صبح
کسی راه حل دیگری ، کامپوننتی ، چیزی راجع به این موضوع ندارد ؟
راستی کتابی که javid معرفی کرده بود به درد خورد ؟ :گیج: :گیج: :گیج:

Mahdi_S_T
یک شنبه 15 خرداد 1384, 10:26 صبح
این تاپیک هم در مورد شماره سریال هارد بخث شده اما به نتیجه ای نرسیده :sorry:
http://www.barnamenevis.org/forum/viewtopic.php?t=26942

من نمیدانم که بقیه برنامه نویسان از چه کد یا کامپوننتی استفاده می کنند :گیج:

majid_afra222
یک شنبه 15 خرداد 1384, 14:49 عصر
سلام
من از این کد استفاده می کنیم٬‌تا حالا هم درست بوده تا نظر دوستان چی باشه :
(کل یونیت رو کپی کردم می بخشید)

unit Unit1
;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
HddLbl: TLabel;
Label2: TLabel;
procedure Button1Click(Sender: TObject);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
function GetIdeDiskSerialNumber : String;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

function TForm1.GetIdeDiskSerialNumber : String;
type
TSrbIoControl = packed record
HeaderLength : ULONG;
Signature : Array[0..7] of Char;
Timeout : ULONG;
ControlCode : ULONG;
ReturnCode : ULONG;
Length : ULONG;
end;
SRB_IO_CONTROL = TSrbIoControl;
PSrbIoControl = ^TSrbIoControl;

TIDERegs = packed record
bFeaturesReg : Byte; // Used for specifying SMART "commands".
bSectorCountReg : Byte; // IDE sector count register
bSectorNumberReg : Byte; // IDE sector number register
bCylLowReg : Byte; // IDE low order cylinder value
bCylHighReg : Byte; // IDE high order cylinder value
bDriveHeadReg : Byte; // IDE drive/head register
bCommandReg : Byte; // Actual IDE command.
bReserved : Byte; // reserved. Must be zero.
end;
IDEREGS = TIDERegs;
PIDERegs = ^TIDERegs;

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;
SENDCMDINPARAMS = TSendCmdInParams;
PSendCmdInParams = ^TSendCmdInParams;

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 : ULONG;
wMultSectorStuff : Word;
ulTotalAddressableSectors : ULONG;
wSingleWordDMA : Word;
wMultiWordDMA : Word;
bReserved : Array[0..127] of Byte;
end;
PIdSector = ^TIdSector;

const
IDE_ID_FUNCTION = $EC;
IDENTIFY_BUFFER_SIZE = 512;
DFP_RECEIVE_DRIVE_DATA = $0007c088;
IOCTL_SCSI_MINIPORT = $0004d008;
IOCTL_SCSI_MINIPORT_IDENTIFY = $001b0501;
DataSize = sizeof(TSendCmdInParams)-1+IDENTIFY_BUFFER_SIZE;
BufferSize = SizeOf(SRB_IO_CONTROL)+DataSize;
W9xBufferSize = IDENTIFY_BUFFER_SIZE+16;
var
hDevice : THandle;
cbBytesReturned : DWORD;
pInData : PSendCmdInParams;
pOutData : Pointer; // PSendCmdOutParams
Buffer : Array[0..BufferSize-1] of Byte;
srbControl : TSrbIoControl absolute Buffer;
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 := '';
FillChar(Buffer,BufferSize,#0);
if Win32Platform=VER_PLATFORM_WIN32_NT then
begin // Windows NT, Windows 2000, Windows XP
// Get SCSI port handle
hDevice := CreateFile('\\.\Scsi0:',
// Note: '\\.\C:' required administrative privileges.
GENERIC_READ or GENERIC_WRITE,
FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0);
if hDevice=INVALID_HANDLE_VALUE then Exit;
try
srbControl.HeaderLength := SizeOf(SRB_IO_CONTROL);
System.Move('SCSIDISK',srbControl.Signature,8);
srbControl.Timeout := 2;
srbControl.Length := DataSize;
srbControl.ControlCode := IOCTL_SCSI_MINIPORT_IDENTIFY;
pInData := PSendCmdInParams(PChar(@Buffer)
+SizeOf(SRB_IO_CONTROL));
pOutData := pInData;
with pInData^ do
begin
cBufferSize := IDENTIFY_BUFFER_SIZE;
bDriveNumber := 0;
with irDriveRegs do
begin
bFeaturesReg := 0;
bSectorCountReg := 1;
bSectorNumberReg := 1;
bCylLowReg := 0;
bCylHighReg := 0;
bDriveHeadReg := $A0;
bCommandReg := IDE_ID_FUNCTION;
end;
end;
if not DeviceIoControl( hDevice, IOCTL_SCSI_MINIPORT,
@Buffer, BufferSize, @Buffer, BufferSize,
cbBytesReturned, nil ) then
Exit;
finally
CloseHandle(hDevice);
end;
end
else
begin // Windows 95 OSR2, Windows 98, Windows ME
hDevice := CreateFile( '\\.\SMARTVSD', 0, 0, nil, CREATE_NEW, 0, 0 );
if hDevice=INVALID_HANDLE_VALUE then
Exit;
try
pInData := PSendCmdInParams(@Buffer);
pOutData := @pInData^.bBuffer;
with pInData^ do
begin
cBufferSize := IDENTIFY_BUFFER_SIZE;
bDriveNumber := 0;
with irDriveRegs do
begin
bFeaturesReg := 0;
bSectorCountReg := 1;
bSectorNumberReg := 1;
bCylLowReg := 0;
bCylHighReg := 0;
bDriveHeadReg := $A0;
bCommandReg := IDE_ID_FUNCTION;
end;
end;
if not DeviceIoControl( hDevice, DFP_RECEIVE_DRIVE_DATA,
pInData, SizeOf(TSendCmdInParams)-1, pOutData,
W9xBufferSize, cbBytesReturned, nil ) then
Exit;
finally
CloseHandle(hDevice);
end;
end;
with PIdSector(PChar(pOutData)+16)^ do
begin
ChangeByteOrder(sSerialNumber,SizeOf(sSerialNumber ));
SetString(Result,sSerialNumber,SizeOf(sSerialNumbe r));
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Close;
end;

procedure TForm1.FormShow(Sender: TObject);
var
s : String;
rc : DWORD;
begin
s := GetIdeDiskSerialNumber;
if s='' then
begin
rc := GetLastError;
if rc=0 then
HddLbl.Caption := 'IDE drive does not support SMART feature'
else
HddLbl.Caption := SysErrorMessage(rc);
end
else
HddLbl.Caption := s;
end;

end.

Mahdi_S_T
یک شنبه 15 خرداد 1384, 14:55 عصر
این همان کدی است که در صفحه یک همین تاپیک موجود است و من که تست می کنم پیغام خطای زیر را میدهد :



The system cannot find the file specified

majid_afra222
یک شنبه 15 خرداد 1384, 16:33 عصر
سلام
انگار درسته همون کده٬‌میبخشید. :embr:

Mahdi_S_T
یک شنبه 15 خرداد 1384, 20:32 عصر
شما که تعریف می کردی حالا بگو چرا روی هارد من کار نمی کنه :گیج:

Mahdi_S_T
دوشنبه 16 خرداد 1384, 20:57 عصر
کسی دیگر تابع یا کامپوننت جالب (رایگان) قابل ارایه نداره

Delphi Skyline
دوشنبه 16 خرداد 1384, 21:03 عصر
کسی دیگر تابع یا کامپوننت جالب (رایگان) قابل ارایه نداره
یه سری به swissdelphi بزن .

Mahdi_S_T
دوشنبه 16 خرداد 1384, 21:26 عصر
دوست عزیز ظاهرا شما هم بدنبال چنین کامپوننتی بودید (8 خردادMachineID Library SDK ) آیا این را جدیدا پیدا کردید یا نه ؟
http://www.barnamenevis.org/forum/viewtopic.php?t=26942

میشه یه شمه ای از کارایی آنرا بگویید یا سایت آن ؟

Mahdi_S_T
چهارشنبه 18 خرداد 1384, 16:15 عصر
دوست من ؛ دنیای دلفی ؛ چی شد ؟ جوابی ندادی :wise1:

دنیای دلفی
چهارشنبه 18 خرداد 1384, 17:52 عصر
این کامپوننت یک شماره سریال منحصربفرد از ترکیب شماره سریال واقعی HDD و BIOS مادربورد می دهد .
به علاوه امکانات بسیار بالاتر
:موفق:

یک سرچ تو google بزن نام سایتوشو پیدا کن و نسخه Trial اون رو دانلود کن .
:تشویق:

Mahdi_S_T
پنج شنبه 19 خرداد 1384, 22:15 عصر
اگه MiTeC System Information Component Suite version 9.1.0 را داشته باشی خیلی بهتره چون این امکان هست که فقط شماره سریال هارد را بدست بیاری و خیلی امکانات دیگه ؟

Alen
دوشنبه 23 خرداد 1384, 06:44 صبح
Mahdi_S_T نظرت در مودر اینکه چند نفر جمع شویم و نسخه اصلی MiTec System Information را بخریم چیه قیمتش 110 یورو است و سورس آن نیز همراهش است :wink:

دنیای دلفی
دوشنبه 23 خرداد 1384, 11:48 صبح
من هستم :flower:

Mahdi_S_T
دوشنبه 23 خرداد 1384, 13:41 عصر
به شرطی که چند نفری بشیم

Mahdi_S_T
دوشنبه 23 خرداد 1384, 13:41 عصر
تا نظر دوستان دیگه چی باشه ؟

koosha system
دوشنبه 23 خرداد 1384, 19:26 عصر
دوستان این رو من امتحان کردم. رو 3 تا کامپیوتر به درستی جواب داد بدون هیچ مشکلی.با این کد می تونید برنامه رجیستری بسازید. خلاصه 1 کدی میده

function GetHardSerial:integer;
var
SerialNum: DWord;
A,B: DWord;
C: array [0..255] of Char;
Buffer: array [0..255] of Char;
begin
if GetVolumeInformation(
PChar('C:\'),
Buffer,
256,
@SerialNum,
A,
B,
C,
256) then Result:=SerialNum;
end;

دنیای دلفی
دوشنبه 23 خرداد 1384, 20:14 عصر
دوست عزیز این کد شماره سریال یک درایو را بر می گرداند و با فرمت درایو تغییر می کند .
:strange:

Mahdi_S_T
دوشنبه 23 خرداد 1384, 20:52 عصر
اگه جناب کرامتی این تابع رو بنویسه خیلی ها اینو لازم دارند و میشه به قیمت مناسب عرضه بشه :kaf:
اما به شرطی که روی همه هاردها کار کنه ؟ ( جایی که همکار سایت بتونه اینکارو بکنه برای چی کامپوننت خارجی بخریم )

جناب کرامتی - لطفا نظرتان را بدهید

Inprise
چهارشنبه 25 خرداد 1384, 00:29 صبح
<span dir=ltr>



THDDInfo - nonvisual Delphi component provided low level information about IDE, SCSI and ATAPI devices.

Supports both Win9x (IDE and ATAPI only) and WinNT platforms, on WinNT also provided information about SCSI devices.

Provided information:

drive type
Model sting
Firmware revision
Serial number
For IDE also:
drive geometry (cylinders, heads, sectors per track)
LBA sectors count
drive size (nonformatted)
Controller buffer size </span>

رایگان و سورس آزاد
http://artsoft.nm.ru/download/hddinfo.zip

دنیای دلفی
چهارشنبه 25 خرداد 1384, 12:01 عصر
:flower: :تشویق:

Mahdi_S_T
چهارشنبه 25 خرداد 1384, 20:27 عصر
:flower: :flower:

Alen
یک شنبه 29 خرداد 1384, 12:09 عصر
Inprise
خیلی دمت گرم ، خیلی مرسی :تشویق: :تشویق: :flower: :موفق:

Alen
یک شنبه 29 خرداد 1384, 12:12 عصر
این componenet واقعا جالب و به درد بخور بود ولی اگه کسی کامپوننتی برای سریال main board و ... هم سراغ داشته باشه ممنون می شم که معرفی کنه :embr: