Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   TimeServer im LAN (https://www.delphipraxis.net/64736-timeserver-im-lan.html)

ColdFire 7. Mär 2006 15:52


TimeServer im LAN
 
Hy Leute!

Wieder einmal stehe ich vor einem Problem! Ich Möchte einen Timeserver machen ( im Lan) der die zeiten mit den anderen clients oder die clients mit dem server abgleicht...

tja nur wie mach ich das am besten ... Zeit auslesen und ausgeben ist ja nicht die welt !
Code:
  function SetPCSystemTime(dDateTime: TDateTime): Boolean;
    const
      SE_SYSTEMTIME_NAME = 'SeSystemtimePrivilege';

    var
      hToken              : THandle;
      ReturnLength        : DWORD;
      tkp,
      PrevTokenPriv       : TTokenPrivileges;
      luid                : TLargeInteger;
      dSysTime            : TSystemTime;

    begin
      Result:= False;
      if (Win32Platform = VER_PLATFORM_WIN32_NT) then
        begin
          if OpenProcessToken(GetCurrentProcess,
            TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then
          begin
            try
              if not LookupPrivilegeValue(nil, SE_SYSTEMTIME_NAME, luid) then Exit;
              tkp.PrivilegeCount:= 1;
              tkp.Privileges[0].luid:= luid;
              tkp.Privileges[0].Attributes:= SE_PRIVILEGE_ENABLED;
              if not AdjustTokenPrivileges(hToken, False, tkp, SizeOf(TTOKENPRIVILEGES),
                PrevTokenPriv, ReturnLength) then
                Exit;
              if (GetLastError <> ERROR_SUCCESS) then
                begin
                  raise Exception.Create(SysErrorMessage(GetLastError));
                  Exit;
                end;
            finally
              CloseHandle(hToken);
            end;
          end;
        end;
      DateTimeToSystemTime(dDateTime, dSysTime);
      Result:= Windows.SetLocalTime(dSysTime);
    end;
und
Code:
  procedure TForm1.SetTimeClick(Sender: TObject);
    var
      SystemTime : TSystemTime;
      NewTime,
      NewDate    : string;
    begin
      NewTime:= TimeToStr(Time);
      NewDate:= DateToStr(Date);
{      NewTime:= '13:58:00'; //12:00:15
      NewDate:= '02.02.2001'; // 01.02.2005  }

      DateTimeToSystemTime(StrToDate(NewDate) + StrToTime(NewTime), SystemTime);
      SetLocalTime(SystemTime);
      PostMessage(HWND_BROADCAST, WM_TIMECHANGE, 0, 0);
    end;
tja nur wir sage ich dem client bzw der client dem server hey gib mir deine zeit ( Hirnblockade) :D

lg CF

*** EDIT ***
Mir ist nur eine Idee gekommen und zwar das ich den dos Command (net time \\PCNAME /set) irgendwie verknüpfe
Vill hab ich auch schon zuviel gearbeitet :D
*** EDIT ENDE ***

Bernhard Geyer 7. Mär 2006 16:18

Re: TimeServer im LAN
 
Wenn Du moderne Clients hast (XP, ...) so macht das ein passend konfigurierte Windows-Time-Dienst.
Für alle Windows-Clients schau dir mal NetTime an.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:10 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz