Hello.
J'ai tiré de WD7 API du code, et pourtant je n'obtiens rien d'autre qu'un
plantage sévère.
Le but du jeu est de connaitre X selon le paramétrage GMT + X du système (pour
tenir compte des heures d'été, hiver, etc...)
Voilà le code, si vous avez une idée je suis preneur!
//********************** Déclaration des structures nécessaires à la fonction de
l'API <GetTimeZoneInformation> :
SYSTEMTIME est une structure
wYear est un entier sur 2 octets //Type C : WORD
wMonth est un entier sur 2 octets //Type C : WORD
wDayOfWeek est un entier sur 2 octets //Type C : WORD
wDay est un entier sur 2 octets //Type C : WORD
wHour est un entier sur 2 octets //Type C : WORD
wMinute est un entier sur 2 octets //Type C : WORD
wSecond est un entier sur 2 octets //Type C : WORD
wMilliseconds est un entier sur 2 octets //Type C : WORD
FIN
TIME_ZONE_INFORMATION est une structure
Bias est un entier //Type C : LONG
StandardName est une chaîne fixe sur 32 //Type C : WCHAR
StandardDate est un SYSTEMTIME //SYSTEMTIME est une autre structure
StandardBias est un entier //Type C : LONG
DaylightName est une chaîne fixe sur 32 //Type C : WCHAR
DaylightDate est un SYSTEMTIME //SYSTEMTIME est une autre structure
DaylightBias est un entier //Type C : LONG
FIN
//********************** Fin de la déclaration des
//structures <GetTimeZoneInformation>
RetourFonction est un entier // Type C :DWORD
lpTimeZoneInformation est un entier // Pointeur sur structure
LPTIME_ZONE_INFORMATION
Non rien reçu, mais entre temps j'ai réussi à m'en sortir grace à un site qui indiquait que l'api est complètement fausse
Quel site?
il faut déclarer un tableau de 31 entiers pour avoir les bonnes valeurs, et faire une boucle pour récupérer un par un les caractères ascii
j'ai mis un moment à comprendre que le retour de l'api, c'était la valeur GMT ;-)
Romain PETIT
Dans son message précédent, Gilles G. a écrit :
Je cherche, mais si quelqu'un a une idée...
Peter a raison, il s'agit de chaines Unicode... Voici la soluce (pas la peine de mettre les structures globales) :
TIME_ZONE_ID_INVALID est un entier = 0xFFFFFFFF
SYSTEMTIME est une structure wYear est un entier sans signe sur 2 wMonth est un entier sans signe sur 2 wDayOfWeek est un entier sans signe sur 2 wDay est un entier sans signe sur 2 wHour est un entier sans signe sur 2 wMinute est un entier sans signe sur 2 wSecond est un entier sans signe sur 2 wMilliseconds est un entier sans signe sur 2 FIN
TIME_ZONE_INFORMATION est une structure Bias est un entier StandardName est un tableau fixe de 64 entiers sans signe sur 1 octet StandardDate est un SYSTEMTIME StandardBias est un entier DaylightName est un tableau fixe de 64 entiers sans signe sur 1 octet DaylightDate est un SYSTEMTIME DaylightBias est un entier FIN
TMZ est un TIME_ZONE_INFORMATION sDayLightName est une chaîne c est un entier
hInst est un entier hInst = ChargeDLL("KERNEL32.DLL") SI hInst>0 ALORS SI AppelDLL32("KERNEL32","GetTimeZoneInformation",&TMZ)<>TIME_ZONE_ID_INVALID ALORS Trace(&TMZ:DaylightName) // On récupère le tableau d'octets (qui est une chaine Unicode) // pour en faire une chaine simple (on ne garde qu'1 seul caractere) POUR c=1 A 32 sDayLightName += Caract(TMZ:DaylightName[(c*2)-1]) FIN Info(sDayLightName) sinon //blabla FIN DéchargeDLL(hInst) sinon //blabla FIN
-- Romain PETIT http://cerbermail.com/?IJmancZl88 (cliquez sur le lien ci-dessus pour me contacter en privé)
Dans son message précédent, Gilles G. a écrit :
Je cherche, mais si quelqu'un a une idée...
Peter a raison, il s'agit de chaines Unicode...
Voici la soluce (pas la peine de mettre les structures globales) :
TIME_ZONE_ID_INVALID est un entier = 0xFFFFFFFF
SYSTEMTIME est une structure
wYear est un entier sans signe sur 2
wMonth est un entier sans signe sur 2
wDayOfWeek est un entier sans signe sur 2
wDay est un entier sans signe sur 2
wHour est un entier sans signe sur 2
wMinute est un entier sans signe sur 2
wSecond est un entier sans signe sur 2
wMilliseconds est un entier sans signe sur 2
FIN
TIME_ZONE_INFORMATION est une structure
Bias est un entier
StandardName est un tableau fixe de 64 entiers sans signe sur 1 octet
StandardDate est un SYSTEMTIME
StandardBias est un entier
DaylightName est un tableau fixe de 64 entiers sans signe sur 1 octet
DaylightDate est un SYSTEMTIME
DaylightBias est un entier
FIN
TMZ est un TIME_ZONE_INFORMATION
sDayLightName est une chaîne
c est un entier
hInst est un entier
hInst = ChargeDLL("KERNEL32.DLL")
SI hInst>0 ALORS
SI
AppelDLL32("KERNEL32","GetTimeZoneInformation",&TMZ)<>TIME_ZONE_ID_INVALID
ALORS
Trace(&TMZ:DaylightName)
// On récupère le tableau d'octets (qui est une chaine Unicode)
// pour en faire une chaine simple (on ne garde qu'1 seul caractere)
POUR c=1 A 32
sDayLightName += Caract(TMZ:DaylightName[(c*2)-1])
FIN
Info(sDayLightName)
sinon
//blabla
FIN
DéchargeDLL(hInst)
sinon
//blabla
FIN
--
Romain PETIT
http://cerbermail.com/?IJmancZl88
(cliquez sur le lien ci-dessus pour me contacter en privé)
Peter a raison, il s'agit de chaines Unicode... Voici la soluce (pas la peine de mettre les structures globales) :
TIME_ZONE_ID_INVALID est un entier = 0xFFFFFFFF
SYSTEMTIME est une structure wYear est un entier sans signe sur 2 wMonth est un entier sans signe sur 2 wDayOfWeek est un entier sans signe sur 2 wDay est un entier sans signe sur 2 wHour est un entier sans signe sur 2 wMinute est un entier sans signe sur 2 wSecond est un entier sans signe sur 2 wMilliseconds est un entier sans signe sur 2 FIN
TIME_ZONE_INFORMATION est une structure Bias est un entier StandardName est un tableau fixe de 64 entiers sans signe sur 1 octet StandardDate est un SYSTEMTIME StandardBias est un entier DaylightName est un tableau fixe de 64 entiers sans signe sur 1 octet DaylightDate est un SYSTEMTIME DaylightBias est un entier FIN
TMZ est un TIME_ZONE_INFORMATION sDayLightName est une chaîne c est un entier
hInst est un entier hInst = ChargeDLL("KERNEL32.DLL") SI hInst>0 ALORS SI AppelDLL32("KERNEL32","GetTimeZoneInformation",&TMZ)<>TIME_ZONE_ID_INVALID ALORS Trace(&TMZ:DaylightName) // On récupère le tableau d'octets (qui est une chaine Unicode) // pour en faire une chaine simple (on ne garde qu'1 seul caractere) POUR c=1 A 32 sDayLightName += Caract(TMZ:DaylightName[(c*2)-1]) FIN Info(sDayLightName) sinon //blabla FIN DéchargeDLL(hInst) sinon //blabla FIN
-- Romain PETIT http://cerbermail.com/?IJmancZl88 (cliquez sur le lien ci-dessus pour me contacter en privé)
Gilles G.
In article <cbro5o$qb9$, says...
Anonyme de Webatou.net a écrit: > Non rien reçu, mais entre temps j'ai réussi à m'en sortir grace à un > site qui indiquait que l'api est complètement fausse Quel site?
Je ne sais plus ;) Un truc de coder VB.
In article <cbro5o$qb9$1@news-reader1.wanadoo.fr>,
laurent.systel@wanadoo.fr says...
Anonyme de Webatou.net
<Utilisateur_anonyme_et_non_membre_de_webatou.net@anonyme.com> a écrit:
> Non rien reçu, mais entre temps j'ai réussi à m'en sortir grace à un
> site qui indiquait que l'api est complètement fausse
Quel site?
Anonyme de Webatou.net a écrit: > Non rien reçu, mais entre temps j'ai réussi à m'en sortir grace à un > site qui indiquait que l'api est complètement fausse Quel site?
Je ne sais plus ;) Un truc de coder VB.
Gilles G.
In article , says...
Dans son message précédent, Gilles G. a écrit :
> Je cherche, mais si quelqu'un a une idée... Peter a raison, il s'agit de chaines Unicode... Voici la soluce (pas la peine de mettre les structures globales) :
Oui, j'avais trouvé entre temps. Cependant, ça fonctionne avec une chaine fixe de 31 entiers sur 2 octets Je récupère toutes les valeurs comme il faut. J'avais déplacé le code des structures en local, car (et je n'en ai pas encore l'explication), si les structures sont en globales, et que je fais un appel API, l'appli plante à la fermeture (surement au moment des désallocations).
Merci à tous pour l'aide!
In article <mn.ed1e7d469fa4d6c0.2191@Signature.fin>, VoirM@Signature.fin
says...
Dans son message précédent, Gilles G. a écrit :
> Je cherche, mais si quelqu'un a une idée...
Peter a raison, il s'agit de chaines Unicode...
Voici la soluce (pas la peine de mettre les structures globales) :
Oui, j'avais trouvé entre temps.
Cependant, ça fonctionne avec une chaine fixe de 31 entiers sur 2 octets
Je récupère toutes les valeurs comme il faut.
J'avais déplacé le code des structures en local, car (et je n'en ai pas
encore l'explication), si les structures sont en globales, et que je
fais un appel API, l'appli plante à la fermeture (surement au moment des
désallocations).
> Je cherche, mais si quelqu'un a une idée... Peter a raison, il s'agit de chaines Unicode... Voici la soluce (pas la peine de mettre les structures globales) :
Oui, j'avais trouvé entre temps. Cependant, ça fonctionne avec une chaine fixe de 31 entiers sur 2 octets Je récupère toutes les valeurs comme il faut. J'avais déplacé le code des structures en local, car (et je n'en ai pas encore l'explication), si les structures sont en globales, et que je fais un appel API, l'appli plante à la fermeture (surement au moment des désallocations).