[fasm]-date et heure

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 942 fois - Téléchargée 28 fois

Contenu du snippet

Tiré du code de x5man, j'en ai fait une version utilisable avec Flat Assembler et les API Windows ;)

Source / Exemple :


format PE GUI 4.0
entry start

include 'win32a.inc'

; *****************************************************************************
; ***** Const
; *****************************************************************************
ID_DIALOG          = 10
ID_GROUP_BOX       = 100

ID_LABEL_DATE      = 101
ID_LABEL_TIME      = 102
ID_LOCAL_TIME      = 103

ID_EDIT_DATE       = 104
ID_EDIT_TIME       = 105
ID_EDIT_LOCAL      = 106

ID_BUTTON_TIME     = 107
ID_BUTTON_QUIT     = 108

; *****************************************************************************
; ***** Datas
; *****************************************************************************
section '.data' data readable writeable

  hinstance        dd ?
  IsError          dd ?
  lpSystemTime     SYSTEMTIME                                   ; API struct

  _format_date     db '%02u/%02u/%4u',0
  _buffer_date     rb 11                                        ; 11 bytes reserved (xx/xx/xxxx0)

  _format_time     db '%02d:%02d:%02d',0
  _buffer_time     rb 9                                         ; 9 bytes reserved (xx:xx:xx0)
  _buffer_loc_time rb 9

; *****************************************************************************
; ***** Code
; *****************************************************************************
section '.code' code readable executable

  start:
        invoke  GetModuleHandle,0
        mov     [hinstance],eax
        invoke  DialogBoxParam,[hinstance],ID_DIALOG,HWND_DESKTOP,DialogProc,0
        invoke  ExitProcess,0

; ***** Procedures

proc DialogProc hwnddlg,msg,wparam,lparam
        push    ebx esi edi
        cmp     [msg],WM_INITDIALOG
        je      wminitdialog                                    ; called before dialog box is displayed
        cmp     [msg],WM_COMMAND
        je      wmcommand
        cmp     [msg],WM_CLOSE
        je      wmclose
        xor     eax,eax                                         ; eax = 0
        jmp     finish

  wminitdialog:
        stdcall sys_time,[hwnddlg]
        stdcall loc_time,[hwnddlg]
        stdcall sys_date,[hwnddlg]

        jmp     processed

  wmcommand:
        cmp     [wparam],ID_BUTTON_QUIT                         ; BN_CLICKED shl 16 + ID_BUTTON_QUIT
        je      wmclose                                         ; goto close if click on Cancel
;        invoke  SendMessage,\
;                ID_BUTTON_QUIT, BM_SETSTATE, TRUE, NULL
        invoke  GetDlgItem,[hwnddlg],ID_BUTTON_QUIT             ; ALWAYS put focus on button 'Quit'
        invoke  SetFocus,eax

        cmp     [wparam],ID_BUTTON_TIME                         ; BN_CLICKED shl 16 + ID_BUTTON_TIME
        jne     processed                                       ; <> Ok
        stdcall sys_time,[hwnddlg]                              ; Called when clicked on button 'Time'
        stdcall loc_time,[hwnddlg]
        jmp     processed

  wmclose:
        invoke  EndDialog,[hwnddlg],0

  processed:
        mov     eax,1

  finish:
        pop     edi esi ebx
        ret
endp

proc sys_time   _hwnddlg
        invoke  GetSystemTime,lpSystemTime
        movsx   eax,[lpSystemTime.wHour]                        ; movsx (ou movzx) permet de
        movsx   ebx,[lpSystemTime.wMinute]                      ; convertir en DWORD signed (ou unsigned)
        movsx   edi,[lpSystemTime.wSecond]                      ; car wsprintf ne demande que du DWORD
        cinvoke wsprintf,_buffer_time,_format_time,eax,ebx,edi
        invoke  SetDlgItemText,[_hwnddlg],ID_EDIT_TIME,_buffer_time

        ret     ;return
endp

proc loc_time   _hwnddlg
        invoke  GetLocalTime,lpSystemTime
        movsx   eax,[lpSystemTime.wHour]
        movsx   ebx,[lpSystemTime.wMinute]
        movsx   edi,[lpSystemTime.wSecond]
        cinvoke wsprintf,_buffer_loc_time,_format_time,eax,ebx,edi
        invoke  SetDlgItemText,[_hwnddlg],ID_EDIT_LOCAL,_buffer_loc_time

        ret
endp

proc sys_date   _hwnddlg
        movzx   eax,[lpSystemTime.wDay]                         ; movzx (unsigned)
        movzx   ebx,[lpSystemTime.wMonth]
        movzx   edi,[lpSystemTime.wYear]
        invoke  wsprintf,_buffer_date,_format_date,eax,ebx,edi  ; using invoke because of unsigned word '%02u/%02u/%4u'
        invoke  SetDlgItemText,[_hwnddlg],ID_EDIT_DATE,_buffer_date

        ret
endp

; *****************************************************************************
; ***** Data Import
; *****************************************************************************
section '.idata' import data readable writeable

  library kernel,'KERNEL32.DLL',\
          user,'USER32.DLL'

  import kernel,\
         GetModuleHandle,'GetModuleHandleA',\
         GetSystemTime, 'GetSystemTime',\
         GetLocalTime, 'GetLocalTime',\
         ExitProcess,'ExitProcess'

  import user,\
         DialogBoxParam,'DialogBoxParamA',\
         UpdateWindow,'UpdateWindow',\
         SendMessage,'SendMessageA',\
         SetDlgItemText,'SetDlgItemTextA',\                     ; on peut aussi mettre SetDlgItemInt
         GetDlgItem,'GetDlgItem',\
         SetFocus,'SetFocus',\
         MessageBox,'MessageBoxA',\
         wsprintf,'wsprintfA',\
         LoadIcon,'LoadIconA',\
         EndDialog,'EndDialog'

; *****************************************************************************
; ***** Resources
; *****************************************************************************
section '.rsrc' resource data readable

  directory RT_DIALOG,dialogs,\
            RT_ICON,rt_icons,\
            RT_GROUP_ICON,rt_group_icons

  resource dialogs,\
           ID_DIALOG,LANG_NEUTRAL+SUBLANG_DEFAULT,datesysteme

  resource rt_icons,\
           200,LANG_NEUTRAL,icon_data
  resource rt_group_icons,\
           201,LANG_NEUTRAL,main_icon

  dialog datesysteme,"System Date & Time by Flaith", 70, 70, 150, 110, DS_CENTER+DS_MODALFRAME+WS_POPUP+WS_VISIBLE+WS_CAPTION+WS_SYSMENU
    dialogitem 'STATIC','System date :', ID_LABEL_DATE , 10, 10, 45, 14, SS_RIGHT + SS_CENTERIMAGE + WS_CHILD + WS_VISIBLE + WS_GROUP, 0x00000000
    dialogitem 'STATIC','System Time :', ID_LABEL_TIME , 10, 30, 45, 14, SS_RIGHT + SS_CENTERIMAGE + WS_CHILD + WS_VISIBLE + WS_GROUP, 0x00000000
    dialogitem 'STATIC','Local Time :' , ID_LOCAL_TIME , 10, 50, 45, 14, SS_RIGHT + SS_CENTERIMAGE + WS_CHILD + WS_VISIBLE + WS_GROUP, 0x00000000
    dialogitem 'BUTTON',''             , ID_GROUP_BOX  , 60,  0, 85, 70, BS_GROUPBOX + WS_CHILD + WS_VISIBLE, 0x00000000
    dialogitem 'STATIC','__/__/____'   , ID_EDIT_DATE  , 70, 10, 65, 14, SS_CENTER + SS_CENTERIMAGE + WS_CHILD + WS_VISIBLE + WS_GROUP, 0x00000204
    dialogitem 'STATIC','__:__:__'     , ID_EDIT_TIME  , 70, 30, 65, 14, SS_CENTER + SS_CENTERIMAGE + WS_CHILD + WS_VISIBLE + WS_GROUP, 0x00000204
    dialogitem 'STATIC','__:__:__'     , ID_EDIT_LOCAL , 70, 50, 65, 14, SS_CENTER + SS_CENTERIMAGE + WS_CHILD + WS_VISIBLE + WS_GROUP, 0x00000204

; button quit defined first (before time) with BS_DEFPUSHBUTTON value to give focus

    dialogitem 'BUTTON','&Quit'        , ID_BUTTON_QUIT, 80, 80, 60, 28, WS_VISIBLE+WS_TABSTOP+BS_DEFPUSHBUTTON ;BS_DEFPUSHBUTTON + BS_VCENTER + BS_CENTER + WS_CHILD + WS_VISIBLE + WS_TABSTOP
    dialogitem 'BUTTON','&Time'        , ID_BUTTON_TIME, 10, 80, 60, 28, WS_VISIBLE+WS_TABSTOP+BS_PUSHBUTTON ;BS_PUSHBUTTON + BS_VCENTER + BS_CENTER + WS_CHILD + WS_VISIBLE + WS_TABSTOP
  enddialog

  icon main_icon,icon_data,'nico.ico'     ; mettez l'icone que vous voulez

A voir également

Ajouter un commentaire Commentaires
Messages postés
17
Date d'inscription
mercredi 9 avril 2003
Statut
Membre
Dernière intervention
29 octobre 2008

Oui, je sais, c'est pour cela que j'ai aussi commencé à traduire la doc de Fasm,
une première partie est ici : http://flaith.free.fr/My_files/Fasm/FASM-FR.pdf
Il y a encore pas mal de boulot, mais je ne désespère pas !
Messages postés
7
Date d'inscription
mercredi 22 février 2006
Statut
Membre
Dernière intervention
30 août 2006

salut
désolé de demander cela ici, mais je ne trouve pas de documentation sur fasm en français.
Pouriez-vous me renseigner ?
Je débute et je ne suis pas un crack en anglais
merci d'avance
Messages postés
17
Date d'inscription
mercredi 9 avril 2003
Statut
Membre
Dernière intervention
29 octobre 2008

Oui m'sieur :D
Messages postés
22
Date d'inscription
lundi 24 mai 2004
Statut
Membre
Dernière intervention
6 juillet 2005

Euh ! C'est de moi que vous parlez ! :)

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.