Lister vos fichier temporaire dans une listbox masm32

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

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.