PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → [WD12] synchronisation de l'horloge dans un réseau local
[WD12] synchronisation de l'horloge dans un réseau local
Iniciado por vincemeg, 31,oct. 2008 08:16 - 8 respuestas
Publicado el 31,octubre 2008 - 08:16
Comment à partir de mon application WINDEV synchroniser l'horloge de tous les postes de mon réseau local?
Publicado el 31,octubre 2008 - 09:44
Bonjour,
A partir de Windev je ne sais pas, mais le protocole NTP le fait très bien.

Frédéric.
"Vincent de Paul" <vincemeg@hotmail.com> a écrit dans le message de
news:51a3e192acedbdf50175614c42ce8fe3@news.pcsoft...


Comment à partir de mon application WINDEV synchroniser l'horloge de tous

les postes de mon réseau local?
>
Publicado el 31,octubre 2008 - 10:31
Salut,

"Vincent de Paul" <vincemeg@hotmail.com> a écrit dans le message de
news:51a3e192acedbdf50175614c42ce8fe3@news.pcsoft...


Comment à partir de mon application WINDEV synchroniser l'horloge de
tous
les postes de mon réseau local?



Tu peux utiliser la commande net time dans une console "DOS" .. pour de
l'aide sur cette commande : tapes net time /? dans une console ...
Tu peux lancer un fichier .BAT ou .CMD (selon l'OS) contenant cette commande
et l'heure de ton poste de travail sera synchronisé avec l'heure du serveur
que tu auras indiqué dans la commande net time.

En espérant t'avoir aidé !

--
Marcel Berman
Président de Be-Dev.be (www.be-dev.be) (Belgique)
Membre du CA de Wind'Asso (www.windasso.org) (France)
Be-Dev.be et Wind'Asso sont des associations d'utilisateurs des produits
PC-Soft
Publicado el 31,octubre 2008 - 11:50
Bonjour,

J'ai un code qui date un peu, mais que tu peux adapter :

Erreur est une chaine
Si PAS fg_SynchroHeure(gServeur, sErreur) ALORS
//Erreur("Impossible de mettre à l'heure, raison : "+sErreur)
SINON
//Info("Ce poste a été mis à l'heure")
FIN

FONCTION fg_SynchroHeure(sNomServeur="", sErr="")
// Version 1.00 pour WD7 (WD55 voir les déclarations)
// (c) Novembre 2002 Romain PETIT (mailto:rompetit@ifrance.com)
// sous licence WD-LIBRE (http://www.windevasso.org)
// But: Synchroniser l'heure du poste avec un serveur
// ATTENTION, l'API ne fonctionne que sous NT/2K/XP (avec les droits suffisants)
// pour W9x/Me, la commande console NET TIME sera substituée à l'API
// (qui fonctionne également sous NT/2K/XP)
// Paramètres: Nom du serveur sur lequel regler l'horloge (\\SERVEUR ou SERVEUR)
// (une chaine vide synchronisera l'heure sur le poste lui-même :-)
// Retour: Booléen,
// en cas d'erreur, la fonction retourne faux et la chaine
// sErr passée par adresse peut être récupérée.
// Références API:
// http://msdn.microsoft.com/library/default.asp?url=/library/en-us/netmgmt/netmgmt/netremotetod.asp
// Exemple :
// sErreur est une chaine
// SI PAS fg_SynchroHeure("\\SERVEUR", sErreur) ALORS
// Erreur("Impossible de mettre à l'heure, raison : "+sErreur)
// SINON
//Info("Ce poste a été mis à l'heure")
// FIN
bRes est un booléen//résultat de la fonction
slNomServeur est une chaîne//copie locale du nom du serveur
slNomServeur = SansEspace(sNomServeur)
SI slNomServeur<>"" ALORS
//on s'assure qu'il y ait bien \\
SI slNomServeur[[A 2]]<>"\\" ALORS slNomServeur = "\\" + slNomServeur
FIN

SI SysVersionWindows(sysVersionPlateForme)<>"NT" ALORS
// Si le serveur n'est pas précisé, on donne le poste local
// (car si vide, c'est le serveur de domaine qui sera pris)
SI slNomServeur~="" ALORS slNomServeur="\\"+NetNomMachine()
sFichierScript est une chaîne = fRépertoireTemp()+"SYHtmp.BAT"
sFichierRes est une chaîne = fFichierTemp("SYH")
sResu est une chaîne
eNumfic est un entier = fOuvre(sFichierScript, foCréation+foEcriture)
SI eNumfic<>-1 ALORS
SI fEcrit(eNumfic,"NET TIME "+slNomServeur+" /SET /Y >"+sFichierRes)<>-1 ALORS
bRes = Vrai
FIN
fFerme(eNumfic)
SI bRes ALORS
SI DDELance(sFichierScript,DDEIconise,Vrai) ALORS
eNumfic= fOuvre(sFichierRes)
SI eNumfic<>-1 ALORS
sResu=fLit(eNumfic,1024)
fFerme(eNumfic)
FIN
FIN
fSupprime(sFichierScript)
fSupprime(sFichierRes)

FIN
bRes = Faux
SI sResu~="" ALORS
sErr = "Echec de la mise à l'heure, le serveur "+slNomServeur+...
" est peut-être indisponible."
SINON
bRes = Vrai
FIN
SINON
sErr = "Echec de la mise à l'heure, impossible de créer le fichier temporaire."
FIN
SINON
eRes est un entier //WD55 : entier long //résultat de l'API
ePointeurBuffer est un entier //WD55 : entier long
teNomServeur est un tableau de 255 entiers courts //WD55 : est un tableau 255 entiers courts
c est un entier
strTIME_OF_DAY_INFO est une structure
tod_elapsedt est un entier //WD55 : entier long
tod_msecsest un entier //WD55 : entier long
tod_hoursest un entier //WD55 : entier long
tod_minsest un entier //WD55 : entier long
tod_secsest un entier //WD55 : entier long
tod_hundsest un entier //WD55 : entier long
tod_timezoneest un entier //WD55 : entier long
tod_tintervalest un entier //WD55 : entier long
tod_dayest un entier //WD55 : entier long
tod_monthest un entier //WD55 : entier long
tod_yearest un entier //WD55 : entier long
tod_weekdayest un entier //WD55 : entier long
FIN
strSYSTEMTIME est une structure
wYearest un entier sur 2 octets sans signe //WD55 : entier sans signe
wMonthest un entier sur 2 octets sans signe //WD55 : entier sans signe
wDayOfWeekest un entier sur 2 octets sans signe//WD55 : entier sans signe
wDayest un entier sur 2 octets sans signe //WD55 : entier sans signe
wHourest un entier sur 2 octets sans signe //WD55 : entier sans signe
wMinuteest un entier sur 2 octets sans signe //WD55 : entier sans signe
wSecondest un entier sur 2 octets sans signe //WD55 : entier sans signe
wMillisecondsest un entier sur 2 octets sans signe //WD55 : entier sans signe
FIN
stLocSTest une strSYSTEMTIME
stServeurTODinfoest une strTIME_OF_DAY_INFO
// On transforme la chaine en tableau UNICODE
// (1 caractere sur 2 octets)
POUR c=1 A Taille(slNomServeur)
teNomServeur[(c*2)-1] = Asc(slNomServeur[[c]])
teNomServeur[c*2] = 0
FIN
teNomServeur[(c*2)+1]= 0 // 0 final
SI slNomServeur~="" ALORS slNomServeur=" le poste local"
eRes = AppelDLL32("netapi32","NetRemoteTOD", &teNomServeur,&ePointeurBuffer)
//Récupération de l'heure du serveur et copie mémoire dans la structure
SI eRes = 0 ALORS //NERR_SUCCESS=0
SI ePointeurBuffer<>0 ALORS
Transfert(&stServeurTODinfo, ePointeurBuffer, Dimension(stServeurTODinfo))
// Affectation des valeurs de la structure strTIME_OF_DAY_INFO
// dans la structure strSYSTEMTIME
// et reglage de l'heure (attention, heure GMT et non locale mais
// l'API SetSystemTime tient compte du paramétrage local)
stLocST:wHour= stServeurTODinfo:tod_hours
stLocST:wMinute= stServeurTODinfo:tod_mins
stLocST:wSecond= stServeurTODinfo:tod_secs
stLocST:wDay= stServeurTODinfo:tod_day
stLocST:wMonth= stServeurTODinfo:tod_month
stLocST:wYear= stServeurTODinfo:tod_year
SI AppelDLL32("kernel32", "SetSystemTime", &stLocST)<>0 ALORS
bRes = Vrai
SINON
sErr = "Echec lors de la mise à jour de l'heure sur le poste local,"+...
"vous ne disposez probablement pas des droits suffisants pour cette opération."
FIN
SINON
sErr="Echec de la récupération de l'heure sur "+slNomServeur+...
", pointeur nul"
FIN
SINON
sErr="Echec de la récupération de l'heure sur "+slNomServeur+...
", échec de la fonction NetRemoteTOD : erreur n° "+eRes
FIN
// libération du buffer
AppelDLL32("netapi32", "NetApiBufferFree", ePointeurBuffer)
FIN
RENVOYER bRes


PS : merci à Romain Petit, l'auteur de la procédure
Publicado el 31,octubre 2008 - 14:30
Bonjour Vincent...

Regarde dans les composants de WinDev 12... j'en ai vu un qui fait ca
pas plus tard que hier soir en cherchant autre chose... Par contre, je
ne sais pas s'il vient d'une LST ou s'il est d'origine

Cordialement

--
Fabrice Harari
Consultant WinDev, WebDev et WinDev Mobile International

Plus d'information sur http://fabriceharari.com/index_FR.html


Vincent de Paul wrote:
Comment à partir de mon application WINDEV synchroniser l'horloge de tous les postes de mon réseau local?
Publicado el 31,octubre 2008 - 16:32
Comme il se trouve que je travaillais aussi sur le sujet, et grâce aux informations données par Marcel, je vous donne la solution que j'ai retenu

Pour résoudre le problème des comptes limités, j'utilise l'utilitaire gratuit CPAU (copié dans le répértoire windows ou bon vous semble)
Normalement, j'indique comme login et psw ceux de l'administrateur du poste
Hors dans ce cas, il faut indiquer ceux de l'administrateur du serveur

Ip_serveur peut être soit une adresse ip, soit le nom de l'ordinateur de référence

LanceAppli("c:\windows\cpau.exe -u "+login+" -p "+psw+" -ex ""net time \\"+ip_serveur+" /SET /yes"" -lwp -hide >nul",exeInactif)
Publicado el 31,octubre 2008 - 17:30
Vincent de Paul a écrit :
Comment à partir de mon application WINDEV synchroniser l'horloge de tous les postes de mon réseau local?


Bonjour,

si les postes sont sous 2000, XP, Vista le plus simple est de laisser
faire windows qui intègre un service pour le faire.

Faire une recherche dans l'aide Windows "Synchroniser heure", ou sur google.
Publicado el 06,noviembre 2008 - 17:16
si les postes sont sous 2000, XP, Vista le plus simple est de laisser
faire windows qui intègre un service pour le faire.


Ca ne le fait qu'une fois par semaine il me semble, donc pas suffisant dans mon cas

> Faire une recherche dans l'aide Windows "Synchroniser heure", ou sur google.

Ce genre de post ne fait pas avancer le chmilblic
Ce qui est interessant, c'est des exemples qui marchent, pour éviter de chercher indéfiniment
Publicado el 17,mayo 2020 - 21:59
Ne fonctionne plus en 2020 à cause de l'UAC qui demande à avoir des privilèges supérieures. Dommage