Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Как отловить системное время?


Автор: Kesh 4.2.2006, 16:04
У меня такой вопрос... Как мне отловить системное время, не то, которое в Винде, а то, которое в БИОСЕ?
Добавлено @ 16:05
Не дата Биоса, а текущее время...

Автор: DemoCode 4.2.2006, 16:16
Пример из delphiworld

Код

unit BiosDate;

interface

function GetBiosDate: string;

implementation

function SegOfsToLinear(Segment, Offset: Word): Integer;
begin
  result := (Segment shl 4) or Offset;
end;

function GetBiosDate: string;
begin
  result := string(PChar(Ptr(SegOfsToLinear($F000, $FFF5))));
end;

end.

А время - надо просто узнать адрес его и поменять здесь.

Автор: Kesh 4.2.2006, 16:23
Кто знает, как узнать?

Автор: DemoCode 4.2.2006, 16:24
Код

function GetBiosTime:Word; assembler;
 asm    mov    es,[Seg0040]
    mov    ax,es:[6Ch]    {Ticks}
    mov    dx,60
    mul    dx        {in DX die Minuten}
    mov    cx,dx
    mov    ax,es:[6Eh]    {Stunden}
    mov    dx,100
    mul    dx
    add    ax,cx
 end;

Автор: Kesh 4.2.2006, 16:32
DemoCode Delphi ругается на [Seg0040]

Автор: Snowy 4.2.2006, 16:37
Цитата(Kesh @ 4.2.2006, 16:04 Найти цитируемый пост)
Как мне отловить системное время, не то, которое в Винде, а то, которое в БИОСЕ

А разве они отличаются???

Автор: Kesh 4.2.2006, 16:40
Snowy Т.е. если изменить время в Винде - оно изменится и в БИОСЕ???
Добавлено @ 16:50
DemoCode Под хрюшей это не работает... smile
Не удается получить доступ к памяти...

Автор: DemoCode 4.2.2006, 16:51
Код

const Seg0040 = $40;

Только этот код работал у меня на паскале. Delphi под рукой нет проверить не могу.

Автор: Snowy 4.2.2006, 16:51
Цитата(Kesh @ 4.2.2006, 16:40 Найти цитируемый пост)
Snowy Т.е. если изменить время в Винде - оно изменится и в БИОСЕ???

По крайней мере так оно всегда и было во всех версиях винды.
Может я могу ошибаться с моментом, но результат именно такой - изменяя время в винде, оно меняется на уровне всей системы. То есть и в биосе тоже.

Автор: Kesh 4.2.2006, 16:53
Блин, ладно... Халявы не вышло... smile
Всем спасибо за помощь...

Автор: Snowy 4.2.2006, 17:00
Смена времени легко проверяется под Win98.
Запускаем DOS программу, которая показывает системное время.
Меняем время в системе.
DOS программы берут время не из винды, а из DOS, который берет его из биоса.

Если бы была разница, то легко бы вычислялась смена времени.
Но...

Автор: DemoCode 4.2.2006, 17:11
По-крайней мере дата может отличаться точно (проверено на собственной шкуре).

Автор: DemoCode 4.2.2006, 17:29
Цитата

GetSystemTime. Возвращает истинное время. То есть функция думает, что оно истинное, а в действительности - производное от системного счетчика, инкрементируемого каждые 10 мс или 15 мс за вычетом "съеденных" тиков и врожденной неравномерности хода PIT и APIC-таймеров. Периодически синхронизует себя с часами реального времени, а если запущена специальная Интернет-служба, то еще и с атомными часами, т.е. системное время продвигается траекторией пьяного гонщика, едущего по пересеченной местности. Для измерений временных промежутков непригодна.


Так что, если 10-15 мс некритично, можно ей пользоваться.

Автор: Yanis 5.2.2006, 11:08
Цитата(Snowy @ 4.2.2006, 17:00 Найти цитируемый пост)

DOS программы берут время не из винды, а из DOS, который берет его из биоса

smile

Автор: Romikgy 6.2.2006, 17:48
Kesh Если надо у меня есть исходник , с работой под НТ с бивесом (только я юзал стороний компонент и драйвер доступа к портам)

Автор: Kesh 6.2.2006, 20:58
Romikgy Да нет, спасибо, я уже решил проблему...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)