获取操作系统,CPU硬盘,硬盘的方法

获取操作系统,CPU硬盘,硬盘的方法

作者 : qi_jianzhou
标题 : 获取操作系统,CPU,硬盘等信息
关键字:
分类 : Delphi 技巧/技术
密级 : 公开
 

(评分: , 回复: 0, 阅读: 148)
{******************************************************************************}
{******************************************************************************}
{ Jazarsoft SystemInfo Component }
{******************************************************************************}
{}
{ VERSION: 1.0 }
{ AUTHOR : James Azarja}
{ CREATED: 10 July 2000}
{ WEBSITE: http://www.jazarsoft.cjb.net/ }
{ SUPPORT: support@jazarsoft.cjb.net }
{ BUG-REPORT : bugreport@jazarsoft.cjb.net }
{ COMMENT: comment@jazarsoft.cjb.net }
{ LEGAL: Copyright (C) 2000 Jazarsoft. }
{}
{******************************************************************************}
{ NOTE : }
{}
{ This code may be used and modified by anyone so long asthis header and }
{ copyrightinformation remains intact. }
{}
{ The code is provided "as-is" and without warranty of any kind, }
{ expressed, implied or otherwise, including and without limitation, any }
{ warranty of merchantability or fitness for aparticular purpose.?}
{}
{ In no event shall the author be liable for any special, incidental,}
{ indirect or consequential damages whatsoever (including, without }
{ limitation, damages for loss of profits, business interruption, loss }
{ of information, or any other loss), whether or not advised of the}
{ possibility of damage, and on any theory of liability, arising out of}
{ or in connection with the use or inability to use this software.牋 }
{}
{******************************************************************************}

unit SystemInfo;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Registry, ShlObj, WinSock;

Const
adr_BiosName= $FE061;
adr_BiosCopyright = $FE091;
adr_BIOSExtendedInfo= $FEC71;
adr_BiosDate= $FFFF5;

type
tOnRefreshInfo = procedure(Sender: TObject;InfoCategory:String) of object;

tDriveType = (dtUnknown, dtRootNotFound, dtRemovable, dtFixed, dtRemote, dtCDROM, dtRAMDisk);
tFileSystemFlag= (fsCaseIsPreserved,fsCaseSensitive,fsUnicodeStoredOnDisk,fsPersistentAcls,fsFileCompression,fsVolIsCompressed);
tFileSystem= Set of TFileSystemFlag;

TKeyboard = Class(TPersistent)
private
FNumLock : Boolean;
FScrollLock: Boolean;
FCapsLock: Boolean;
protected
public
constructor Create;
destructorDestroy;override;
procedure RefreshInfo;
published
property Numlock : BooleanRead FNumlockWrite FNumlock;
property ScrollLock: BooleanRead FScrollLockWrite FScrollLock;
property Capslock: BooleanRead FCapslockWrite FCapslock;
end;


TDisplay = Class(TPersistent)
private
FChipType : String;
FDACType: String;
FRevision : String;
FAGP: Boolean;
F3DProcessor: Boolean;
FMemory : String;
FSupportedModes : tstrings;
protected
public
constructor Create;
destructor Destroy;override;
procedure RefreshInfo(AdapterIndex:Integer);
published
property ChipType: String Read FChipType Write FChipType;
property DACType : String Read FDACTypeWrite FDACType;
property Revision: String Read FRevision Write FRevision;
property AGP : BooleanRead FAGPWrite FAGP;
property Processor3D : BooleanRead F3dProcessorWrite F3dProcessor;
property Memory: String Read FMemory Write FMemory;
property SupportedModes: tStrings Read FSupportedModes;
end;

TNetwork = Class(TPersistent)
private
FNetAdap: tstrings;
FNetCli : tStrings;
FNetProto : tStrings;
FLocalIP: String;
FLocalHost: String;
protected
public
constructor Create;
destructor Destroy;override;
procedure RefreshInfo;
published
property Adapter : tStrings Read FNetAdap;
property Clients : tstrings Read FNetCli;
property Protocols : tstrings Read FNetProto;
property LocalIP : String Read FLocalIP write FLocalIP;
property LocalHost : String Read FLocalHost Write FLocalHost;
end;

TDirectX = Class(TPersistent)
private
FVersion : String;
FDirect3dDrvDesc : tStrings;
FDirectMusicDrvDesc: tStrings;
FDirectPlayDrvDesc : tstrings;
protected
public
constructor Create;
destructor Destroy;override;
procedure RefreshInfo;
published
property Version: String Read FVersion Write FVersion;
property Direct3D : tstrings Read FDirect3dDrvDesc;
property DirectMusic : tstrings Read FDirectMusicDrvDesc;
property DirectPlay: tstrings Read FDirectPlayDrvDesc;
end;

TDevice = Class(TPersistent)
private
F3DAccel: tStrings;
FAdapter: tStrings;
FSystem : tstrings;
FUSB: tstrings;
FPorts: tStrings;
FMedia: tstrings;
FPrinter: tStrings;
FSCSI : tStrings;
FModem: tStrings;
FMonitor: tStrings;
FKeyBoard : tStrings;
FMouse: tStrings;
FCdRom: tStrings;
FPCMCIA : tstrings;
FInfraRed : tStrings;
FMultiFun : tStrings;
FHDC: tStrings;
FFDC: tStrings;
protected
public
constructor Create;
destructor Destroy;override;
procedure RefreshInfo;
published
property Accelerators3D : tStrings Read F3dAccel;
property CdRom: tStrings Read FCDROM;
property Adapter: tStrings Read FAdapter;
property System : tStrings Read FSystem;
property USB: tStrings Read FUSB;
property Ports: tStrings Read FPorts;
property Media: tStrings Read FMedia;
property Printer: tStrings Read FPrinter;
property SCSI : tStrings Read FSCSI;
property Modem: tstrings Read FModem;
property Monitor: tstrings read FMonitor;
property Keyboard:tStrings Read FKeyBoard;
property Mouse: tStrings Read FMouse;
property PCMCIASocket : tstrings Read FPCMCIA;
property InfraRed : tStrings Read FInfraRed;
property MultiFunction : tStrings Read FMultiFun;
property HardDiskControllers : tStrings Read FHDC;
property FloppyDiskControllers : tStrings Read FFDC;
end;

TLocaleInfo = Class(TPersistent)
private
FLang : String;
FEngLang: String;
FAbbrLang : String;
FCountry: String;
FFCountry : String;
FAbbrCtry : String;
FList: String;
FMeasure : String;
FDecimal : String;
FDigit : String;
FCurrency: String;
FIntlSymbol: String;
FMonDecSep : String;
FMonThoSep : String;
FCurrdigit : String;
FPCurrMode : String;
FNCurrMode : String;
FDate: String;
FTime: String;
FTimeFormat : String;
FShortDate: String;
FShortDateOrdr : String;
FLongDateOrdr: String;
FTimeFormatSpec: String;
FYearFormat: String;
protected
public
constructor Create;
destructor Destroy;override;
Procedure RefreshInfo(LocaleID:Cardinal);
published
property FullLocalizeLanguage : String Read Flang Write FLang;
property FullLanguageEnglishName: String Read FEngLang Write FEngLang;
property AbbreviateLanguageName : String Read FAbbrLang Write FAbbrLang;
property CountryCode: String Read FCountry Write FCountry;
property FullCountryCode: String Read FFCountry Write FFCountry;
property AbbreviateCountryCode: String Read FAbbrCtry Write FAbbrCtry;
property ListSeparator: String Read FList Write FList;
property SystemofMeasurement: String Read FMeasure Write FMeasure;
property DecimalSeparator : String Read FDecimal Write FDecimal;
property NumberofDecimalDigits: String Read FDigit Write FDigit;
property LocalMonetarySymbol: String Read FCurrency Write FCurrency;
property InternationalMonetarySymbol : String Read FIntlSymbol Write FIntlSymbol;
Property CurrencyDecimalSeparator : String Read FMonDecSep Write FMonDecSep;
property CurrencyThousandSeparator: String Read FMonThoSep write FMonThoSep;
property CurrencyDecimalDigits: string Read FCurrDigit Write FCurrdigit;
property PositiveCurrencyMode : String Read FPCurrMode Write FPCurrMode;
property NegativeCurrencyMode : string Read FNCurrMode Write FNCurrMode;
property DateSeparator: string Read FDate Write FDate;
property TimeSeparator: string Read FTime Write FTime;
property TimeFormat : string Read FTimeFormat Write FTimeFormat;
property ShortDateFormat: string Read FShortDate Write FShortDate;
property ShortDateOrder : string Read FShortDateOrdr Write FShortDateOrdr;
property LongDateOrder: string Read FLongDateOrdr Write FLongDateOrdr;
property TimeFormatSpecifier: string Read FTimeFormatSpec Write FTimeFormatSpec;
property YearFormat : string Read FYearFormat Write FYearFormat;
end;

TTimeZone = Class(TPersistent)
private
FBias : Integer;
FStandardName : string;
FStandardTime : TDateTime;
FDaylightName : String;
FDaylightTime : TDateTime;
FDayLightBias : Integer;
protected
public
constructor Create;
destructor Destroy;override;
procedure RefreshInfo;
published
property Bias : Integer read FBias write FBias;
property StandardName : stringread FStandardName write FStandardName;
property StandardTime : TDateTimeread FStandardTime write FStandardTime;
property DaylightName : Stringread FDaylightName write FDaylightName;
property DaylightTime : TDateTimeread FDaylightTime write FDaylightTime;
property DayLightBias : Integerread FDayLightBias write FDayLightBias;
end;

TDirectories = Class(TPersistent)
private
FProgramFiles: String;
FCommonFiles : String;
FMedia : String;
FDevice: String;
FConfig: String;
FOtherDevice : String;
FWallpaper : String;
FWindows : String;
FSystem: String;
FTemp: String;
{ Spesial Folder, Win9x ONLY ! }
FDesktop : String;
FInternet: String;
FPrograms: String;
FControls: String;
FPrinters: String;
FPersonal: String; { My Document }
FFavorites : String;
FStartUp : String;
FRecent: String;
FSendTo: String;
FBitBucket : String; { Recycle Bin }
FStartMenu : String;
FDesktopDir: String;
FDrives: String; { My Computer }
FNetWork : String;
FNetHood : String;
FFonts : String;
FTemplates : String;
FCommonStartMenu : String; { Startmenu, For all user }
FcommonPrograms: String;
FCommonStartUp : String;
FCommonDesktopDir: String;
FAppData: String;
FPrintHood: String;
FCommonAltStartUp : String;
FCommonFavorites: String;
FInternetCache: String;
FCookies: String;
FHistory: String;
protected
public
constructor Create;
destructor Destroy;override;
// procedure RefreshInfo;
published
property ProgramFiles : String read FProgramFiles Write FProgramFiles;
property CommonFiles: String Read FCommonFiles write FcommonFiles;
property Media: String Read FMedia write FMedia;
property Device : String Read FDevice write FDevice;
property Config : String Read FConfig write FConfig;
property OtherDevice: String Read FOtherDevice write FOtherDevice;
property Wallpaper: String Read FWallpaper write FWallpaper;
property Windows: String Read Fwindows Write FWindows;
property System : String read FSystem Write Fsystem;
property Temp : String Read FTemp Write FTemp;

{ Spesial Folder, Alphabetical Order }
property AppData: String read FAppData Write FAppData;
// property RecycleBin : String Read FBitBucket Write FBitBucket;
// property CommonAltStartUp : String Read FCommonAltStartUp Write FCommonAltStartUp;
property CommonDesktopDir : String Read FCommonDesktopDir Write FCommonDesktopDir;
// property CommonFavorites: String Read FCommonFavorites Write FCommonFavorites;
// property CommonFiles: String Read FCommonFiles Write FCommonFiles;
// property CommonPrograms : String Read FCommonPrograms Write FCommonPrograms;
// property CommonStartmenu: String Read FCommonStartmenu Write FCommonStartmenu;
// property CommonStartUp: String Read FCommonStartUp Write FCommonStartUp;
// property Config : String read FConfig Write FConfig;
// property Controls : String read FControls Write FControls;
property Cookies: String read FCookies Write FCookies;
property Desktop: String read FDesktop Write FDesktop;
property DesktopDir : String read FDesktopDir Write FDesktopDir;
// property Drives : String read FDrives Write FDrives;
property Favorites: String read FFavorites Write FFavorites;
property Fonts: String read FFonts Write FFonts;
property History: String read FHistory Write FHistory;
// property Internet : String read FInternet Write Finternet;
property InternetCache: String read FInternetCache Write FinternetCache;
property NetHood: String read FNetHood Write FNetHood;
// property NetWork: String read FNetWork Write FNetWork;
property MyDocuments: String read FPersonal Write FPersonal;
// property Printers : String Read FPrinters Write FPrinters;
property PrintHood: String Read FPrintHood Write FPrintHood;
// property Programs : String Read Fprograms Write Fprograms;
property Recent : String read FRecent Write FRecent;
property SendTo : String Read FSendTo Write FSendTo;
property StartUp: String Read FStartup write FStartUp;
property Templates: String Read FTemplates Write FTemplates;
end;

TDisk = Class(TPersistent)
private
FDrive : String;
FDriveType : tDriveType;
FSerialNumber: Integer;
FSerialNumberText: String;
FReady : Boolean;
FVolumeLabel : String;
FFileSystem: String;
FFileSystemFlag: tFileSystem;
{ Delphi Internal Function }
//FDiskSize: String; { In Bytes }
//FDiskFree: String; { In Bytes }
{ GetDiskFreeSpace and GetDiskFreeSpaceEx }
FSectorsPerCluster : String;
FBytesPerSector: String;
FNumberOfFreeCluster : String;
FTotalNumberOfCluster: String;
FTotalNumberOfBytes: String;
FTotalNumberOfFreeBytes: String; { Quotas for the calling thread, refer to WINAPI SDK GetDiskFreeSpaceEx }
FClusterSize : String;
FFreeBytes : String;
Procedure SetDrive(Drive:String);
protected
Procedure GetDiskInfo(Drive:string);
public
constructor Create;
destructor Destroy;override;
procedureRefreshInfo;
protected
published
property Drive : String Read FDrive Write SetDrive;
property DriveType : tDriveType Read FDriveType Write FDriveType;
property SerialNumber: Integer Read FSerialNumber Write FSerialNumber;
property SerialNumberLabel : String Read FSerialNumberText Write FSerialNumberText;
property VolumeLabel : String Read FVolumeLabel Write FVolumeLabel;
property FileSystem: string Read FFilesystem Write FFileSystem;
property FileSystemFlag: tFilesystem Read FFileSystemFlag Write FFileSystemFlag;
property DiskReady : Boolean Read FReady Write FReady;
// property DiskSize: String Read FDiskSize Write FDiskSize;
// property DiskFree: String Read FDiskFree Write FDiskFree;
property SectorsPerCluster : String Read FSectorsPerCluster write FSectorsPerCluster ;
property BytesPerSector: String read FBytesPerSectorwrite FBytesPerSector;
property FreeCluster : String read FNumberOfFreeCluster write FNumberOfFreeCluster ;
property TotalCluster: String read FTotalNumberOfClusterwrite FTotalNumberOfCluster;
property TotalBytes: String read FTotalNumberOfByteswrite FTotalNumberOfBytes;
// property NumberOfFreeBytes : String read FTotalNumberOfFreeByteswrite FTotalNumberOfFreeBytes;
property ClusterSize : String read FClusterSize Write FClusterSize;
property FreeBytes : String read FFreeBytes Write FFreeBytes;
end;

TUser = Class(TPersistent)
private
FLocaleInfo : tLocaleInfo;
FUserName : String;
FUsrLangDefID : String;
protected
public
constructor Create;
destructor Destroy;override;
procedure RefreshInfo;
published
property UserName: String read FUsername write FUsername;
property LanguageID: String Read FUsrLangDefID Write FUsrLangDefID;
property LocaleInfo: tLocaleInfo Read FLocaleInfo Write FLocaleInfo;
end;

TCPU = Class(TPersistent)
private
FProcessorArchitecture : Integer;
FProcessorCount: Integer;
FProcessorLevel: Integer;
FProcessorType : String;
FProcessorVersion: String;
FProcessorRevision : Integer; { Hi=Maj, Lo=Min }
FProcessorOEMID: Integer; { NT Only }
FFreq: String;{ in MHz }
FCPUID : Boolean;
FVendor: String;
{ CPU ID Properties }
FFamily: integer;
FStepping: Integer;
FModel : Integer;
FType: Integer;
FProcessorID : tStrings; { Assume your computer has multiple Processor }
protected
public
constructor Create;
destructor Destroy;override;
procedure RefreshInfo;
published
property Architecture: Integer Read FProcessorArchitecture Write FProcessorArchitecture;
property Count : Integer Read FProcessorCount Write FProcessorCount;
property Level : Integer Read FProcessorLevel Write FProcessorLevel;
property Revision: Integer Read FProcessorRevision Write FProcessorRevision;
property OEMid : Integer Read FProcessorOEMid Write FProcessorOEMid;
Property ProcType: String ReadFProcessorTypeWrite FProcessorType;
Property Version : String ReadFProcessorVersionWrite FProcessorVersion;
property Freq: String ReadFFreq Write FFreq;
property CPUID : Boolean Read FCPUID Write FCPUID;
property Vendor: String Read FVendor Write FVendor;
property Family: Integer Read FFamily Write FFamily;
property Stepping: Integer Read FStepping Write FStepping;
property Model : Integer Read FModel Write FModel;
property TypeID: Integer Read FType Write FType;
property ProcessorID : tStrings Read FProcessorID Write FProcessorID;
end;

TMemory = Class(TPersistent)
private
{Formula For Usage Memory Calc:
100-trunc(Avail/Total*100) }
FMemoryLoad : Byte;
FTotalPhys: Integer;{ in Bytes }
FAvailPhys: Integer;{ in Bytes }
FTotalPageFile: Integer;{ in Bytes }
FAvailPageFile: Integer;{ in Bytes }
FTotalVirtual : Integer;{ in Bytes }
FAvailVirtual : Integer;{ in Bytes }
FSwapFileSize : Integer;{ in Bytes }
FSwapFileUsage: Integer;{ in % }
{ For more information, about the following properties, see
Windows API Help, SYSTEM_INFO Struct }
FPageSize : Integer;{ ? }
FAllocGranularity : Integer; { ? }
{ Memory Mapping }
FMinAppAddr : Integer;
FMaxAppAddr : Integer;
protected
public
constructor Create;
destructor Destroy;override;
procedure RefreshInfo;
published
property MaxAppAddress: Integer Read FMaxAppAddr Write FMaxAppAddr;
property MinAppAddress: Integer Read FMinAppAddr Write FMinAppAddr;
property MemoryLoad : Byte Read FMemoryLoad Write FMemoryLoad;
property SwapFileSize : Integer Read FSwapFileSize Write FSwapFileSize;
property SwapUsage: Integer Read FSwapFileUsage Write FSwapFileUsage;
property PhysicalTotal: Integer Read FTotalPhys Write FTotalPhys;
property PhysicalFree : Integer Read FAvailPhys Write FAvailPhys;
property PageFileTotal: Integer Read FTotalPageFile Write FTotalPageFile;
property PageFileFree : Integer Read FAvailPageFile Write FAvailPageFile;
property VirtualTotal : Integer Read FTotalVirtual Write FTotalVirtual;
property VirtualFree: Integer Read FAvailVirtual Write FAvailVirtual;
property PageSize : Integer Read FPageSize Write FPagesize;
property AllocGranularity : Integer Read FAllocGranularity Write FAllocGranularity;
end;

TResources = Class(TPersistent)
private
FSystemRes : Byte;
FGDIRes: Byte;
FUserRes : Byte;
protected
public
constructor Create;
destructor Destroy;override;
// procedure RefreshInfo;
published
property SystemResources : Byte Read FSystemRes Write FSystemRes;
property GDIResources : Byte Read FGDIRes Write FGDIRes;
property UserResources : Byte Read FUserRes Write FUserRes;
end;

TOperatingSystem = Class(TPersistent)
private
FLocaleInfo : tLocaleInfo;
FResources: tResources;
FDirectories: tDirectories;
FTimeZone : tTimeZone;
FBootDrive: String;
FPlatform : String;
FWinBuild : Integer;
FWinMajVer: Integer;
FWinMinVer: Integer;
FCSDVersion : String; { Refer to WINAPI SDK, OSVERSIONINFO }
FWinVersion : String;
FSysLangDefID : String;
FUser : tUser;
FRegOwner : String;
FRegOrg : String;
FProductID: String;
FProductKey : String;
FProductName: String;
FInstallDate: String;
FVersion: String;
FBootCount: String;
FUpdates: tStrings;
protected
public
constructor Create;
destructor Destroy;override;
procedure RefreshInfo;
published
property BootDrive : String Read FBootDrive Write FBootDrive;
property LocaleInfo: tLocaleInfo Read FLocaleInfo Write FLocaleInfo;
property TimeZone: TTimeZone Read FTimeZone Write FTimeZone;
property Directories : TDirectories Read FDirectories Write FDirectories;
property Resources : TResources Read FResources Write FResources;
property Platform: String Read FPlatform Write FPlatform;
property Build : Integer Read FWinBuild Write FWinBuild;
property BootCount : String Read FBootCount Write FBootCount;
property MajorVer: Integer Read FWinMajVer Write FWinMajVer;
property MinorVer: Integer Read FWinMinVer Write FWinMinVer;
property LanguageID: String Read FSysLangDefID Write FSysLangDefID;
property CSDVersion: String Read FCSDVersion Write FCSDVersion;
property RegOwner: String Read FRegOwner Write FRegOwner;
property RegOrg: String Read FRegOrg Write FRegOrg;
property InstallDate : String Read FInstallDate Write FInstallDate;
property ProductID : String Read FProductID Write FProductID;
property ProductKey: String Read FProductKey Write FProductKey;
property ProductName : String Read FProductName Write FProductName;
property SerialNo: String Read FProductKey Write FProductKey;
property VersionNumber : String Read FWinVersion Write FWinVersion; { e.g : 4.10 2222.A }
property User: tUser Read FUser Write FUser;
property Version : String Read FVersion Write FVersion;{ e.g : Windows 95 / Windows 98 }
property SoftwareUpdates : tStrings Read FUpdates;
end;

TDrive = class (TPersistent)
private
FAvailDrive : String;
FDisk : tDisk;
protected
public
constructor Create;
destructor Destroy;override;
procedure RefreshInfo;
published
Property AvailableDrive : String read FAvailDrive Write FAvailDrive;
property Disk : tDisk Read FDisk Write FDisk;
end;

TMouse = class (TPersistent)
private
FMouseType: String;
FDescription : String;
FAvailable: Boolean;
FButtons: Integer;
FSwapButton : Boolean;
FMouseWheel : Boolean;
FProvider : String;
FDoubleClickTime : Integer;
protected
public
constructor Create;
destructor Destroy;override;
procedure RefreshInfo;
published
Property Available : Boolean read FAvailable Write FAvailable;
property Buttons : Integer Read FButtons Write FButtons;
property SwapButton : Boolean read FSwapButton Write FSwapButton;
property MouseWheel : Boolean read FMouseWheel Write FMouseWheel;
property DoubleClickTime : Integer read FDoubleClickTime Write FDoubleClickTime;
property MouseType : String Read FMouseType Write FMouseType;
property Description : String Read FDescription Write FDescription;
property Provider: String Read FProvider Write FProvider;
end;

TAPM = class (TPersistent)
private
FACLineStatus: String;
FBatteryFlag : String;
FBatteryLifePercent: Byte;
FBatteryLifeTime : Integer;
FBatteryFullLifeTime : Integer;
protected
public
constructor Create;
destructor Destroy;override;
procedure RefreshInfo;
published
property ACLineStatus : String Read FACLineStatus Write FAcLineStatus;
property BatteryFlag: String Read FBatteryFlag Write FBatteryFlag;
property BatteryLifePercent: Byte Read FBatteryLifePercent Write FBatteryLifePercent;
property BatteryLifeTime: Integer Read FBatteryLifeTime Write FBatteryLifeTime;
property BatteryFullLifeTime: Integer Read FBatteryFullLifeTime Write FBatteryFullLifeTime;
end;

TWorkstation = class (TPersistent)
private
FBIOSName : String;
FBIOSDate : String;
FBIOSCopyright: String;
FBIOSExtendedInfo : String;
FUserName : String;
FComputerName : String;
FWorkGroup: String;
FComment: String;
protected
public
constructor Create;
destructor Destroy;override;
procedure RefreshInfo;
published
property BIOSName : String read FBiosName Write FBIOSName;
property BIOSDate : String read FBiosDate Write FBIOSDate;
property BIOSExtendedInfo : String read FBIOSExtendedInfo Write FBIOSExtendedInfo;
property BIOSCopyright : String read FBiosCopyright Write FBIOSCopyright;
property UserName : String read FUsername write FUsername;
property ComputerName : String read FComputerName Write FComputerName;
property Workgroup: String read FWorkGroup Write FWorkGroup;
property Comment: String read FComment Write FComment;
end;

TSystemInfo = class(TComponent)
private
FKeyboard : tKeyboard;
FDisplay: tDisplay;
FDirectX: tDirectX;
FDevice : TDevice;
FWorkstation: TWorkStation;
FMouse: TMouse;
FAPM: TAPM;
FDrive: TDrive;
FOS : TOperatingSystem;
FMemory : TMemory;
FCPU: TCPU;
FNetwork: tNetwork;
FStatus : String;


FAutoRefresh: Boolean;
FOnStatusChange : tNotifyEvent;
FOnRefreshInfo: tOnRefreshInfo;
FOnRefreshStart : tNotifyEvent;
FOnRefreshFinish: tNotifyEvent;

procedure SetAutoRefresh(Value:Boolean);
protected
procedure SetStatus(Status:String);
public
constructor Create(AOwner: TComponent); override;
destructorDestroy; override;
Procedure RefreshInfo;
published
property Device: TDevice Read FDevice Write FDevice;
property Workstation : TWorkStation read FWorkStation Write FWorkStation;
property Mouse : TMouse Read FMouse Write FMouse;
property APM : TAPMRead FAPM Write FAPM;
property Drives: TDrive Read FDrive Write FDrive;
property OS: tOperatingsystem Read FOS Write FOS;
property Memory: tMemory Read FMemory Write FMemory;
property CPU : TCPU Read FCPU Write FCPU;
property DirectX : tDirectX Read FDirectX Write FDirectX;
property Network : tNetwork Read Fnetwork write FNetwork;
property Display : tDisplay Read FDisplay Write FDisplay;
property Keyboard: tKeyboard Read FKeyboard Write FKeyboard;

property AutoRefresh : Boolean Read FAutoRefresh Write SetAutoRefresh default False;
property Status: String Read FStatus Write FStatus;

property OnStatusChange : tNotifyEvent Read FOnStatusChange Write FOnStatusChange;
property OnRefreshInfo: tOnRefreshInfo Read FOnRefreshInfo Write FOnRefreshInfo;
property OnRefreshStart : tNotifyEvent Read FOnRefreshStart Write FOnRefreshStart;
property OnRefreshFinish: tNotifyEvent Read FOnRefreshFinish Write FOnRefreshFinish;
end;

procedure Register;

implementation

Function GetBiosName : String;
Begin
try
Result := String(PChar(Ptr(adr_BiosName)));
except
Result := 'NoName';
end;{try..except}
End;{Function GetBiosName}

Function GetBiosCopyright : String;
Begin
try
Result := String(PChar(Ptr(adr_BiosCopyright)));
except
Result := 'NoCopyright';
end;{try..except}
End;{Function GetBiosCopyright}

Function GetBIOSExtendedInfo : String;
Begin
try
Result := String(PChar(Ptr(adr_BIOSExtendedInfo)));
except
Result := '';
end;{try..except}
End;{Function GetBIOSExtendedInfo}

Function GetBiosDate : TDateTime;
Var
RegStr, RegFormat : String;
RegSeparator: Char;
Begin
Result := 0;
try
RegStr := String(PChar(Ptr(adr_BiosDate)));
except
Exit;
end;{try..except}

RegFormat := ShortDateFormat;
RegSeparator := DateSeparator;
try
DateSeparator := '/';
try
ShortDateFormat := 'm/d/y';
Result := StrToDate(RegStr);
except
try
ShortDateFormat := 'y/m/d';
Result := StrToDate(RegStr);
except
end;
end;
finally
ShortDateFormat := RegFormat;
DateSeparator := RegSeparator;
end;{try..finally}
End;{Function GetBiosDate}

Function GetCurrentComputerName : String;
Var
Name : PChar;
Size : DWord;
Begin
Size := MAX_COMPUTERNAME_LENGTH + 1;
GetMem(Name, Size);
try
GetComputerName(Name, Size);
Result := Trim(StrPas(Name));
finally
FreeMem(Name, Size);
end;{try..finally}
End;{Function GetCurrentComputerName}

Function GetCurrentUserName : String;
Var
Name : PChar;
Size : DWord;
Begin
Size := SizeOf(ShortString);
GetMem(Name, Size);
try
GetUserName(Name, Size);
Result := Trim(StrPas(Name));
finally
FreeMem(Name, Size);
end;{try..finally}
End;{Function GetCurrentUserName}


{*************************************************************}
{ResMeter Component for Delphi 32 }
{ Version: 1.0}
{ Author:Aleksey Kuznetsov}
{ E-Mail:info@utilmind.com}
{ Home Page: http://www.utilmind.com}
{ Created: June, 30, 1999 }
{ Modified:June, 30, 1999 }
{ Legal: Copyright (c) 1999, UtilMind Solutions }
{*************************************************************}

const
GFSR_SystemRes = 0;
GFSR_GDIRes = 1;
GFSR_USERRes = 2;

var
hInst16: THandle;
SR: Pointer;

function LoadLibrary16(LibraryName: PChar): THandle; stdcall; external kernel32 index 35;
procedure FreeLibrary16(HInstance: THandle); stdcall; external kernel32 index 36;
function GetProcAddress16(Hinstance: THandle; ProcName: PChar): Pointer; stdcall; external kernel32 index 37;
{ QT_Thunk needs a stack frame. }

{$StackFrames On}
{procedure QT_Thunk; cdecl; external kernel32 name 'QT_Thunk';

function GetFreeSysResources(SysRes: Word): Word;
var
Thunks: Array[0..$20] of Word;
begin
Thunks[0] := hInst16;
hInst16 := LoadLibrary16('user.exe');
if hInst16 < 32 then
raise Exception.Create('Can''t load USER.EXE!');
FreeLibrary16(hInst16);
SR := GetProcAddress16(hInst16, 'GetFreeSystemResources');
if SR = nil then
raise Exception.Create('Can''t get address of GetFreeSystemResources!');
asm
push SysRes // push arguments
mov edx, SR // load 16-bit procedure pointer
call QT_Thunk // call thunk
mov Result, ax// save the result
end;
end;
}
Function GetCPUSpeed: Double;
const
DelayTime = 500; // measure time in ms
var
TimerHi, TimerLo: DWORD;
PriorityClass, Priority: Integer;
begin
PriorityClass := GetPriorityClass(GetCurrentProcess);
Priority := GetThreadPriority(GetCurrentThread);

SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS);
SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_TIME_CRITICAL);

Sleep(10);
asm
dw 310Fh // rdtsc
mov TimerLo, eax
mov TimerHi, edx
end;
Sleep(DelayTime);
asm
dw 310Fh // rdtsc
sub eax, TimerLo
sbb edx, TimerHi
mov TimerLo, eax
mov TimerHi, edx
end;

SetThreadPriority(GetCurrentThread, Priority);
SetPriorityClass(GetCurrentProcess, PriorityClass);

Result := TimerLo / (1000.0 * DelayTime);
end;

const
ID_BIT=$200000;// EFLAGS ID bit
type
TCPUID= array[1..4] of Longint;
TVendor= array [0..11] of char;

function IsCPUIDAvailable : Boolean; register;
asm
PUSHFD{direct access to flags no possible, only via stack}
POP EAX{flags to EAX}
MOV EDX,EAX{save current flags}
XOR EAX,ID_BIT{not ID bit}
PUSHEAX{onto stack}
POPFD{from stack to flags, with not ID bit}
PUSHFD{back to stack}
POP EAX{get back to EAX}
XOR EAX,EDX{check if ID bit affected}
JZ@exit{no, CPUID not availavle}
MOV AL,True{Result=True}
@exit:
end;

function GetCPUID : TCPUID; assembler; register;
asm
PUSHEBX {Save affected register}
PUSHEDI
MOV EDI,EAX {@Resukt}
MOV EAX,1
DW$A20F {CPUID Command}
STOSD{CPUID[1]}
MOV EAX,EBX
STOSD {CPUID[2]}
MOV EAX,ECX
STOSD {CPUID[3]}
MOV EAX,EDX
STOSD {CPUID[4]}
POP EDI{Restore registers}
POP EBX
end;

function GetCPUVendor : TVendor; assembler; register;
asm
PUSHEBX{Save affected register}
PUSHEDI
MOV EDI,EAX{@Result (TVendor)}
MOV EAX,0
DW$A20F{CPUID Command}
MOV EAX,EBX
XCHGEBX,ECX {save ECX result}
MOVECX,4
@1:
STOSB
SHR EAX,8
LOOP@1
MOV EAX,EDX
MOVECX,4
@2:
STOSB
SHR EAX,8
LOOP@2
MOV EAX,EBX
MOVECX,4
@3:
STOSB
SHR EAX,8
LOOP@3
POP EDI{Restore registers}
POP EBX
end;


Function GetSpesialFolder(Handle:Hwnd;nFolder:Integer):String;
var
PIDL: PItemIDList;
Path: LPSTR;
begin
Result:='';
Path := StrAlloc(MAX_PATH);
SHGetSpecialFolderLocation(Handle, nFolder, PIDL);

if SHGetPathFromIDList(PIDL, Path) then
Result := StrPas(Path);

// SHGetSpecialFolderPath(Handle,Path,nFolder,False);
// Result:=Path;
StrDispose(Path);
end;

{*************************************************************}

{*************************************************************}

constructor TKeyboard.Create;
Begin
inherited Create;
//RefreshInfo;
End;

destructor TKeyboard.Destroy;
Begin
inherited Destroy;
End;

Procedure TKeyboard.RefreshInfo;
varKeys: TKeyboardState;
Begin
GetKeyboardState( keys );
FNumLock:= keys[VK_NUMLOCK]=1;
FCapsLock := keys[VK_CAPITAL]=1;
FScrollLock := keys[VK_SCROLL]=1;
End;

constructor TDisplay.Create;
Begin
inherited Create;
FSupportedModes:=tStringList.Create;
//RefreshInfo(0);
End;

destructor TDisplay.Destroy;
Begin
FsupportedModes.Free;
inherited Destroy;
End;

Procedure TDisplay.RefreshInfo(AdapterIndex:Integer);
var
Buf: array [0..3] of byte;
I: Integer;
DevMode : TDevMode;

Function MsgColorDepth(ColorDepth:Integer):String;
Begin
case ColorDepth of
2 : result:='Grayscale';
4 : result:='16 Colors';
8 : result:='256 Colors';
16: result:='High Colors';
24: result:='True Colors';
End;
End;

Begin
FsupportedModes.Free;
FSupportedModes:=tStringList.Create;
i := 0;
while EnumDisplaySettings(nil,i,Devmode) do begin
with Devmode do
Begin
FSupportedModes.Add(Format('%d x %d - %s',[dmPelsWidth,dmPelsHeight,MsgColorDepth(dmBitsPerPel)]));
Inc(i);
end;
End;
with TRegistry.Create do
Try
RootKey := HKEY_LOCAL_MACHINE;

If OpenKey('System/CurrentControlSet/Services/Class/Display/'+FormatFloat('0000',AdapterIndex)+'/INFO', False) then
Begin
FChipType:=ReadString('ChipType');
FDACType:=ReadString('DACType');
FRevision:=ReadString('Revision');
FMemory:=Inttostr(ReadInteger('VideoMemory'));
CloseKey;
End;

If OpenKey('System/CurrentControlSet/Services/Class/Display/'+FormatFloat('0000',AdapterIndex)+'/3D', False) then
Begin
I := Readbinarydata ('AGP',buf,sizeof(buf));
FAGP:=(Buf[0]=1);
I := Readbinarydata ('3DP',buf,sizeof(buf));
F3DProcessor:=(Buf[0]=1);
CloseKey;
End;

Finally
Free;
End;
End;

constructor TNetwork.Create;
Begin
inherited Create;
FNetProto:=tStringList.Create;
FNetCli:=tStringList.Create;
FNetAdap:=tStringList.Create;
//RefreshInfo;
End;

destructor TNetwork.Destroy;
Begin
FNetProto.Free;
FNetCli.Free;
FNetAdap.Free;
inherited Destroy;
End;

procedure TNetwork.RefreshInfo;
var
count:integer;
wVersionRequested : WORD;
wsaData : TWSAData;
p : PHostEnt;
s : array[0..128] of char;
p2 : pchar;
begin
{Start up WinSock}
wVersionRequested := MAKEWORD(1, 1);
WSAStartup(wVersionRequested, wsaData);

{Get the computer name}
GetHostName(@s, 128);
p := GetHostByName(@s);
FLocalHost:=p^.h_Name;
{Get the IpAddress}

p2 := iNet_ntoa(PInAddr(p^.h_addr_list^)^);
FLocalIP:=p2;
WSACleanup;

FNetProto.Free;
FNetProto:=tStringList.Create;
FNetCli.Free;
FNetCli:=tStringList.Create;
FNetAdap.Free;
FNetAdap:=tStringList.Create;

with TRegistry.Create do
Try
RootKey := HKEY_LOCAL_MACHINE;
Count:=0;
While OpenKey('System/CurrentControlSet/Services/Class/Net/'+FormatFloat('0000',Count), False) do
Begin
FNetAdap.AddObject(ReadString('DriverDesc'),tObject(ReadString('ProviderName')));
CloseKey;
Inc(count);
End;

Count:=0;
While OpenKey('System/CurrentControlSet/Services/Class/NetClient/'+FormatFloat('0000',Count), False) do
Begin
FNetCli.AddObject(ReadString('DriverDesc'),tObject(ReadString('ProviderName')));
CloseKey;
Inc(count);
End;

Count:=0;
While OpenKey('System/CurrentControlSet/Services/Class/NetTrans/'+FormatFloat('0000',Count), False) do
Begin
FNetProto.AddObject(ReadString('DriverDesc'),tObject(ReadString('ProviderName')));
CloseKey;
Inc(count);
End;

Finally
Free;
End;

End;

constructor TDirectX.Create;
Begin
inherited Create;
FDirect3dDrvDesc:=tStringList.Create;
FDirectMusicDrvDesc:=tstringList.Create;
FDirectPlayDrvDesc:=tstringList.Create;
//RefreshInfo;
End;

destructor TDirectX.Destroy;
Begin
FDirect3dDrvDesc.Free;
FDirectMusicDrvDesc.Free;
FDirectPlayDrvDesc.Free;
inherited Destroy;
End;

procedure TDirectX.RefreshInfo;
var Key : tstrings;
I : Integer;
Begin
FDirect3dDrvDesc.Free;
FDirect3dDrvDesc:=tStringList.Create;
FDirectMusicDrvDesc.Free;
FDirectMusicDrvDesc:=tstringList.Create;
FDirectPlayDrvDesc.Free;
FDirectPlayDrvDesc:=tstringList.Create;
Key:=tstringList.Create;
with TRegistry.Create do
Try
RootKey := HKEY_LOCAL_MACHINE;

if OpenKey('Software/Microsoft/DirectX', False) then
Begin
FVersion:=ReadString('Version');
CloseKey;
End;

{ Getting Direct3D Driver Description }
if OpenKey('Software/Microsoft/Direct3D/Drivers', False) then
Begin
GetKeynames(Key);
CloseKey;
End;

For I:=0 to Key.count-1 do
Begin
if OpenKey('Software/Microsoft/Direct3D/Drivers/'+Key.Strings[I], False) then
Begin
FDirect3dDrvDesc.Add(ReadString('Description'));
CloseKey;
End;
end;

{ Getting DirectMusic Description }
if OpenKey('Software/Microsoft/DirectMusic/SoftwareSynths', False) then
Begin
GetKeynames(Key);
CloseKey;
End;

For I:=0 to Key.count-1 do
Begin
if OpenKey('Software/Microsoft/DirectMusic/SoftwareSynths/'+Key.Strings[I], False) then
Begin
FDirectMusicDrvDesc.Add(ReadString('Description'));
CloseKey;
End;
end;

{ Getting DirectPlay Description }
if OpenKey('Software/Microsoft/DirectPlay/Services', False) then
Begin
GetKeynames(Key);
CloseKey;
End;

For I:=0 to Key.count-1 do
Begin
if OpenKey('Software/Microsoft/DirectPlay/Services/'+Key.Strings[I], False) then
Begin
FDirectPlayDrvDesc.Add(ReadString('Description'));
CloseKey;
End;
end;

Key.Free;
Finally
Free;
End;
End;

constructor TDevice.Create;
Begin
inherited Create;
FHDC:=TstringList.Create;
FFDC:=tStringList.create;
FMultiFun:=TstringList.Create;
FInfraRed:=tstringList.create;
FPCMCIA:=tStringList.Create;
FCDROM:=tStringList.Create;
F3dAccel:=tStringList.Create;
FMouse:=tStringList.Create;
FKeyboard:=tStringList.Create;
FModem:=tstringList.Create;
FMonitor:=tstringList.Create;
FSCSI:=tstringList.Create;
FPrinter:=tstringList.Create;
FMedia:=tstringList.Create;
FAdapter:=tStringList.Create;
FSystem:=TStringList.Create;
FUSB:=tStringList.Create;
FPorts:=tStringList.Create;
//RefreshInfo;
End;

destructor TDevice.Destroy;
Begin
FHDC.Free;
FFDC.Free;;
FMultiFun.Free;
FInfraRed.Free;
FPCMCIA.Free;
FCDROM.Free;
F3dAccel.Free;
FMouse.Free;
FKeyboard.Free;
FModem.Free;
FMonitor.Free;
FSCSI.Free;
FPrinter.Free;
FMedia.Free;
FAdapter.Free;
FSystem.Free;
FUSB.Free;
FPorts.Free;
inherited Destroy;
End;

procedure TDevice.RefreshInfo;
var Count:Integer;
Begin
FHDC.Free;FHDC:=TstringList.Create;
FFDC.Free;FFDC:=tString