View Full Version : تابعی برای  serial hard
  
firststep
سه شنبه 06 بهمن 1388, 00:44 صبح
سلام بر همگی و با عرض ادب
من نیاز به کدی دارم که کد خود سریال هاردو برام بگردونه البته خوده هارو نه درایوارو. چ.ن چیزایی که تو نت دیدم تمام ولیوم درایوا بودن- یه جورایی می خوام که کد منحصر به فردی باشه برای رایانه که تغییر هم نکنه.:متفکر:............................. .............. ممنونمم از همتون:لبخند::بوس:
yashar666
سه شنبه 06 بهمن 1388, 00:57 صبح
تابع یه کم سخته ولی این ocx  ببین به دردت می خوره
BEHESHT*
سه شنبه 06 بهمن 1388, 02:09 صبح
با استفاده از كامپوننت TGetDiskSerial VCL 4.0.0
براي همه ي ويندوز ها و هارد ها حتي جديدترين sataها خوب جواب ميده كار باهاش هم سادست:
آدرس شركت سازنده:
http://www.devlib.net (http://www.devlib.net/)
دلفــي
سه شنبه 06 بهمن 1388, 10:09 صبح
بخش اعلانات (مرجع توابع دلفی)
عنوان مطلب : تابع بدست آوردن مشخصات کامل هارد دیسک
نام تابع : ;function GetIdeSerialNumber(i:Integer) : String
majid_ramak
سه شنبه 06 بهمن 1388, 11:53 صبح
function GetIdeSerialNumber : String;
const IDENTIFY_BUFFER_SIZE = 512;
type
  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 for future use.  Must be zero.
  end;
  TSendCmdInParams = packed record
    // Buffer size in bytes
    cBufferSize  : DWORD;
    // Structure with drive register values.
    irDriveRegs  : TIDERegs;
    // Physical drive number to send command to (0,1,2,3).
    bDriveNumber : BYTE;
    bReserved    : Array[0..2] of Byte;
    dwReserved   : Array[0..3] of DWORD;
    bBuffer      : Array[0..0] of Byte;  // Input buffer.
  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
    // Error code from driver, or 0 if no error.
    bDriverError : Byte;
    // Contents of IDE Error register. Only valid when bDriverError is SMART_IDE_ERROR.
    bIDEStatus   : Byte;
    bReserved    : Array[0..1] of Byte;
    dwReserved   : Array[0..1] of DWORD;
  end;
  TSendCmdOutParams = packed record
    // Size of bBuffer in bytes
    cBufferSize  : DWORD;
    // Driver status structure.
    DriverStatus : TDriverStatus;
    // Buffer of arbitrary length in which to store the data read from the drive.
    bBuffer      : Array[0..0] of BYTE;
  end;
var hDevice : THandle;
    cbBytesReturned : DWORD;
    ptr : PChar;
    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 := ''; // return empty string on error
  if SysUtils.Win32Platform=VER_PLATFORM_WIN32_NT then // Windows NT, Windows 2000
    begin
      // warning! change name for other drives: ex.: second drive '\\.\PhysicalDrive1\'
      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;
    // Set up data structures for IDENTIFY command.
    with SCIP do
    begin
      cBufferSize  := IDENTIFY_BUFFER_SIZE;
//      bDriveNumber := 0;
      with irDriveRegs do
      begin
        bSectorCountReg  := 1;
        bSectorNumberReg := 1;
//      if Win32Platform=VER_PLATFORM_WIN32_NT then bDriveHeadReg := $A0
//      else bDriveHeadReg := $A0 or ((bDriveNum and 1) shl 4);
        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;
procedure TfrmMain.bbtnSerialNoClick(Sender: TObject);
begin
  edSerial.Text:= GetIdeSerialNumber;
end;
mah_par2009
شنبه 17 بهمن 1388, 19:23 عصر
با سلام خدمت شما دوست عزیز 
بعضی از کامپوننت های هارد که سریال هارد رو برمی گردونه و اکثرا برنامه نویس های برای کد گذاشتن در برنامشون استفاده می کنند بعد از تعویض سیستم عامل کد هم عوض می شه.اگر برای این منظور می خواهید
yaseriran
شنبه 17 بهمن 1388, 21:22 عصر
درود!
من در لینک زیر بدست آوردن درایورها رو گذاشتم، شاید بدردت بخوره!
http://barnamenevis.org/forum/showthread.php?t=203760
من آنم که در پای خوکان نریزم مر این قیمتی دُرّ لفظ دَری را (http://bidelaan.blogspot.com/2009/03/blog-post.html)
majid_ramak
یک شنبه 18 بهمن 1388, 09:41 صبح
دوست عزیز شماره سریال هارد مقدار یونیک داره که با تعویض سیستم عامل تغییر نمی کنه
تو Function که بالا نوشتم دقیقا مقدار صحیح سریال هارد رو بر میگردونه که دقیقا مقدار حک شده بر روی هارده ، جالب اینکه شما اگه این Function رو در محیط Virtual اجرا کنید مقداری به شما بر نمیگردونه و شما میتونید کنترل کنید که برنامتون در محیط های Virtual کار نکنه.
Emdad2001
پنج شنبه 25 آبان 1391, 22:55 عصر
سلام دوستان، حالا کسی کامپوننت GetDiskSerial VCL کرک شده رو داره ؟ من با نسخه آزمایشی کار کردم خوبه بدرد میخوره خیلی هم راحته اگه بشه که ...
BORHAN TEC
جمعه 26 آبان 1391, 18:37 عصر
سلام
در این آدرس قبلاً یک کامپوننت رو معرفی کرده بودم و لینک دانلودش رو هم قرار داده ام:
http://stackoverflow.com/questions/13215713/get-real-hdd-serial-number-with-delphi/13220400#13220400
شاهرخ عشایری
جمعه 26 آبان 1391, 18:49 عصر
با سلام خدمت دوستان عزیز
کامپوننت THddInfo را برای استفاده دوستان در همین پست ضمیمه کردم
 
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.