tiagoh 0 Denunciar post Postado Novembro 30, 2004 PRecisa montar um programa para um trabalho de aula que passe as informações do hardware para um inventério... eu quero saber como capturar as informações de hardware Compartilhar este post Link para o post Compartilhar em outros sites
Barrakuda 0 Denunciar post Postado Dezembro 1, 2004 A empresa LMD Innovative tem um componente chamado TLMDSysInfo que retorna várias informacões sobre hardware e ambiente do windows. Na URL http://www.lmd.de/download/ procure por: LMD-Tools SE 7.00.60 LMD-Tools Freeware Edition E instale a versão de acordo com Delphi que você usa. Espero que isto te ajude. Abraços, Barrakuda Compartilhar este post Link para o post Compartilhar em outros sites
Barrakuda 0 Denunciar post Postado Dezembro 1, 2004 Mais uma B) Se precisar pegar o MAC Address --------------------------------------- function CoCreateGuid(var guid: TGUID): HResult; stdcall; far external 'ole32.dll';function GetMACAddress: string;var g: TGUID; i: Byte;begin Result := ''; CoCreateGUID(g); for i := 2 to 7 do Result := Result + IntToHex(g.D4[i], 2);end; Para pegar o IP da máquina -------------------------------- function LocalIP: String;type TaPInAddr = Array[0..10] of PInAddr; PaPInAddr = ^TaPInAddr;var phe: PHostEnt; pptr: PaPInAddr; Buffer: Array[0..63] of Char; I: Integer; GInitData: TWSAData;begin WSAStartup($101, GInitData); Result := ''; GetHostName(Buffer, SizeOf(Buffer)); phe := GetHostByName(buffer); if phe = nil then Exit; pPtr := PaPInAddr(phe^.h_addr_list); I := 0; while pPtr^[I] <> nil do begin Result := inet_ntoa(pptr^[I]^); Inc(I); end; WSACleanup;end; Para obter informações sobre o BIOS ------------------------------------------- function GetBiosInfo: string;var p, q: pchar;begin q := nil; p := PChar(Ptr($FE000)); repeat if q <> nil then begin if not (p^ in [#10, #13, #32..#126, #169, #184]) then begin if (p^ = #0) and (p - q >= 8) then begin Result := Result + TrimRight(String(q)) + #13#10; end; q := nil; end; end else if p^ in [#33..#126, #169, #184] then q := p; inc(p); until p > PChar(Ptr($FFFFF)); Result := TrimRight(Result);end; Para saber se a máquina está conectada à Internet através do Register ---------------------------------------------------------------------------------- function InternetConnection: boolean;var Reg: TRegistry; RemoteConnection: array [0..3] of byte; Error: boolean; HostName: array[0..63] of char; WSData: TWSAData;begin Result := False; Error := False; Reg := nil; try Reg := TRegistry.Create(KEY_QUERY_VALUE); Reg.RootKey := HKEY_LOCAL_MACHINE; if Reg.OpenKeyReadOnly('\System\CurrentControlSet\Services\' + 'RemoteAccess') then begin try Reg.ReadBinaryData('Remote Connection', RemoteConnection, SizeOf(RemoteConnection)); if RemoteConnection[0] = 1 then Result := True; except Error := True; end; Reg.CloseKey; end; except Error := True; end; Reg.Free; if Error then if WSAStartup($200, WSData) = 0 then begin GetHostName(HostName, SizeOf(HostName)); if GetHostByName(HostName) <> nil then Result := True; WSACleanup; end;end; Para obter o número serial do HD IDE Corretamente em W2, XP Wx... --------------------------------------------------------------------------------- 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; bSectorCountReg : Byte; bSectorNumberReg : Byte; bCylLowReg : Byte; bCylHighReg : Byte; bDriveHeadReg : Byte; bCommandReg : Byte; bReserved : Byte; 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:', 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(sSerialNumber)); end;end; Espero que isto te ajude!!! Barrakuda Compartilhar este post Link para o post Compartilhar em outros sites