Lister vos fichier temporaire dans une listbox masm32

0/5 (3 avis)

Snippet vu 4 931 fois - Téléchargée 25 fois

Contenu du snippet

Bonjour a tous,
Ce code Liste les fichiers temporaires dans une listbox.
Pas le temps d'expliquer le fonctionnement,mais il suffit de jeter un coups d'oeil
aux apis pour comprendre et a quelque bout de code simple!

Bon coding!

Source / Exemple :


.386
      .model flat, stdcall
      option casemap :none  

      include \masm32\include\windows.inc
      include \masm32\include\gdi32.inc
      include \masm32\include\user32.inc
      include \masm32\include\kernel32.inc

      includelib \masm32\lib\gdi32.lib
      includelib \masm32\lib\user32.lib
      includelib \masm32\lib\kernel32.lib

szText MACRO Name, Text:VARARG
        LOCAL lbl
          jmp lbl
            Name db Text,0
          lbl:
        ENDM

      m2m MACRO M1, M2
        push M2
        pop  M1
      ENDM

      return MACRO arg
        mov eax, arg
        ret
      ENDM

              WinMain PROTO :DWORD,:DWORD,:DWORD,:DWORD
        WndProc PROTO :DWORD,:DWORD,:DWORD,:DWORD
        TopXY PROTO   :DWORD,:DWORD

    .data
        szDisplayName db "Fichier Temporaire:",0
        CommandLine   dd 0
        hWnd          dd 0
        hInstance     dd 0
        lpfnWndProc   dd 0
EnPlus      db "*.*",0

.DATA?
CheminTemp db 256 dup(?)
buffer2     db 256 dup(?)
result      WIN32_FIND_DATA <?>
hdl         dd ?

    .code

start:
        invoke GetModuleHandle, NULL
        mov hInstance, eax

        invoke GetCommandLine
        mov CommandLine, eax

        invoke WinMain,hInstance,NULL,CommandLine,SW_SHOWDEFAULT
        invoke ExitProcess,eax

WinMain proc hInst     :DWORD,
             hPrevInst :DWORD,
             CmdLine   :DWORD,
             CmdShow   :DWORD

      

        LOCAL msg  :MSG
        LOCAL Wwd  :DWORD
        LOCAL Wht  :DWORD
        LOCAL Wtx  :DWORD
        LOCAL Wty  :DWORD

        mov Wwd, 300
        mov Wht, 200

        invoke GetSystemMetrics,SM_CXSCREEN
        invoke TopXY,Wwd,eax
        mov Wtx, eax

        invoke GetSystemMetrics,SM_CYSCREEN
        invoke TopXY,Wht,eax
        mov Wty, eax

        szText szClassName,"LISTBOX"

        invoke CreateWindowEx,WS_EX_PALETTEWINDOW or WS_EX_CLIENTEDGE,
                              ADDR szClassName,
                              ADDR szDisplayName,
                              WS_OVERLAPPEDWINDOW or WS_VSCROLL or                               LBS_HASSTRINGS or LBS_NOINTEGRALHEIGHT or                               LBS_DISABLENOSCROLL,                               Wtx,Wty,Wwd,Wht,
                              NULL,NULL,
                              hInst,NULL
        mov   hWnd,eax

        invoke SetWindowLong,hWnd,GWL_WNDPROC,ADDR WndProc
        mov lpfnWndProc, eax

        invoke GetStockObject,ANSI_FIXED_FONT
        invoke SendMessage,hWnd,WM_SETFONT,eax,0

;Trouve le repertoire des fichiers temporaires <-----------

invoke GetTempPath,MAX_PATH,addr CheminTemp

;---------------------------------------------------------------

Invoke lstrcat,addr CheminTemp,addr EnPlus

 invoke FindFirstFile, ADDR CheminTemp, ADDR result
    .IF eax!=INVALID_HANDLE_VALUE
        mov hdl, eax
           
invoke SendMessage,hWnd,LB_ADDSTRING,0,ADDR result.cFileName
 
le_loop:
        invoke FindNextFile, hdl, ADDR result
        cmp eax, 0
        je fini
   invoke SendMessage,hWnd,LB_ADDSTRING,0,ADDR result.cFileName
       
jmp le_loop
    .ELSE
   
    .ENDIF
   fini:
    invoke FindClose, hdl

       

        invoke ShowWindow,hWnd,SW_SHOWNORMAL
        invoke UpdateWindow,hWnd

    

    StartLoop:
      invoke GetMessage,ADDR msg,NULL,0,0
      cmp eax, 0
      je ExitLoop
      invoke TranslateMessage, ADDR msg
      invoke DispatchMessage,  ADDR msg
      jmp StartLoop
    ExitLoop:

      return msg.wParam

WinMain endp

WndProc proc hWin   :DWORD,
             uMsg   :DWORD,
             wParam :DWORD,
             lParam :DWORD

    .if uMsg == WM_CLOSE

    .elseif uMsg == WM_DESTROY
        invoke PostQuitMessage,NULL
        return 0 
    .endif

    invoke CallWindowProc,lpfnWndProc,hWin,uMsg,wParam,lParam

    ret

WndProc endp

TopXY proc wDim:DWORD, sDim:DWORD

    shr sDim, 1     
    shr wDim, 1      
    mov eax, wDim   
    sub sDim, eax 

    return sDim

TopXY endp

end start

A voir également

Ajouter un commentaire

Commentaires

BruNews
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
13 -
Vive les Apis , masm, et le 32bit.
Bien evidemment, ce n'est pas moi en tant que MVP qui dirait le contraire.
MASM32 permet tout a fait d'ecrire du bon asm optimise.

.model flat,stdcall
option casemap:none
option prologue:none
option epilogue:none

Voila deja un moyen de ne pas le laisser faire ce qu'il veut.

Penses-tu que tu donnes envie aux gens de t'aider avec tes reponses ?
Vv20oX
Messages postés
8
Date d'inscription
dimanche 25 janvier 2004
Statut
Membre
Dernière intervention
8 mars 2004
-
Alors,si tu veux,tu n'as qu'a t'amusé a le remodifier...
En bref:
Vive les Apis , masm, et le 32bit.
Conclusion:
Je vais me mettre a programmer avec un pb15!
:-)
Bonne prog.
BruNews
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
13 -
Faut revoir ta boucle, on ne devrait trouver qu'une seule fois:
invoke SendMessage,hWnd,LB_ADDSTRING,0,ADDR result.cFileName

Il y a des registres, hWnd y aurait bien trouve sa place dans une boucle plutot que de lire la memoire a chaque tour.

Tu vois l'utilite d'un bloc 'WinMain' dans un prog ASM ??? tu empiles 4 params pour rien, tout ce que fait WinMain se faisait aussi bien sans.

Pour conclure: Essaie donc d'ecrire de l'ASM plutot que le sabir permis par MASM, tu auras plus de chance de progresser.

Bonne prog,

BruNews, Admin CS, MVP Visual C++

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.