IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Delphi Discussion :

Synchroniser l'heure du PC avec une pendule externe


Sujet :

Delphi

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 54
    Points : 29
    Points
    29
    Par défaut Synchroniser l'heure du PC avec une pendule externe
    Bonjour

    Dans une application, j'ai besoin de pouvoir régler l'heure de mon PC de façon à ce qu'elle soit synchro (au moins pendant quelques heures) avec une horloge HH:MM:SS externe.

    Je veux que les secondes soient parfaitement synchro (enfin à 50 ms près ... c'est suffisant).

    En gros sur mon appli j'ai l'horloge qui s'affiche en temps réel HH:MM:SS et 2 boutons "+50ms" et "-50ms" qui doivent agir sur les secondes du PC.

    Je me met en face la pendule de référence (une pendule radio pilotée par exemple) et je clique sur + ou - de façon à ajuster l'heure du PC jusqu'à ce que visuellement le changement se fasse en même temps.

    Lire et afficher l'heure sur la form : je sais faire.

    Par contre ajouter ou enlever mes 50 ms et aller l'écrire dans l'horloge : Là j'ai besoin de vous .... je ne sais pas faire ....

    Quelqu'un pour m'aider ???


  2. #2
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 685
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 685
    Points : 13 102
    Points
    13 102
    Par défaut
    SetLocalTime, mais pourquoi ne pas utiliser un serveur NTP ? Pas de connexion Internet ?

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 54
    Points : 29
    Points
    29
    Par défaut
    Le PC peut être en pleine nature sans connexion internet effectivement ...

    Et puis l'horloge avec laquelle je veux me synchroniser n'est peut être pas à l'heure d'internet ....

    Merci pour la réponse ...

    Je vais regarder ça.


  4. #4
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 54
    Points : 29
    Points
    29
    Par défaut
    Heuuuu je viens de jeter un coup d'oeil mais ça m'aide pas vraiment ...

    Comme j'intègre ça dans mon appli ????

    C'est sous Delphi 6 ...

  5. #5
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 857
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 857
    Points : 11 291
    Points
    11 291
    Billets dans le blog
    6
    Par défaut
    Regarde peut-être du côté de DecodeTime/EncodeTime ?
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 447
    Points : 24 849
    Points
    24 849
    Par défaut
    et DateTimeToSystemTime

    Voir ce code par exemple : ...change the system time by Thomas Stutz

    Utilise un TDateTimePicker pour fournir le paramètre TDateTime

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    {
      For Windows 9X/ME/NT/2000/XP:
     
      The SetLocalTime function fails if the calling process does not have
      the SE_SYSTEMTIME_NAME privilege. This privilege is disabled by default.
      Use the AdjustTokenPrivileges function to enable this privilege.
    }
     
    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;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  7. #7
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 54
    Points : 29
    Points
    29
    Par défaut
    je viens de trouver un truc qui devait me dépanner ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    var
      Form1: TForm1;
      t:_SYSTEMTIME;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
     
           GetSystemTime(t);
           label1.caption := inttostr(t.wHour);
           label2.caption := inttostr(t.wMinute);
           label3.caption := inttostr(t.wSecond);
           t.wYear:= 2012;
           t.wMonth:= 12;
           t.wDay:= 17;
           t.wHour:= 16;
           t.wMinute:= 40;
           t.wSecond:= 30;
           t.wMilliseconds := 500;
           SetSystemTime(t);
    end;
     
    end.
    Avec ça on peut aller écrire direct dans l'horloge du PC. J'ai plus qu'à faire une boucle pour attendre que les ms du PC soient à 500 et en fonction du bouton sur lequel j'ai appuyé (+ ou -), j'ajoute ou enlève 50ms.

    Je vais tester ...

  8. #8
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 54
    Points : 29
    Points
    29
    Par défaut
    Bon effectivement ça marche super bien ....

    Voici juste un extrait de code pour régler (ajouter) une minute. C'est pareil pour régler le reste.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    var
      Form1: TForm1;
      tampon : word;
      t:_SYSTEMTIME;
     
    ////////////////////////////////////////////////////////////////////
    procedure TForm1.ajouter_minuteClick(Sender: TObject);
    begin
            GetSystemTime(t);
            tampon := t.wMinute;
            tampon := tampon + 1;
            if (tampon >= 60) then
            begin
                tampon := 0;
            end;
            t.wMinute := tampon;
            SetSystemTime(t);
    end;

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 12
    Dernier message: 13/07/2014, 14h21
  2. Synchronisation SQLite avec une Base externe
    Par kimobizertin dans le forum Android
    Réponses: 1
    Dernier message: 11/03/2010, 21h43
  3. Communication avec une application externe
    Par Lethal dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 27/02/2007, 18h30
  4. liaison avec une application externe.
    Par adicor dans le forum MFC
    Réponses: 8
    Dernier message: 05/05/2006, 14h32
  5. calculer une moyenne avec une requete externe
    Par allowen dans le forum Langage SQL
    Réponses: 3
    Dernier message: 27/01/2005, 16h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo