DELPHI读硬盘号,各种\数据线的

解决方案 »

  1.   

    function GetDriveSerialNo(Drive:String;Fmt:String):String;
    var VolSerNum,Dummy1,Dummy2:DWORD;
    begin
      if GetVolumeInformation(PChar(Drive+':\'),NIL,0,@VolSerNum,Dummy1,Dummy2,NIL,0) then
        Result:=Format(Fmt,[HiWord(VolSerNum),LoWord(VolSerNum)]);
    end;
      

  2.   

    delphi获得MAC地址interfaceuses
       Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
       Dialogs,   nb30, StdCtrls;    //加 nb30type
       TForm1 = class(TForm)
         Edit1: TEdit;
         procedure FormCreate(Sender: TObject);
       private
         { Private declarations }
       public
         { Public declarations }
       end;var
       Form1: TForm1;implementation{$R *.dfm}
    function GetNetBIOSAddress : string;
    var   ncb   : TNCB;
       status   : TAdapterStatus;
       lanenum : TLanaEnum;
         procedure ResetAdapter (num : char);
         begin
           fillchar(ncb,sizeof(ncb),0);
           ncb.ncb_command:=char(NCBRESET);
           ncb.ncb_lana_num:=num;
           Netbios(@ncb);
         end;
    var
       i:integer;
       lanNum   : char;
       address : record
                  part1 : Longint;
                  part2 : Word;
                 end absolute status;
    begin
       Result:='';
       fillchar(ncb,sizeof(ncb),0);
         ncb.ncb_command:=char(NCBENUM);
         ncb.ncb_buffer:=@lanenum;
         ncb.ncb_length:=sizeof(lanenum);
       Netbios(@ncb);
       if lanenum.length=#0 then exit;
       lanNum:=lanenum.lana[0];
       ResetAdapter(lanNum);
       fillchar(ncb,sizeof(ncb),0);
         ncb.ncb_command:=char(NCBASTAT);
         ncb.ncb_lana_num:=lanNum;
         ncb.ncb_callname[0]:='*';
         ncb.ncb_buffer:=@status;
         ncb.ncb_length:=sizeof(status);
       Netbios(@ncb);
       ResetAdapter(lanNum);
       for i:=0 to 5 do
       begin
         result:=result+inttoHex(integer(Status.adapter_address[i]),2);
         if (i<5) then
         result:=result+'-';
       end;
    end;
    //
    procedure TForm1.FormCreate(Sender: TObject);   //命令
    begin
    edit1.text:=GetNetBIOSAddress;
    end;
    end.
     获得cpu的号码的代码function NewCPUID: string;
    const
    CPUINFO = 'CPU制造商: %S 序列号: %x';
    var
    s: array[0..19] of Char;
    MyCpuID: Integer;
    begin
    FillChar(s, 20, 0);
    asm
        push ebx
        push ecx
        push edx
        mov eax, 0
        cpuid
        mov dword ptr s[0],    ebx
        mov dword ptr s[4],    edx
        mov dword ptr s[8],    ecx
        mov eax, 1
        cpuid
        mov MyCpuID, edx
        pop edx
        pop ecx
        pop ebx
    end;
    Result := Format(CPUINFO, [s, MyCpuID]);
    end; 
      

  3.   

    获得硬盘号码
    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;