Сейчас на форуме: hgdagon, asfa, bartolomeo (+6 невидимых) |
![]() |
eXeL@B —› Программирование —› Как получить дату BIOS мамки? |
Посл.ответ | Сообщение |
|
Создано: 03 июня 2006 17:27 · Личное сообщение · #1 |
|
Создано: 03 июня 2006 17:29 · Личное сообщение · #2 на ВБ под Вин 9х : Declare Sub CopyMemory Lib "Kernel32" Alias "RtlMoveMemory" (pDest As Any, pSource As Any, ByVal ByteLen As Long) Public Type BIOS_DATE s As String * 8 End Type Public Function BIOS() As Long Dim sDB As BIOS_DATE CopyMemory sDB, ByVal &HFFFF5, 8& BIOS = DateSerial(Mid(sDB.s, 7, 2), Mid(sDB.s, 1, 2), Mid(sDB.s, 4, 2)) End Function ![]() |
|
Создано: 03 июня 2006 21:23 · Личное сообщение · #3 |
|
Создано: 03 июня 2006 21:59 · Личное сообщение · #4 |
|
Создано: 04 июня 2006 12:34 · Личное сообщение · #5 |
|
Создано: 04 июня 2006 17:29 · Личное сообщение · #6 Delphi World: В NT/2000/XP не получится прочитать значения прямо из BIOS, однако, ничего не мешает нам считать нужные значения из реестра. procedure TBIOSInfo.GetRegInfoWinNT; var Registryv: TRegistry; RegPath: string; sl: TStrings; begin Params.Clear; RegPath := '\HARDWARE\DESCRIPTION\System'; registryv := tregistry.Create; registryv.rootkey := HKEY_LOCAL_MACHINE; sl := nil; try registryv.Openkey(RegPath, false); ShowMessage('BIOS Date: ' + RegistryV.ReadString('SystemBiosDate')); sl := ReadMultirowKey(RegistryV, 'SystemBiosVersion'); ShowMessage('BIOS Version: ' + sl.Text); except end; Registryv.Free; if Assigned(sl) then sl.Free; end; ----- Сколько ни наталкивали на мысль – все равно сумел увернуться ![]() |
|
Создано: 04 июня 2006 19:32 · Личное сообщение · #7 imho чтение из реестра - не лучший способ. Я как то давно пробовал менять дату прямо в реестре - и ничего винда молча проглотила. Поэтому то что написано в реестре не всегда соответствует действительности. Под NT можно также читать память напрямую, потребуется несколько несложных подготовительных шагов. Выше ssx об этом написал. ![]() |
|
Создано: 04 июня 2006 22:06 · Поправил: mysterio · Личное сообщение · #8 |
|
Создано: 04 июня 2006 23:28 · Личное сообщение · #9 |
|
Создано: 04 июня 2006 23:38 · Поправил: YoriCH · Личное сообщение · #10 |
|
Создано: 05 июня 2006 06:29 · Личное сообщение · #11 |
|
Создано: 05 июня 2006 14:17 · Личное сообщение · #12 0xy пишет: А этот ключ LM\HARDWARE\DESCRIPTION\System\\SystemBiosDate: всегда ли он присутствует в реестре, и во всех ли версиях NT? всегда... 0xy пишет: А может ли кто-нить привести пример реализации способа ssx, желательно на VB могу... ![]() ![]() ![]() |
|
Создано: 06 июня 2006 04:17 · Личное сообщение · #13 |
|
Создано: 06 июня 2006 10:36 · Личное сообщение · #14 winmgmts:{impersonationLevel=impersonate}").InstancesOf("Win32_BIOS") а это?? не то, что имел ввиду ssx, но зато БЕЗ реестра... материал найден здесь... http://vbnet.mvps.org/index.html?code/wmi/win32_bios.htm во вяском случае смена даты в реестре не повлияла на резултат этого кода (т.е. он отобразился правильно) ![]() |
|
Создано: 08 августа 2006 14:57 · Поправил: st_slayer · Личное сообщение · #15 Вот на Delphi нашел: procedure TfmMain.BIOSInfo(OS : string); var p : pointer; s : string[255]; begin if OS='NT' then begin with TRegistry.Create do try RootKey := HKEY_LOCAL_MACHINE; if OpenKeyReadOnly('HARDWARE\DESCRIPTION\System') then lblBIOSDate2.Caption := ReadString('SystemBiosDate') finally Free; end; end else try s[0] := #8; p := Pointer($0FFFF5); Move(p^,s[1],8); lblBIOSDate2.Caption := copy(s,1,2) + '/' + copy(s,4,2) + '/' +copy (s,7,2); except lblBIOSDate2.Caption := 'XX.XX.XXXX'; end; end; ![]() |
|
Создано: 08 августа 2006 15:10 · Личное сообщение · #16 |
|
Создано: 08 августа 2006 23:27 · Личное сообщение · #17 Мои 50 копеек ![]() ![]() ![]() |
|
Создано: 08 августа 2006 23:56 · Личное сообщение · #18 |
|
Создано: 09 августа 2006 00:12 · Личное сообщение · #19 |
![]() |
eXeL@B —› Программирование —› Как получить дату BIOS мамки? |