نمایش نتایج 1 تا 9 از 9

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

  1. #1
    کاربر دائمی آواتار SYNDROME
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    تهران
    پست
    2,814

    Tick سریال سخت افزاری هارد دیسک و مشکل در کامپونتها.

    یک سوال قبلا تکرار شده ولی یک مشکلی وجود دارد.
    من می خواهم شماره سخت افزاری هارد را در بیاورم که البته در سایت کامپونتهایی برای این کار دوستان قرار داده اند که من از یکی از آنها استفاده کرده ام.
    ولی یک مشکل اساسی دارد و آن آین است که زمانی که هارد IDE است مشکلی نیست ولی اگر هارد ساتا باشد کامپونت فوق سریال CD Rom و یا DVD Rom که متصل به کابل IDE است را بر می گرداند.
    آیا دوست از این همه کامپونتی که در سایت است یکی را تست کرده اند که سریال هارد را برگرداند(چه IDE باشد و چه ساتا)
    با تشکر از همه دوستان
    موفق باشی

  2. #2
    کاربر دائمی آواتار Valadi
    تاریخ عضویت
    فروردین 1385
    محل زندگی
    فعلا در خدمت شما
    پست
    1,342
    با سلام علی جان
    این کد ببین
    unit hddinfo; 

    interface

    uses Windows, SysUtils, Classes;

    const
    IOCTL_STORAGE_QUERY_PROPERTY = $2D1400;

    type
    THDDInfo = class (TObject)
    private
    FDriveNumber: Byte;
    FFileHandle: Cardinal;
    FInfoAvailable: Boolean;
    FProductRevision: string;
    FProductId: string;
    FSerialNumber: string;
    FVendorId: string;
    procedure ReadInfo;
    procedure SetDriveNumber(const Value: Byte);
    public
    constructor Create;
    property DriveNumber: Byte read FDriveNumber write SetDriveNumber;
    property VendorId: string read FVendorId;
    property ProductId: string read FProductId;
    property ProductRevision: string read FProductRevision;
    property SerialNumber: string read FSerialNumber;
    function SerialNumberInt: Cardinal;
    function SerialNumberText: string;
    function IsInfoAvailable: Boolean;
    end;

    implementation

    type

    STORAGE_PROPERTY_QUERY = packed record
    PropertyId: DWORD;
    QueryType: DWORD;
    AdditionalParameters: array[0..3] of Byte;
    end;

    STORAGE_DEVICE_DESCRIPTOR = packed record
    Version: ULONG;
    Size: ULONG;
    DeviceType: Byte;
    DeviceTypeModifier: Byte;
    RemovableMedia: Boolean;
    CommandQueueing: Boolean;
    VendorIdOffset: ULONG;
    ProductIdOffset: ULONG;
    ProductRevisionOffset: ULONG;
    SerialNumberOffset: ULONG;
    STORAGE_BUS_TYPE: DWORD;
    RawPropertiesLength: ULONG;
    RawDeviceProperties: array[0..511] of Byte;
    end;

    function ByteToChar(const B: Byte): Char;
    begin
    Result := Chr(B + $30)
    end;

    function SerialNumberToCardinal (SerNum: String): Cardinal;
    begin
    HexToBin(PChar(SerNum), PChar(@Result), SizeOf(Cardinal));
    end;

    function SerialNumberToString(SerNum: String): String;
    var
    I, StrLen: Integer;
    Pair: string;
    B: Byte;
    Ch: Char absolute B;

    begin
    Result := '';
    StrLen := Length(SerNum);

    if Odd(StrLen) then Exit;

    I := 1;

    while I < StrLen do
    begin
    Pair := Copy (SerNum, I, 2);
    HexToBin(PChar(Pair), PChar(@B), 1);
    Result := Result + Chr(B);
    Inc(I, 2);
    end;

    I := 1;

    while I < Length(Result) do
    begin
    Ch := Result[I];
    Result[I] := Result[I + 1];
    Result[I + 1] := Ch;
    Inc(I, 2);
    end;
    end;

    constructor THddInfo.Create;
    begin
    inherited;

    SetDriveNumber(0);
    end;

    function THDDInfo.IsInfoAvailable: Boolean;
    begin
    Result := FInfoAvailable
    end;

    procedure THDDInfo.ReadInfo;
    type
    PCharArray = ^TCharArray;
    TCharArray = array[0..32767] of Char;

    var
    Returned: Cardinal;
    Status: LongBool;
    PropQuery: STORAGE_PROPERTY_QUERY;
    DeviceDescriptor: STORAGE_DEVICE_DESCRIPTOR;
    PCh: PChar;

    begin
    FInfoAvailable := False;
    FProductRevision := '';
    FProductId := '';
    FSerialNumber := '';
    FVendorId := '';

    try
    FFileHandle := CreateFile(
    PChar('\\.\PhysicalDrive' + ByteToChar(FDriveNumber)),
    0,
    FILE_SHARE_READ or FILE_SHARE_WRITE,
    nil,
    OPEN_EXISTING,
    0,
    0
    );

    if FFileHandle = INVALID_HANDLE_VALUE then RaiseLastOSError;

    ZeroMemory(@PropQuery, SizeOf(PropQuery));
    ZeroMemory(@DeviceDescriptor, SizeOf(DeviceDescriptor));

    DeviceDescriptor.Size := SizeOf(DeviceDescriptor);

    Status := DeviceIoControl(
    FFileHandle,
    IOCTL_STORAGE_QUERY_PROPERTY,
    @PropQuery,
    SizeOf(PropQuery),
    @DeviceDescriptor,
    DeviceDescriptor.Size,
    Returned,
    nil
    );

    if not Status then RaiseLastOSError;

    if DeviceDescriptor.VendorIdOffset <> 0 then
    begin
    PCh := @PCharArray(@DeviceDescriptor)^[DeviceDescriptor.VendorIdOffset];
    FVendorId := PCh;
    end;

    if DeviceDescriptor.ProductIdOffset <> 0 then
    begin
    PCh := @PCharArray(@DeviceDescriptor)^[DeviceDescriptor.ProductIdOffset];
    FProductId := PCh;
    end;

    if DeviceDescriptor.ProductRevisionOffset <> 0 then
    begin
    PCh := @PCharArray(@DeviceDescriptor)^[DeviceDescriptor.ProductRevisionOffset];
    FProductRevision := PCh;
    end;

    if DeviceDescriptor.SerialNumberOffset <> 0 then
    begin
    PCh := @PCharArray(@DeviceDescriptor)^[DeviceDescriptor.SerialNumberOffset];
    FSerialNumber := PCh;
    end;

    FInfoAvailable := True;
    finally
    if FFileHandle <> INVALID_HANDLE_VALUE then CloseHandle(FFileHandle);
    end;
    end;

    function THDDInfo.SerialNumberInt: Cardinal;
    begin
    Result := 0;
    if ((IsInfoAvailable = True) and (FSerialNumber <> '')) then Result := SerialNumberToCardinal(FSerialNumber)
    end;

    function THDDInfo.SerialNumberText: string;
    begin
    Result := '';
    if ((IsInfoAvailable = True) and (FSerialNumber <> '')) then Result := SerialNumberToString(FSerialNumber)
    end;

    procedure THDDInfo.SetDriveNumber(const Value: Byte);
    begin
    FDriveNumber := Value;
    ReadInfo;
    end;

    end.


    اگر با این کد مشکلت حل نشد دو تا کامپونت حرفه ای دارم در این زمینه یکی شون برنامه که ضمیمه کردم
    راستی علی جان برای قفل نرم افزاری بخواهی کامپونت جالبتری هم دارم
    فایل های ضمیمه فایل های ضمیمه

  3. #3
    کاربر دائمی آواتار SYNDROME
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    تهران
    پست
    2,814

    با سلام

    چطوری Valadi عزیز.
    کدی که گذاشتی مربوط به کامپونت HDDinfo است که دقیقاً مشکل فوق را دارد.
    برنامه ای هم که گذاشتی فقط Exe است و نتوانستم Source را نگاه کن.
    دوست عزیز من فقط یک کامپونت یا یک تکه Source می خواهم که بتواند سریال هارد را به درستی برگرداند چه هارد IDE باشد و چه ساتا.
    منتظر راهنمایی همه دوستان هستم
    موفق باشید

  4. #4
    VIP آواتار دنیای دلفی
    تاریخ عضویت
    فروردین 1403
    محل زندگی
    یک جایی توی جنوب ایران
    پست
    1,298
    دوست عزیز کامپوننت HDDInfo مشکلی ندارد استفاده صحیح از آن نشده یعنی پارامترها را باید به صورت دستی داخلش ست کرد تا هارد شما چه IDE باشد چه SATA چه SCASI جواب درست دهید . این هم روش صحیح استفاده . تست و بعد نتیجه رو اعلام کن
     
    // Try
    // HDD:=THDDInfo.Create(HDD);
    // HDD.Method := gimAuto;
    // for ii :=0 to 7 do
    // begin
    // try
    // case ii of
    // 0:HDD.Drive:=dPrimaryMaster;
    // 1:HDD.Drive:=dPrimarySlave;
    // 2:HDD.Drive:=dQuaternaryMaster;
    // 3:HDD.Drive:=dQuaternarySlave;
    // 4:HDD.Drive:=dSecondaryMaster;
    // 5:HDD.Drive:=dSecondarySlave;
    // 6:HDD.Drive:=dTertiaryMaster;
    // 7:HDD.Drive:=dTertiarySlave;
    // end;
    // case HDD.HDDType of
    // dtFixed:
    // if HDD.isIDE then
    // if HDD.Serial[1] <> #0 then
    // if Trim(HDD.Serial)<>'' then
    // begin
    // SerialCode:=HDD.Serial;
    // Break;
    // end;
    // end;
    //
    // except
    // end;
    //
    // end;
    //
    // HDD.Free;
    // Except
    // HDD.Free;
    // end;


  5. #5
    کاربر دائمی آواتار Valadi
    تاریخ عضویت
    فروردین 1385
    محل زندگی
    فعلا در خدمت شما
    پست
    1,342
    برنامه ای هم که گذاشتی فقط Exe است و نتوانستم Source را نگاه کن
    برنامه ای گذاشتم سریال هارد Sata را می دهد یا نه ؟؟

  6. #6
    با سلام
    component wmi set کارش دادن مشخصات تمام سخت افزارهاست.

  7. #7
    کاربر دائمی آواتار SYNDROME
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    تهران
    پست
    2,814

    با سلام

    نقل قول نوشته شده توسط Valadi مشاهده تاپیک
    برنامه ای گذاشتم سریال هارد Sata را می دهد یا نه ؟؟
    من هاردم Sata نیست و نتوانستم تست کنم.
    موفق باشید

  8. #8
    کاربر دائمی آواتار Valadi
    تاریخ عضویت
    فروردین 1385
    محل زندگی
    فعلا در خدمت شما
    پست
    1,342
    علی جان این کامپونت و دمو هم داره ببین
    موفق وموید باشید

  9. #9
    کاربر دائمی آواتار SYNDROME
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    تهران
    پست
    2,814

    با سلام

    نقل قول نوشته شده توسط Valadi مشاهده تاپیک
    علی جان این کامپونت و دمو هم داره ببین
    موفق وموید باشید
    دستت در د نکنه کارم راه افتاد.
    کامپونتی که در این مجموعه بود هم نام کامپونتی بود که من داشتم ولی یکی از تابع هایی که برای شما داشتید کامپونت من نداشت و مشکل از همان جا بود.
    موفق باشید

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •