Heure

cs_noel70 Messages postés 40 Date d'inscription samedi 22 mai 2004 Statut Membre Dernière intervention 25 janvier 2007 - 4 sept. 2004 à 18:06
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 5 sept. 2004 à 14:26
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

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
4 sept. 2004 à 19:17
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++
0
cs_noel70 Messages postés 40 Date d'inscription samedi 22 mai 2004 Statut Membre Dernière intervention 25 janvier 2007
4 sept. 2004 à 20:45
Ok, merci.
Mais comment fait-on pour transposer du numérique en ASCII,
utilisation de l'API: wsprintfA ou pas ?
Encore Merci.
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
4 sept. 2004 à 20:49
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++
0
ToutEnMasm Messages postés 587 Date d'inscription jeudi 28 novembre 2002 Statut Membre Dernière intervention 13 décembre 2022 3
5 sept. 2004 à 09:32
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
5 sept. 2004 à 10:09
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
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
5 sept. 2004 à 14:26
API Windows fournit: GetDateFormat().

ciao...
BruNews, Admin CS, MVP VC++
0
Rejoignez-nous