Heure

Signaler
Messages postés
40
Date d'inscription
samedi 22 mai 2004
Statut
Membre
Dernière intervention
25 janvier 2007
-
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
-
Bonjour a tous.
Voila, j'ai un probleme avec l'utilsation de l'API GetSystemTime,
Pour récupérer le mois et l'année du PC.
J'ai fait ceci:

invoke GetSystemTime, offset Time_System
mov ax, Time_System.wYear
mov Annee_System, ax
mov ax, Time_System.wMonth
mov Mois_System, ax

invoke MessageBox, date, offset Annee_System, offset Mois_System, MB_OK

Mais dans ma boite de message, je n'ai que des caractères bizarres, rien qui ressemble à une date.

Si quelqu'un peut m'expliquer pourquoi, ou a une solution, Merci.

6 réponses

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
On affiche des chaines de caracteres a terminateur NULL.
Faut donc transposer le numerique en ASCII dans un buffer.

ciao...
BruNews, Admin CS, MVP VC++
Messages postés
40
Date d'inscription
samedi 22 mai 2004
Statut
Membre
Dernière intervention
25 janvier 2007

Ok, merci.
Mais comment fait-on pour transposer du numérique en ASCII,
utilisation de l'API: wsprintfA ou pas ?
Encore Merci.
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
wsprintf est d'une extreme lenteur cause que nombre de params est indetermine.
Regarde dans les libs de masm32, doit y avoir 'dwtoa' ou nom de ce genre pour convertir en ascii.

ciao...
BruNews, Admin CS, MVP VC++
Messages postés
569
Date d'inscription
jeudi 28 novembre 2002
Statut
Membre
Dernière intervention
6 janvier 2021
2
Salut,

La méthode la plus simple et la plus universelle est celle la

LOCAL temps:SYSTEMTIME
LOCAL Tempyear[50]:BYTE
LOCAL Tempday[50]:BYTE
LOCAL TempMonth[50]:BYTE
LOCAL phrase[MAX_PATH+1]:BYTE
ZEROLOCALES phrase

.IF uMsg == WM_COMMAND;toolbar commands

.if wParam == 50 ;commande du bouton
.data
espace db " ",0
carTab db 9,0
slash db "/",0
retourligne db 13,10
.code
invoke GetSystemTime,addr temps
;convertir nombres en chaines
xor edx,edx
mov dx,temps.wYear
invoke dwtoa,edx,addr Tempyear
xor edx,edx
mov dx,temps.wDay
invoke dwtoa,edx,addr Tempday
xor edx,edx
mov dx,temps.wMonth
invoke dwtoa,edx,addr TempMonth
;former la date par concaténation
invoke szCatStr,addr phrase,addr Tempday
invoke szCatStr,addr phrase,addr slash
invoke szCatStr,addr phrase,addr TempMonth
invoke szCatStr,addr phrase,addr slash
invoke szCatStr,addr phrase,addr Tempyear
;affiché la date
invoke MessageBox,NULL,ADDR phrase,SADD("Nous sommes le"),MB_OK
;------- continuer suivant le meme principe pour le reste

avec la macro, remettant a zero les chaines locales

ZEROLOCALES MACRO dernierelocale:REQ
mov ecx,ebp
lea edx,dernierelocale
sub ecx,edx
.if ecx != 0
push edi
mov edi,edx
mov al,0
cld
rep stosb
pop edi
.endif
ENDM

ToutEnMasm
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
Ca rejoint ce que BruNews disait sur l'utilisation de dwtoa.
Ton exemple m'a aussi beaucoup appris, a mon stade de novice en ASM.

Shell
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
API Windows fournit: GetDateFormat().

ciao...
BruNews, Admin CS, MVP VC++