![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
как вытащить серийник BIOS в NT ? [D5, D6, NT4, Win2k, WinXP]
Device © (2002-06-16 03:37:00)собственно сабж %)
nick_sniper (2002-06-19 18:42:00) [1]Если внести изменения он будет работать ?
Vladislav (2002-06-19 09:31:00) [2]Пример выше сработает только если админовские права. Для пользователя с ограниченными правами доступ к это ветке в реестре будет закрыт. Выход: либо расшаривать права на ветку, либо использовать вместо OpenKey метод OpenKeyReadOnly(этот метод появился в классе начиная с D4)
nick_sniper (2002-06-19 08:29:00) [3]Попробуй вот так: (если что - пиши на мыло)
procedure TMachine.GetInfo;
var
bdata :pchar;
KeyState : TKeyBoardState;
sl: TStrings;
const
cBIOSName = $FE061;
cBIOSDate = $FFFF5;
cBIOSExtInfo = $FEC71;
cBIOSCopyright = $FE091;
rkBIOS = {HKEY_LOCAL_MACHINE\}"HARDWARE\DESCRIPTION\System";
rvBiosDate = "SystemBiosDate";
rvBiosID = "Identifier";
rvBiosVersion = "SystemBiosVersion";
rvComputerClass = "Computer";
begin
sl:=TStringList.Create;
try
FLastBoot:=Now-(GetTickCount/1000)/(24*3600);
except
FLastBoot:=0;
end;
FSystemUpTime:=GetSystemUpTime;
FName:=GetMachine;
FUser:=GetUser;
if isNT then begin
with TRegistry.Create do begin
rootkey:=HKEY_LOCAL_MACHINE;
if OpenKey(rkBIOS,false) then begin
if ValueExists(rvBIOSID) then
FBiosName:=ReadString(rvBIOSID);
if ValueExists(rvBIOSVersion) then begin
bdata:=AllocMem(255);
try
readbinarydata(rvBIOSVersion,bdata^,255);
FBIOSCopyright:=strpas(pchar(bdata));
except
end;
FreeMem(bdata);
end;
if ValueExists(rvBIOSDate) then
FBIOSDate:=ReadString(rvBIOSDate);
closekey;
end;
free;
end;
end else begin
FBIOSName:=string(pchar(ptr(cBIOSName)));
FBIOSDate:=string(pchar(ptr(cBIOSDate)));
FBIOSCopyright:=string(pchar(ptr(cBIOSCopyright)));
FBIOSExtendedInfo:=string(pchar(ptr(cBIOSExtInfo)));
end;
GetKeyboardState(KeyState);
FCapsLock:=KeyState[VK_CAPITAL]=1;
FNumLock:=KeyState[VK_NUMLOCK]=1;
FScrollLock:=KeyState[VK_SCROLL]=1;
GetClassDevices(ClassKey,rvComputerClass,DescValue,sl);
if sl.Count>0 then
FComp:=sl[0]
else
FComp:="";
sl.Free;
end;
procedure GetVideoBIOSInfo(var Version, Date: string);
var
StrData :PChar;
const
rk = {HKEY_LOCAL_MACHINE\}"HARDWARE\DESCRIPTION\System";
rvVideoBiosDate = "VideoBiosDate";
rvVideoBiosVersion = "VideoBiosVersion";
begin
with TRegistry.Create do begin
RootKey:=HKEY_LOCAL_MACHINE;
if OpenKey(rk,false) then begin
if ValueExists(rvVideoBIOSVersion) then begin
try
StrData:=StrAlloc(255);
ReadBinaryData(rvVideoBIOSVersion,StrData^,151);
Version:=StrPas(PChar(StrData));
StrDispose(StrData);
except
end;
end;
if ValueExists(rvVideoBIOSDate) then
Date:=ReadString(rvVideoBIOSDate);
CloseKey;
end;
Free;
end;
end;
Device (2002-06-16 09:22:00) [4]Сенксъ
~Rand~ (2002-06-16 08:44:00) [5]Удалено модератором