Egy számítógép, valamint a bejelentkezett felhasználó nevét könnyedén lekérdezhetjük egy-egy függvény segítségével.
var
ComputerName, UserName: array[0..254] of Char;
...
GetComputerName(ComputerName,d);
...
GetUserName(UserName,d);
Az operációs rendszer típusát a registry-ből olvashatjuk ki. A bejegyzés különböző helyen található Windows 98 és XP esetén. A gyökérelem mindkét esetben a HKEY_LOCAL_MACHINE.
Windows 98:
Reg.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion', False);
s:=Reg.ReadString('Version');
Windows XP:
Reg.OpenKey('SOFTWARE\Microsoft\Windows NT\CurrentVersion', False);
s:=Reg.ReadString('ProductName');
Az Internet Explorer verziója is a registry HKEY_LOCAL_MACHINE gyökéreleme alatt van tárolva. A kiolvasáshoz az alábbi kulcsot kell használnunk.
Reg.OpenKey('Software\Microsoft\Internet Explorer',False);
...
s:=Reg.ReadString('Version');
A CPU típusáról szintén a registry-ben találhatunk információt, ismét a HKEY_LOCAL_MACHINE gyökérelem alatt.
b:=Reg.OpenKey('HARDWARE\DESCRIPTION\System\CentralProcessor\' + IntToStr(i),False);
Windows XP esetén a kiolvasáshoz a ProcessorNameString, 98 esetében az Identifier kulcs értékét kell kiolvasnunk.
A rendszermemória meghatározásához a GlobalMemoryStatus függvényt használhatjuk.
MemoryStatus.dwLength:=SizeOf(TMemoryStatus);
GlobalMemoryStatus(MemoryStatus);
i:=Round(MemoryStatus.dwTotalPhys/1024/1024);
if i mod 2>0 then
Inc(i);
A függvény az eredményt bájtokban adja. Ezt két 1024-es osztással alakíthatjuk át MB-ba. Az osztás során előforduló kerekítési hibát a következőképpen korrigálhatjuk:
if i mod 2>0 then
Inc(i);
A rendelkezésre álló port-okat az enumPorts API függvény segítségével kérdezzük le.
EnumPorts(Nil,2,Nil,0,pcbNeeded,pcReturned);
PortInfo2:=AllocMem(pcbNeeded);
Win32Check(EnumPorts(Nil,2,PortInfo2,pcbNeeded,pcbNeeded,pcReturned));
A függvényt kétszer hívjuk meg. Az eredménylistát egy PPortInfo2 típusú struktúrában kapjuk meg. A függvény csak akkor fut le megfelelően, ha a PPortInfo2 struktúra elegendő méretű ahhoz, hogy az eredménylistát fogadni tudja. Ha a struktúra nem megfelelő, akkor a pcbNeeded tagban a függvény visszaadja a szükséges méretet. Ezért történik az első függvényhívás. A második esetben - már a megfelelő struktúra-méret birtokában, megkapjuk az eredménylistát.
Az eredménylista elemeit az alábbi módon dolgozhatjuk fel.
for i:=0 to Pred(pcReturned) do begin
if LowerCase(CurrentPort^.pPortName)<>'file:' then begin
s:='';
for j:=1 to Length(CurrentPort^.pPortName)-1 do
s:=s+CurrentPort^.pPortName[j-1];
if s[1]<>'\' then
ListBox1.Items.Add('Port: '+s);
end;
Inc(PChar(CurrentPort),SizeOf(TPortInfo2));
end;
A hangkártya meghatározásához az MMSystem unit két függvényét használjuk fel. A hangkártyák számát megtudhatjuk a waveOutGetNumDevs függvény visszatérési értékéből.
DeviceNumber:=waveOutGetNumDevs;
Ennek birtokában a WaveOutGetDevCaps függvény segítségével, egyesével lekérdezhetjük a hangkártyák adatait.
for i:=0 to DeviceNumber-1 do begin
WaveOutGetDevCaps(i,@Caps,SizeOf(TWaveOutCapsA));
ListBox1.Items.Add('Hangkártya: '+String(Caps.szPname));
end;
A lekérdezés eredményét egy TWaveOutCapsA típusú struktúrában kapjuk meg. A hangkártya típusát az szPname tag tárolja.
A telepített nyomtatókat könnyedén meghatározhatjuk a Printers unit Printer változójának segítségével.
for i:=1 to Printer.Printers.Count do
ListBox1.Items.Add('Nyomtató: '+Printer.Printers[i-1]);
A hálózati kártya típusát a registry-ben megtalálhatjuk a HKEY_LOCAL_MACHINE gyökérelem alatt.
Windows XP esetében a kiolvasáshoz a következő kulcsot kell használnunk:
b:=Reg.OpenKey('SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\NetworkCards', False);
Windows 98 esetén:
Reg.OpenKey('System\CurrentControlSet\Services\Class\Net',False);
Mindkét kulcs alatt további kulcsokat találunk. Minden egyes további kulcs egy-egy hálózati kártyát képvisel. A kulcson belül XP esetén a Description, 98 esetén a DriverDesc értékét kell kiolvasnunk.
A videokártya típusának meghatározásához szintén a registry-t hívjuk segítségül.
Windows XP esetén meg kell nyitnunk a HKEY_LOCAL_MACHINE alatt lévő, következő kulcsot:
Reg.OpenKey('SYSTEM\CurrentControlSet\Control\Video',False)
A kulcs alatt ismét újabb kulcsokat találunk, azokon belül újabbakat.
A kiolvasáshoz az alábbi algoritmust használhatjuk:
Reg.GetKeyNames(sl);
s:=Reg.CurrentPath;
for i:=1 to sl.Count do begin
Reg.CloseKey;
Reg.OpenKey(s+'\'+sl[i-1]+'\0000',False);
if Reg.ValueExists('DriverInstalled') then
ListBox1.Items.Add('Videokártya: '+Reg.ReadString('Device Description'));
end;
Windows 98 esetén a helyzet egy picivel bonyolultabb.
Első lépésben a HKEY_DYN_DATA gyökérelem alatt kell keresnünk.
if Reg.OpenKey('Config Manager\Enum',False) then begin
Reg.GetKeyNames(Enum);
Az Enum változóba kiolvassuk az újabb kulcsokat, amelyek egy-egy hardware eszközt azonosítanak.
Ezekből a bejegyzésekből a hardware kulcsokra van szükségünk.
if Reg.OpenKey('Config Manager\Enum\'+Enum[i],False) then begin
HardwareKey:=Reg.ReadString('HardWareKey');
A hardware kulcsok alapján a HKEY_LOCAL_MACHINE gyökérelem alól olvashatjuk ki a videokártya típusát, ha a hardware típusa „display”.
Reg.RootKey:=HKEY_LOCAL_MACHINE;
if Reg.OpenKey('Enum\'+HardwareKey,False) then begin
if LowerCase(Reg.ReadString('Class'))='display' then
ListBox1.Items.Add('Videokártya: '+Reg.ReadString('DeviceDesc'));