Accueil > > > EXTRACTICONES
EXTRACTICONES
Information sur la source
Description
permet d'extraire les icones et les curseur qui ce trouve dans la section de
resource des executables
Source
- ;à chaque item du liste box est associé
- ;un pointeur sur une structure à taille variable
- ;selon le nombre d'icone que contient l'icone,
- ;cette structure est présentée:
- ;struct_data_item
- ;WORD TYPE
- ;WORD NBR_ICON
- ;WORD ID1,ID2...
- ;...selon NBR_ICON
-
- .386
- .model flat,stdcall
- option casemap:none
- include c:\masm32\include\windows.inc
- include c:\masm32\include\user32.inc
- include c:\masm32\include\kernel32.inc
- include c:\masm32\include\gdi32.inc
- include c:\masm32\include\comdlg32.inc
-
-
- includelib c:\masm32\lib\user32.lib
- includelib c:\masm32\lib\kernel32.lib
- includelib c:\masm32\lib\gdi32.lib
- includelib c:\masm32\lib\comdlg32.lib
-
-
-
-
- .data
- szdisplayname db 'EXTACTICON',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
- FORMHEX db '0123456789ABCDEF'
- FilterStExe db "Executable Files (*.dll;*.exe)",0,"*.dll;*.exe",0
- db "All Files",0,"*.*",0,0
- FilterStrIco db "fichier icone (*.ico)",0,"*.ico",0,0
- ;db "All Files",0,"*.*",0,0
- FilterStrCurs db "fichier curseur (*.cur)",0,"*.cur",0
- ;db "All Files",0,"*.*",0,0
-
-
- buffer db 200 dup (0)
- lpfile db 50 dup (0)
- initDir db 100 dup (0)
- OPFN dd 76,0,0,0,0,0,0,offset buffer,512
- dd offset lpfile,50,0,0,0,0,0,0,0
-
-
-
- str_raw db 'TYPE ID OFFSET SIZE',0
- str_grpicon db 'ICONES',0
- str_icon db 'ICONE',0
- str_cursor db 'CURSOR',0
- str_grpcursor db 'CURSORS ',0
-
-
- msg1 db 'PE NON VALIDE !',0
-
-
- m_item1 db 'ouvrir executable',0
- m_item2 db 'extraire ico,cur',0
- m_item3 db 'copier item',0
- h_mpopup dd 0
-
-
- buf db 100 dup(0)
- buf2 db 100 dup(20h)
-
- cl_list db 'LISTBOX',0
- cl_btn db 'BUTTON',0
- cl_scrl db 'SCROLLBAR',0
- hbtn dd 0
- hlist dd 0
- hscrl dd 0
- hinst dd 0
-
- hModule dd 0
- hIcon dd 0
- hHeap dd 0
-
- bloc_scrl dd 0
- bloc_data dd 0
- filesize dd 0
- cur_item dd 0
- Extico db '.ico'
- .code
- PROGRAMME:
- ;-----------------------WINMAIN-----------------------------
- push 512
- push GPTR
- call GlobalAlloc
- push eax ;arg GlobalFree
- mov dword ptr [ebp-4],eax
- mov edx,DS_CENTER
- or edx,WS_POPUP
- or edx,WS_SYSMENU
- ;or edx,DS_MODALFRAME
- or edx,WS_CAPTION
- mov dword ptr [eax],edx
- mov word ptr [eax+10],0
- mov word ptr [eax+12],0
- mov word ptr [eax+14],290
- mov word ptr [eax+16],100
- push 0
- call GetModuleHandle
- mov hinst,eax
- call GetProcessHeap
- mov hHeap,eax
- push 0
- push offset DialogProc
- push 0
- push [ebp-4]
- push hinst
- call DialogBoxIndirectParam
- call GlobalFree
- push 0
- call ExitProcess
-
- ;---------------------------------DIALOGPROC---------------------------
- DialogProc proc
- push ebp
- mov ebp,esp
- cmp dword ptr [ebp+12],WM_INITDIALOG
- jnz @wmclose
-
-
- push offset szdisplayname
- push [ebp+8]
- call SetWindowText
-
- push 501
- push hinst
- call LoadIcon
-
- push eax
- push ICON_SMALL
- push WM_SETICON
- push [ebp+8]
- call SendMessage
-
-
-
-
-
-
-
-
-
-
-
-
-
- call CreateMenu
- push eax
- push offset m_item1
- push 1 ;ID
- push 0
- push eax
- call AppendMenu
- pop eax
- push eax
- push [ebp+8]
- call SetMenu
-
-
- call CreatePopupMenu
- mov h_mpopup,eax
- push offset m_item2
- push 2 ;ID
- push 0
- push eax
- call AppendMenu
- push offset m_item3
- push 3 ;ID
- push 0
-
-
- push h_mpopup
- call AppendMenu
-
-
- push 0
- push hinst
- push 500 ;ID
- push [ebp+8]
- push 170
- push 320
- push 0
- push 5
- push LBS_DISABLENOSCROLL or LBS_NOINTEGRALHEIGHT \
- or LBS_HASSTRINGS or LBS_NOTIFY or WS_CHILD or \
- WS_VISIBLE or WS_VSCROLL
- push 0
- push offset cl_list
- push WS_EX_CLIENTEDGE
- call CreateWindowEx
- mov hlist,eax
- ;---choisis police
- push 11
- call GetStockObject
- push 0
- push eax
- push 30h
- push hlist
- call SendMessage
-
-
- push 0
- push hinst
- push 500 ;ID
- push [ebp+8]
- push 170
- push 200
- push 0
- push 350
- push WS_CHILD or WS_VISIBLE or BS_OWNERDRAW
- push 0
- push offset cl_btn
- push 0;WS_EX_CLIENTEDGE
- call CreateWindowEx
- mov hbtn,eax
-
-
-
- push 0
- push hinst
- push 200 ;ID
- push [ebp+8]
- push 170
- push 15
- push 0
- push 560
- push WS_CHILD or WS_VISIBLE or SBS_VERT
- push 0
- push offset cl_scrl
- push 0
- call CreateWindowEx
- mov hscrl,eax
-
-
- invoke HeapAlloc,hHeap,HEAP_ZERO_MEMORY,28
- mov bloc_scrl,eax
- mov dword ptr [eax],28 ;sizeofstruct
- mov dword ptr [eax+4],SIF_DISABLENOSCROLL or SIF_ALL
- mov dword ptr [eax+16],170
-
-
-
- @wmclose:
- cmp dword ptr [ebp+12],WM_CLOSE
- jnz @wmcontextm
- xor eax,eax
- push 0
- push [ebp+8]
- call EndDialog
- mov esp,ebp
- pop ebp
- ret
-
- @wmcontextm:
- cmp dword ptr [ebp+12],WM_CONTEXTMENU
- jnz @wmcommand
- invoke SendMessage,hlist, LB_GETCURSEL,0,0
- cmp eax,0FFFFFFFFh
- jz @wmcommand
- mov ax,[ebp+20];yposcur
- movzx eax,ax
- mov bx,[ebp+22];xposcur
- movzx ebx,bx
- push 0
- push [ebp+8]
- push 0
- push ebx
- push eax
- push 0
- push h_mpopup
- call TrackPopupMenu
-
-
-
- @wmcommand:
- cmp dword ptr [ebp+12],WM_COMMAND
- jnz @wmdrawitem
- cmp word ptr[ebp+16],1
- jnz @cmd1
- push [ebp+8]
- call MappFile
-
- @cmd1:
- cmp word ptr[ebp+16],2
- jnz @cmd2
- call Extract
- @cmd2:
- cmp word ptr[ebp+16],3
- jnz @cmd3
- call cpytoclipboard
-
- @cmd3:
-
-
- ;cmp word ptr[ebp+16],500
- ;jnz @wmdrawitem
- cmp word ptr[ebp+18],LBN_SELCHANGE
- jnz @wmdrawitem
- call SelChange
- jmp @endprocd
-
- @wmdrawitem:
- cmp dword ptr [ebp+12],WM_DRAWITEM
- jnz @wmvscroll
- mov eax,[ebp+20]
-
- cmp dword ptr [eax+4],500
- jnz @wmvscroll
- invoke SendMessage,hlist,LB_GETCOUNT,0,0
- test eax,eax
- jz @wmvscroll
- push [ebp+20]
- push [ebp+16]
- call DrawItem
-
- @wmvscroll:
- cmp dword ptr [ebp+12],WM_VSCROLL
- jnz @endprocd
- push [ebp+16]
- call OnVScroll
-
-
- @endprocd:
- xor eax,eax
- mov esp,ebp
- pop ebp
- ret 16
- DialogProc endp
-
- OnVScroll proc
- push ebp
- mov ebp,esp
- sub esp,32
-
- mov dword ptr[ebp-32],28
- mov dword ptr[ebp-28],SIF_ALL
- lea esi,[ebp-32]
-
- push esi
- push SB_CTL
- push hscrl
- call GetScrollInfo
-
- mov edx,[ebp-12] ;y
- mov eax,[ebp+8]
-
- cmp ax,SB_LINEDOWN
- push ax
- jnz @sblup
-
- inc edx
-
- @sblup:
- pop ax
- cmp ax,SB_LINEUP
- push ax
- jnz @sbpageup
-
- dec edx
-
- @sbpageup:
- pop ax
- cmp ax,SB_PAGEUP
- push ax
- jnz @sbpagedown
-
- sub edx,[ebp-16]
-
- @sbpagedown:
- pop ax
- cmp ax,SB_PAGEDOWN
- push ax
- jnz @sbthumposition
-
- add edx,[ebp-16]
-
-
- @sbthumposition:
- pop ax
- cmp ax,SB_THUMBPOSITION
- push ax
- jnz @sbthumbtrack
-
- mov edx,[ebp-12]
-
- @sbthumbtrack:
- pop ax
- cmp ax,SB_THUMBTRACK
- jnz @endswitch
-
- mov edx,[ebp-8]
-
- @endswitch:
-
- push 1
- push edx
- push SB_CTL
- push hscrl
- call SetScrollPos
-
-
- push FALSE
- push 0
- push hbtn
- call InvalidateRect
-
-
- push hbtn
- call UpdateWindow
-
-
-
-
-
- mov esp,ebp
- pop ebp
- ret 4
- OnVScroll endp
- ;----------------CLIP BOARD-------------
- cpytoclipboard proc
-
-
- push ebp
- mov ebp,esp
- sub esp,4 ;reserve 4 octet pour handle MEM
-
- invoke SendMessage,hlist, LB_GETCURSEL,0,0
- test eax,eax
- js @noselectitem
- invoke SendMessage,hlist, LB_GETTEXT,eax,ADDR buf
-
- push hlist
- call OpenClipboard
- call EmptyClipboard
-
- push 200
- push GMEM_ZEROINIT or GMEM_MOVEABLE or GMEM_SHARE
- call GlobalAlloc ;cree l'espace MEMOIRE
- mov [ebp-4],eax ;retourne un handle
- push eax
- call GlobalLock ;donne ptr sur MEMOIRE
- mov edi,eax
- lea esi,buf
- push esi
-
- @c: lodsb
- stosb
- test al,al
- jnz @c
-
- mov al,0
- mov ecx,100
- pop edi
- rep stosb
-
-
- push [ebp-4]
- call GlobalUnlock
-
- push [ebp-4]
- push 1 ;type texte
- call SetClipboardData
- call CloseClipboard
-
- push [ebp-4]
- call GlobalFree
- @noselectitem:
- mov esp,ebp
- pop ebp
- ret
- cpytoclipboard endp
- ;-------------------------------------
- ;------------------CHANGEMENT DE SELECTION LSTBOX----
- SelChange proc
- push ebp
- mov ebp,esp
-
- ;------------on recupere ptr associé à l'item
-
- invoke SendMessage,hlist, LB_GETCURSEL,0,0
- test eax,eax
- jnz @memdata
- invoke SendMessage,hlist, LB_SETCURSEL,1,0
- @memdata:
- invoke SendMessage,hlist,LB_GETITEMDATA,eax,0
-
- push eax ;ptr item_data
- call memdata
-
- mov ebx,bloc_scrl
- ;----------mask scroll info
- mov edx,SIF_ALL
- or edx,SIF_DISABLENOSCROLL
- mov dword ptr [ebx+4],edx
- ;---------min scroll info
- mov dword ptr [ebx+8],0
- mov [ebx+12],eax
- ;-------- pos scroll info
- mov dword ptr [bloc_scrl+20],0
-
- push 1
- push bloc_scrl
- push SB_CTL
-
- push hscrl
- call SetScrollInfo
-
- push 0
- push 0
- push hbtn
- call InvalidateRect
-
- mov esp,ebp
- pop ebp
-
- ret
- SelChange endp
-
-
-
-
- ;--------------OUVERTURE ET MAPPAGE DU FICHIER----------------------
- MappFile proc
- push ebp
- mov ebp,esp
- sub esp,16
-
- lea eax,FilterStExe
- mov [OPFN+12],eax
- mov eax,OFN_PATHMUSTEXIST
- or eax,OFN_FILEMUSTEXIST
- or eax,OFN_HIDEREADONLY
- or eax,OFN_LONGNAMES
- mov [OPFN+52],eax
- mov [OPFN+44],0
-
- push 100
- push offset initDir
- call GetSystemDirectory
- push offset OPFN
- call GetOpenFileName
-
- and eax,eax
-
-
- jnz mapping
- mov esp,ebp
- pop ebp
- ret
- mapping:
- push 0
- push OPEN_EXISTING
- push 0
- push FILE_SHARE_READ
- push GENERIC_READ
- push offset buffer
- call CreateFile
- mov dword ptr [ebp-12],eax
- push 0
- push 0
- push 0
- push PAGE_READONLY
- push 0
- push eax
- call CreateFileMapping
- mov dword ptr [ebp-8],eax
- push 0
- push 0
- push 0
- push FILE_MAP_READ
- push eax
- call MapViewOfFile
- mov dword ptr [ebp-4],eax
- cmp word ptr [eax],'ZM'
- jnz exitMappFile
- add eax,[eax+60]
- cmp dword ptr [eax],4550h
- jnz noValidPE
-
-
- push eax
-
- lea edi,[szdisplayname+10]
- mov byte ptr [edi],'-'
- inc edi
- push edi
- push offset lpfile
- call scopy
- push offset szdisplayname
- push [ebp+8]
- call SetWindowText
-
- pop eax
-
- push [ebp+8]
- push eax
- push [ebp-4];ptr_mapp
- call GetRsrc
-
- jmp exitMappFile
- noValidPE:
- push 0
- push offset msg1
- push offset msg1
- push 0
- call MessageBox
- exitMappFile:
- push [ebp-4]
- call UnmapViewOfFile
- push [ebp-8]
- call CloseHandle
- push [ebp-12]
- call CloseHandle
- mov esp,ebp
- pop ebp
- ret 4
- MappFile endp
- ;--------------LIBERE MEM-----
- freedata proc
- mov eax,hModule
- test eax,eax
- jnz free
- ret
- free:
-
- push hModule
- call FreeLibrary
-
- push bloc_data
- push 0
- push hHeap
- call HeapFree
-
-
-
- invoke SendMessage,hlist,LB_GETCOUNT,0,0
- test eax,eax
- jnz freeitem
- ret
- freeitem:
- ;dec eax
- mov ecx,eax
- freenext:
- push ecx
-
- invoke SendMessage,hlist,LB_GETITEMDATA,ecx,0
- push eax
- push 0
- push hHeap
- call HeapFree
-
- pop ecx
- dec ecx
- test ecx,ecx
- jnz freenext
- ret
- freedata endp
- ;-----------------------------
-
- ;-------------LIT SECTION RSRC ET STOCKE LES DONNEES --------------
-
- ;arg1 ptr mappfile, arg2 addr PE
- GetRsrc proc
- push ebp
- mov ebp,esp
- sub esp,32
-
-
-
-
-
- call freedata
-
-
- push 0
- push 0
- push LB_RESETCONTENT
- push hlist
- call SendMessage
-
-
-
- push 1
- push 0
- push hbtn
- call InvalidateRect
-
-
-
-
-
-
-
- mov eax,[ebp+12]
-
- add eax,248 ;eax=OFF_SECTION_HEADER
-
-
-
- ;------------------ recherche section de resource dans le header
- mov ecx,5
- findsection:
- cmp dword ptr[eax],'rsr.'
- jz itssection
-
- add eax,40
- dec ecx
- test ecx,ecx
- jnz findsection
- mov esp,ebp
- pop ebp
- ret 12
- itssection:
- mov edx,[eax+12] ;edx=RVA SECTION
- mov dword ptr [ebp-8],edx
- mov eax,[eax+20] ;eax=off_file rsrc
- mov dword ptr [ebp-12],eax ;RAW SECTION
- add eax,[ebp+8] ;eax=pmap_off_file rsrc
- mov dword ptr [ebp-4],eax ;sauvegarde
- ;-------------------
- push eax
-
-
- push LOAD_LIBRARY_AS_DATAFILE
- push 0
- push offset buffer
- call LoadLibraryEx
- mov hModule,eax
-
- invoke SendMessage,hlist,LB_ADDSTRING,0,ADDR str_raw
-
- pop eax
-
- mov cx,[eax+12]
- mov dx,[eax+14]
- add cx,dx
- movzx ecx,cx ;ecx = NBR_DIR_ENTRY
- add eax,16 ;eax = RSRC_DIR_ENTRY
-
-
-
- next_dir_entry:
- push ecx
- push eax
-
-
-
- mov edx,[eax]
- mov dword ptr [ebp-32],edx
- test edx,0FFFFFF00h
- jnz next_type ;si le type est un string passe au suivant
- cmp edx,1 ;curseur ?
- jnz @1
- mov dword ptr [ebp-16],offset str_cursor
- jmp @4
- @1:
- cmp edx,3 ;icone ?
- jnz @2
- mov dword ptr [ebp-16],offset str_icon
- jmp @4
- @2:
- cmp edx,12 ;grp_cursor ?
- jnz @3
- mov dword ptr [ebp-16],offset str_grpcursor
- jmp @4
- @3:
- cmp edx,14 ;grp_icon ?
- jnz next_type ;si le type pas icone pas curseur pas groupe icone pas grp cur suivant
- mov dword ptr [ebp-16],offset str_grpicon
-
- @4:
-
- mov edx,[eax+4]
- and edx,00FFFFFFh
- add edx,[ebp-4] ;edx= ADDR SUB_DIR_TO_MAPFILE
-
- mov cx,[edx+12]
- add cx,[edx+14];cx= NBR_SUBDIR_ENTRY
- add edx,16 ;edx=START_SUBDIRS
- movzx ecx,cx
-
-
-
- next_subdir_entry:
- push ecx
- push edx
-
- mov ebx,[edx]
-
-
- mov dword ptr [ebp-20],ebx ;ebx= ID_RSRC
- mov ebx,[edx+4];ebx=ADDR_DIR_DATA
- and ebx,00FFFFFFh
- add ebx,[ebp-4];ebx=ADDR_DIR_DATA_TO_MAPFILE
- mov ebx,[ebx+20];ebx=ADDR_SUBDIR_DATA
- and ebx,00FFFFFFh
- add ebx,[ebp-4];ebx=ADDR_SUBDIR_DATA_TO_MAPFILE
- mov edi,[ebx];edi=RVA_DATA
- sub edi,[ebp-8]
- add edi,[ebp-12]
- mov dword ptr [ebp-24],edi ;save
-
- mov edi,[ebx+4];edi=SIZE_DATA
- mov dword ptr [ebp-28],edi ;save
-
- ;----------formatage de la chaine-----
-
-
- ;-------------reinit buf2
- lea edi,buf2
- mov al,20h
- mov cx,100
- rep stosb
- ;----------------
-
- lea edi,buf2
- push edi
-
- push edi
- push [ebp-16]
- call scopy
- mov byte ptr [edi-1],20h
-
- pop edi
- add edi,10
- push edi
- push edi
-
- test dword ptr [ebp-20],0FFFF0000h
- jz idnbr
-
- mov edx,[ebp-20]
- and edx,0000FFFFh
- add edx,[ebp-4]
- push edx
- call UnicodeAnsi
- mov byte ptr [edi],20h
- jmp @addr
- idnbr:
-
- push [ebp-20]
- call BinAsciiDec
- push offset buf
- call scopy
- mov byte ptr [edi-1],20h
- @addr:
- pop edi
- add edi,10
- push edi
- push offset buf
- push [ebp-24]
- call BinAsciiHex
- call scopy
- mov byte ptr [edi-1],20h
- push edi
- push offset buf
- push [ebp-28]
- call BinAsciiHex
- call scopy
- ;--------------écrit la chaine
-
- invoke SendMessage,hlist,LB_ADDSTRING,0,ADDR buf2
- ;------------
- cmp dword ptr [ebp-32],12
- jz @7
- cmp dword ptr [ebp-32],14
- jnz @8
-
- @7:
- mov ebx,[ebp-24];addr data
- add ebx,[ebp+8];eax=addr data to mappfile
- mov cx,[ebx+4];nbr de sous icone
- movzx ecx,cx
- push [ebp-32];type
- push ecx ;nbr de sous icone
- push eax ;index_item
- push ebx ;addr data to mappfile
- call grpmem
- jmp @9
- @8:
- push eax
- invoke HeapAlloc,hHeap,HEAP_ZERO_MEMORY,10
- mov edx,[ebp-32]
- mov ebx,[ebp-20]
- mov word ptr [eax],dx ;type
- mov word ptr [eax+2],1 ;nbr
- mov word ptr [eax+4],bx ;id
- pop ebx
- invoke SendMessage, hlist, LB_SETITEMDATA,ebx,eax
- @9:
-
-
-
-
-
-
-
- pop edx
- pop ecx
- add edx,8
- dec ecx
- test ecx,ecx
- jnz next_subdir_entry
-
-
-
-
- next_type:
- pop eax
- pop ecx
- add eax,8
- dec ecx
- test ecx,ecx
- jnz next_dir_entry
-
-
- ;--------ptr mem pour fichier
- invoke HeapAlloc,hHeap,HEAP_ZERO_MEMORY,0
- mov bloc_data,eax
-
-
- invoke SendMessage,hlist,LB_GETCOUNT,0,0
- dec eax
- jz noitem ;si ya rien on ce casse
-
-
-
-
- invoke SendMessage,hlist,LB_SETCURSEL,1,0
- call SelChange
- push hlist
- call SetFocus
- jmp fitem
- noitem:
- invoke SendMessage,hlist,LB_RESETCONTENT,0,0
- fitem:
-
-
- mov esp,ebp
- pop ebp
- ret 12
- GetRsrc endp
- ;---------------------------MEMORISE STRUCTS GROUPS--------------------------------
- ;arg1 addr data, arg2 index item, arg3 nbr sous icones, arg4 type
- grpmem proc
- push ebp
- mov ebp,esp
- mov eax,[ebp+16]
- mov edx,eax
- shl edx,2
- shl eax,1
- add eax,edx
- add eax,4
- invoke HeapAlloc,hHeap,HEAP_ZERO_MEMORY,eax
- push eax ;ptr_mem
- mov edx,[ebp+20]
- sub edx,11
- mov ecx,[ebp+16]
- mov word ptr [eax],dx
- mov word ptr [eax+2],cx
- mov ebx,[ebp+8]
- add ebx,18
- add eax,4
- nextID:
- mov dx,[ebx]
- mov word ptr [eax],dx
- add ebx,14
- add eax,2
- dec ecx
- test ecx,ecx
- jnz nextID
- pop eax
- invoke SendMessage, hlist, LB_SETITEMDATA,[ebp+12],eax
-
-
- mov esp,ebp
- pop ebp
- ret 16
- grpmem endp
- ;---------MEM FICHIER ET CREE ICONE(S)------
- memdata proc
- push ebp
-
- mov ebp,esp
- sub esp,28
-
- ;-----------reserve mem pour fichier
- invoke HeapReAlloc,hHeap,HEAP_ZERO_MEMORY,bloc_data,100000
- mov bloc_data,eax
- ;---
- mov dword ptr [ebp-28],0
- ;---
-
- mov edx,[ebp+8]
- mov cur_item,edx
- mov bx,[edx]
- movzx ebx,bx
- mov dword ptr [ebp-4],ebx ;type
- mov cx,[edx+2]
- movzx ecx,cx
- ;------------écrit l'entete de 6 octets ds bloc
- ;word res,word type,word nbr
-
- mov word ptr [eax],0
- cmp ebx,3
- jnz @11
- mov word ptr [eax+2],1 ;icone
- @11:
- cmp ebx,1
- jnz @12
- mov word ptr [eax+2],2 ;curseur
- @12:
- mov word ptr [eax+4],cx ;nbr
- ;-------------------------------------
- mov ebx,eax
- add ebx,6
- mov eax,ecx
- shl eax,4
- add eax,6
- mov dword ptr [ebp-20],eax ;taille header ou debut des données
- add edx,4
- mov edi,ecx
- shl edi,1
- add edi,edx
- mov dword ptr [ebp-24],edi ;addr first handle
-
- next_elem:
- push edx
- push ecx
- push ebx
-
- ;--------------chercher la resource--------
- push [ebp-4] ;type rsrc
- mov bx,[edx]
- movzx ebx,bx
- push ebx ;id rsrc
- push hModule
- call FindResource
- mov dword ptr [ebp-8],eax ;hRes
- ;------------charger la resource-----
- push [ebp-8];hRes
- push hModule
- call LoadResource
- mov dword ptr [ebp-12],eax ;hGlobal
- ;-----------optenir la taille de la resource
- push [ebp-8];hRes
- push hModule
- call SizeofResource
- cmp dword ptr [ebp-4],1
- jnz itnscur
- sub eax,4 ;si curseur on reduit la taille de 4
- itnscur:
- mov dword ptr [ebp-16],eax ;dwSize
-
- ;-----------creer un pointeur sur la resource
- push [ebp-12];hGlobal
- call LockResource
-
- cmp dword ptr [ebp-4],1
- jnz iticon
- add eax,4 ;si curseur on avance le pointeur de 4
- iticon:
-
- ;--------écrire dans bloc_data
-
- pop ebx
- push ebx
-
- mov edx,[eax+4]
- mov byte ptr [ebx],dl ;largeur
-
- mov edx,[eax+8]
- shr edx,1
- add dword ptr [ebp-28],edx ;pour scrollbar info
- add dword ptr [ebp-28],20
- mov byte ptr [ebx+1],dl ;hauteur
- mov edx,[eax+32]
- mov byte ptr [ebx+2],dl ;nbr de couleur
- mov byte ptr [ebx+3],0 ;reserve
- mov word ptr [ebx+4],1 ;nbr plan
- mov dx,[eax+14]
- mov word ptr [ebx+6],dx ;nbr octets par pixel
- mov edx,[ebp-16]
-
- mov dword ptr [ebx+8],edx ;nbr d'octets de données associées
-
- mov edx,[ebp-20]
- mov dword ptr [ebx+12],edx ;addresse des données dans le fichier
-
-
- mov edi,bloc_data
- add edi,[ebp-20]
- mov esi,eax
- mov ecx,[ebp-16]
- rep movsb
-
- push 0
- push [eax+4] ;hauteur
- push [eax+4] ;largeur
- push 30000h
- push 1
- push [ebp-16];dwSize
- push eax ;ptr resource
- call CreateIconFromResourceEx
- mov edx,[ebp-24]
- mov dword ptr [edx],eax ;recup hicon dans itemdata
- add dword ptr [ebp-24],4
-
-
- mov eax,[ebp-16]
- add dword ptr [ebp-20],eax ;prochaine addr ou taille fichier en fin de boucle
-
- pop ebx
- pop ecx
- pop edx
- add ebx,16
- add edx,2
- dec ecx
- test ecx,ecx
- jnz next_elem
- ;---------taille fichier
- mov eax,[ebp-20]
- mov filesize,eax
- ;---------nmax scroll info
- mov eax,[ebp-28]
-
-
- mov esp,ebp
- pop ebp
- ret 4
-
- memdata endp
-
-
-
-
-
-
-
-
- ;--------------------------DESSINE
- DrawItem proc
- push ebp
- mov ebp,esp
- sub esp,32
-
-
-
- mov esi,[ebp+12] ;DRAWITEMSTRUCT
-
-
-
- ;----------creation du contexte d'affichage en mémoire
- push [esi+24]
- call CreateCompatibleDC
- mov dword ptr [ebp-4],eax ;hMemDC
- push [esi+40]
- push [esi+36]
- push [esi+24]
- call CreateCompatibleBitmap
- mov dword ptr [ebp-8],eax ;hMemBmp
- push eax
- push [ebp-4]
- call SelectObject
- mov dword ptr [ebp-12],eax ;hOldBmp
-
- ;----------- fond
-
- push COLOR_BTNFACE
- call GetSysColor
- push eax
- call CreateSolidBrush
- push eax ;arg DeleteObject
- lea edi,[esi+28]
- push eax
- push edi
- push [ebp-4]
- call FillRect
- call DeleteObject
-
- push SB_CTL
- push hscrl
- call GetScrollPos
- neg eax
-
- mov dword ptr [ebp-16],eax ;init pos.y
-
- ;--------------init rect text
-
- mov dword ptr [ebp-32],20;left
- mov dword ptr [ebp-24],100;right
-
-
-
-
-
- ;-------dessin de l'icone
- mov edi,cur_item
- mov cx,[edi+2]
- movzx ecx,cx ;nbr
-
-
- mov edx,ecx
- shl edx,1
- add edx,4
- add edi,edx ;addr premier hicon
- mov edx,bloc_data
- add edx,18
-
-
-
- @next_ico:
- push ecx
- push edx
-
-
-
- mov eax,[edx]
- add eax,bloc_data ;info_header
-
-
- push eax
- push esi
- push edi
-
- push eax
-
- push [eax+4]
- call BinAsciiDec
- push offset buf2
- push offset buf
- call scopy
- mov byte ptr [edi-1],'x'
-
- pop eax
- push eax
- push edi
- push offset buf
- push [eax+4]
- call BinAsciiDec
- call scopy
- mov byte ptr [edi-1],','
-
-
-
- pop eax
- mov dx,[eax+14];bitbcount
- cmp dx,4
- jz @16col
- cmp dx,8
- jz @256col
- mov eax,1
- jmp @colcount
- @16col:
- mov eax,16
- jmp @colcount
- @256col:
- mov eax,256
- @colcount:
-
- push edi
- push offset buf
- push eax
- call BinAsciiDec
- call scopy
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- push TRANSPARENT
- push [ebp-4]
- call SetBkMode
-
- ;-----rec text
- mov eax,[ebp-16] ;y
- mov dword ptr [ebp-28],eax ;top
- add eax,20
- mov dword ptr [ebp-20],eax ;bottom
- ;------
-
- lea eax,[ebp-32]
-
- push DT_LEFT or DT_SINGLELINE or DT_VCENTER
- push eax
- push 0FFFFFFFFh
- push offset buf2
- push [ebp-4]
- call DrawText
-
- add dword ptr [ebp-16],20 ;y+=20
-
-
- pop edi
- pop esi
- pop eax
-
-
-
-
-
-
- push DI_NORMAL
- push 0
- push 0
- push [eax+4]
- push [eax+4]
- push [edi];hIcon
- push [ebp-16] ;y
- mov edx,[eax+4]
- add dword ptr [ebp-16],edx ;prochain y
- push 20 ;x
- push [ebp-4]
- call DrawIconEx
-
-
-
- add edi,4
- pop edx
- pop ecx
- add edx,16
- dec ecx
- test ecx,ecx
-
- jnz @next_ico
-
- ;-------------recopie le contexte à l'écran
-
- push SRCCOPY
- push 0
- push 0
- push [ebp-4]
- push [esi+40]
- push [esi+36]
- push 0
- push 0
- push [esi+24]
- call BitBlt
-
-
-
- ;-----------liberation des resources
- push [ebp-12]
- push [ebp-4]
- call SelectObject
-
- push [ebp-4]
- call DeleteDC
- push [ebp-8]
- call DeleteObject
-
-
- mov esp,ebp
- pop ebp
- ret 8
-
- DrawItem endp
- ;-----------------EXTRACTION-------------------------
- Extract proc
- push ebp
- mov ebp,esp
- sub esp,4
-
- mov al,0
- mov ecx,200
- lea edi,buffer
- rep stosb
-
- mov ebx,bloc_data
-
- cmp word ptr [ebx+2],1
- jnz itscurs
-
- lea eax,FilterStrIco
- lea edi,[FilterStrIco+22]
- jmp filterstr
- itscurs:
- lea eax,FilterStrCurs
- lea edi,[FilterStrCurs+25]
- filterstr:
- mov dword ptr [OPFN+60],edi
- mov [OPFN+12],eax
- mov eax,OFN_PATHMUSTEXIST
- or eax,OFN_OVERWRITEPROMPT
- or eax,OFN_HIDEREADONLY
- or eax,OFN_LONGNAMES
- mov [OPFN+52],eax
- mov [OPFN+44],0
-
- push offset OPFN
- call GetSaveFileName
-
-
-
- ;-------------------------creer fichier
- push 0
- push FILE_ATTRIBUTE_NORMAL
- push CREATE_ALWAYS
- push 0
- push 0
- push GENERIC_WRITE
- push offset buffer
- call CreateFile
- push eax
-
- ;--------------------------------écrit le fichier
- lea edx,[ebp-4]
- push 0
- push edx
- push filesize ;nbr d'octets à écrire
- push bloc_data ;off data à écrire
- push eax ;handle du fichier
- call WriteFile
- ;-------------------------------fermer le fichier
- pop eax
- push eax
- call CloseHandle
-
-
- mov esp,ebp
- pop ebp
- ret
- Extract endp
-
-
-
- ;-----------------------------DWORD EN CHAINE ASCII DEC----------------------------------------
- BinAsciiDec proc
- push ebp
- mov ebp,esp
-
- mov eax,[ebp+8]
- sub esp,20 ;creer une zone temporaire de 20 bytes
-
- mov esi,ebp
- dec esi
- mov byte ptr [esi],0
- mov ecx,1
- mov ebx,10 ;10 pour la division
- divis: mov edx,0 ;eax=quotient précédent
- div ebx ;diviser par 10
- add dl,'0' ;convertir reste en ASCII
- dec esi ;on écrit de droite à guauche
- mov [esi],dl ;stocker dans zone temporaire
- inc ecx
- test eax,eax
- jne divis ;tant que reste diff zéro
- lea edi,buf
- rep movsb ;ds:si->es:di
-
- mov esp,ebp ;suppression zone temporaire
- pop ebp
- ret 4 ;depile l'argument dword (4 bytes)
-
- BinAsciiDec endp
- ;-----------------------------DWORD EN CHAINE ASCII HEX---------------------------------
- ;arg1 DWORD:valeur
- BinAsciiHex proc
- push ebp
- mov ebp,esp
- lea edi,buf
- lea esi,FORMHEX
- mov eax,[ebp+8]
- ror eax,24
- mov ecx,4
- xor ebx,ebx
- xor edx,edx
- NEXTB:
-
- mov dl,al
- mov bl,dl
- shr dl,4 ;dl=4 bits poid fort
- and bl,00001111b ;bl=4 bits poid faible
- push esi
- push esi
-
- add esi,edx
- mov dl,[esi]
- mov byte ptr [edi],dl
- inc edi
- pop esi
- add esi,ebx
- mov bl,[esi]
- pop esi
- mov byte ptr [edi],bl
- rol eax,8
- inc edi
- loop NEXTB
- mov esp,ebp
-
- pop ebp
-
- ret 4 ;depile les arguments 4 bytes
-
- BinAsciiHex endp
- ;---------------------------CONVERTI UNICODE EN ANSI-------------------------------
- ;arg1 src,arg2 dest
- UnicodeAnsi proc
- push ebp
- mov ebp,esp
-
- mov esi,[ebp+8]
- mov edi,[ebp+12]
- mov cl,[esi]
- inc esi
- nuni:
- inc esi
- movsb
- dec cl
- test cl,cl
- jnz nuni
- mov byte ptr [edi],0
-
- mov esp,ebp
- pop ebp
- ret 8
- UnicodeAnsi endp
- ;---------------------------COPIE UNE CHAINE A UNE ADDRESSE------------------------
- ;arg1 src,arg2 dest
- scopy proc
- push ebp
- mov ebp,esp
- mov esi,[ebp+8]
- mov edi,[ebp+12]
- @cpy:lodsb
- stosb
- test al,al
- jnz @cpy
- pop ebp
- ret 8
- scopy endp
-
-
-
- end PROGRAMME
-
- ;DLGTEMPLATE STRUCT DWORD
- ; style DWORD ?
- ; dwExtendedStyle DWORD ?
- ; cdit WORD ?;
- ; x WORD ?
- ; y WORD ?
- ; lx WORD ?
- ; ly WORD ?
- ;DLGTEMPLATE ENDS
-
-
- ;DRAWITEMSTRUCT STRUCT
- ; CtlType DWORD ?
- ; CtlID DWORD ?
- ; itemID DWORD ?
- ; itemAction DWORD ?
- ; itemState DWORD ?
- ; hwndItem DWORD ?
- ; hdc DWORD ?
- ; rcItem RECT <>
- ; itemData DWORD ?
- ;DRAWITEMSTRUCT ENDS
- ;SCROLLINFO STRUCT
- ; cbSize DWORD ?
- ; fMask DWORD ?
- ; nMin DWORD ?
- ; nMax DWORD ?
- ; nPage DWORD ?
- ; nPos DWORD ?
- ; nTrackPos DWORD ?
- ;SCROLLINFO ENDS
-
;à chaque item du liste box est associé
;un pointeur sur une structure à taille variable
;selon le nombre d'icone que contient l'icone,
;cette structure est présentée:
;struct_data_item
;WORD TYPE
;WORD NBR_ICON
;WORD ID1,ID2...
;...selon NBR_ICON
.386
.model flat,stdcall
option casemap:none
include c:\masm32\include\windows.inc
include c:\masm32\include\user32.inc
include c:\masm32\include\kernel32.inc
include c:\masm32\include\gdi32.inc
include c:\masm32\include\comdlg32.inc
includelib c:\masm32\lib\user32.lib
includelib c:\masm32\lib\kernel32.lib
includelib c:\masm32\lib\gdi32.lib
includelib c:\masm32\lib\comdlg32.lib
.data
szdisplayname db 'EXTACTICON',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
FORMHEX db '0123456789ABCDEF'
FilterStExe db "Executable Files (*.dll;*.exe)",0,"*.dll;*.exe",0
db "All Files",0,"*.*",0,0
FilterStrIco db "fichier icone (*.ico)",0,"*.ico",0,0
;db "All Files",0,"*.*",0,0
FilterStrCurs db "fichier curseur (*.cur)",0,"*.cur",0
;db "All Files",0,"*.*",0,0
buffer db 200 dup (0)
lpfile db 50 dup (0)
initDir db 100 dup (0)
OPFN dd 76,0,0,0,0,0,0,offset buffer,512
dd offset lpfile,50,0,0,0,0,0,0,0
str_raw db 'TYPE ID OFFSET SIZE',0
str_grpicon db 'ICONES',0
str_icon db 'ICONE',0
str_cursor db 'CURSOR',0
str_grpcursor db 'CURSORS ',0
msg1 db 'PE NON VALIDE !',0
m_item1 db 'ouvrir executable',0
m_item2 db 'extraire ico,cur',0
m_item3 db 'copier item',0
h_mpopup dd 0
buf db 100 dup(0)
buf2 db 100 dup(20h)
cl_list db 'LISTBOX',0
cl_btn db 'BUTTON',0
cl_scrl db 'SCROLLBAR',0
hbtn dd 0
hlist dd 0
hscrl dd 0
hinst dd 0
hModule dd 0
hIcon dd 0
hHeap dd 0
bloc_scrl dd 0
bloc_data dd 0
filesize dd 0
cur_item dd 0
Extico db '.ico'
.code
PROGRAMME:
;-----------------------WINMAIN-----------------------------
push 512
push GPTR
call GlobalAlloc
push eax ;arg GlobalFree
mov dword ptr [ebp-4],eax
mov edx,DS_CENTER
or edx,WS_POPUP
or edx,WS_SYSMENU
;or edx,DS_MODALFRAME
or edx,WS_CAPTION
mov dword ptr [eax],edx
mov word ptr [eax+10],0
mov word ptr [eax+12],0
mov word ptr [eax+14],290
mov word ptr [eax+16],100
push 0
call GetModuleHandle
mov hinst,eax
call GetProcessHeap
mov hHeap,eax
push 0
push offset DialogProc
push 0
push [ebp-4]
push hinst
call DialogBoxIndirectParam
call GlobalFree
push 0
call ExitProcess
;---------------------------------DIALOGPROC---------------------------
DialogProc proc
push ebp
mov ebp,esp
cmp dword ptr [ebp+12],WM_INITDIALOG
jnz @wmclose
push offset szdisplayname
push [ebp+8]
call SetWindowText
push 501
push hinst
call LoadIcon
push eax
push ICON_SMALL
push WM_SETICON
push [ebp+8]
call SendMessage
call CreateMenu
push eax
push offset m_item1
push 1 ;ID
push 0
push eax
call AppendMenu
pop eax
push eax
push [ebp+8]
call SetMenu
call CreatePopupMenu
mov h_mpopup,eax
push offset m_item2
push 2 ;ID
push 0
push eax
call AppendMenu
push offset m_item3
push 3 ;ID
push 0
push h_mpopup
call AppendMenu
push 0
push hinst
push 500 ;ID
push [ebp+8]
push 170
push 320
push 0
push 5
push LBS_DISABLENOSCROLL or LBS_NOINTEGRALHEIGHT \
or LBS_HASSTRINGS or LBS_NOTIFY or WS_CHILD or \
WS_VISIBLE or WS_VSCROLL
push 0
push offset cl_list
push WS_EX_CLIENTEDGE
call CreateWindowEx
mov hlist,eax
;---choisis police
push 11
call GetStockObject
push 0
push eax
push 30h
push hlist
call SendMessage
push 0
push hinst
push 500 ;ID
push [ebp+8]
push 170
push 200
push 0
push 350
push WS_CHILD or WS_VISIBLE or BS_OWNERDRAW
push 0
push offset cl_btn
push 0;WS_EX_CLIENTEDGE
call CreateWindowEx
mov hbtn,eax
push 0
push hinst
push 200 ;ID
push [ebp+8]
push 170
push 15
push 0
push 560
push WS_CHILD or WS_VISIBLE or SBS_VERT
push 0
push offset cl_scrl
push 0
call CreateWindowEx
mov hscrl,eax
invoke HeapAlloc,hHeap,HEAP_ZERO_MEMORY,28
mov bloc_scrl,eax
mov dword ptr [eax],28 ;sizeofstruct
mov dword ptr [eax+4],SIF_DISABLENOSCROLL or SIF_ALL
mov dword ptr [eax+16],170
@wmclose:
cmp dword ptr [ebp+12],WM_CLOSE
jnz @wmcontextm
xor eax,eax
push 0
push [ebp+8]
call EndDialog
mov esp,ebp
pop ebp
ret
@wmcontextm:
cmp dword ptr [ebp+12],WM_CONTEXTMENU
jnz @wmcommand
invoke SendMessage,hlist, LB_GETCURSEL,0,0
cmp eax,0FFFFFFFFh
jz @wmcommand
mov ax,[ebp+20];yposcur
movzx eax,ax
mov bx,[ebp+22];xposcur
movzx ebx,bx
push 0
push [ebp+8]
push 0
push ebx
push eax
push 0
push h_mpopup
call TrackPopupMenu
@wmcommand:
cmp dword ptr [ebp+12],WM_COMMAND
jnz @wmdrawitem
cmp word ptr[ebp+16],1
jnz @cmd1
push [ebp+8]
call MappFile
@cmd1:
cmp word ptr[ebp+16],2
jnz @cmd2
call Extract
@cmd2:
cmp word ptr[ebp+16],3
jnz @cmd3
call cpytoclipboard
@cmd3:
;cmp word ptr[ebp+16],500
;jnz @wmdrawitem
cmp word ptr[ebp+18],LBN_SELCHANGE
jnz @wmdrawitem
call SelChange
jmp @endprocd
@wmdrawitem:
cmp dword ptr [ebp+12],WM_DRAWITEM
jnz @wmvscroll
mov eax,[ebp+20]
cmp dword ptr [eax+4],500
jnz @wmvscroll
invoke SendMessage,hlist,LB_GETCOUNT,0,0
test eax,eax
jz @wmvscroll
push [ebp+20]
push [ebp+16]
call DrawItem
@wmvscroll:
cmp dword ptr [ebp+12],WM_VSCROLL
jnz @endprocd
push [ebp+16]
call OnVScroll
@endprocd:
xor eax,eax
mov esp,ebp
pop ebp
ret 16
DialogProc endp
OnVScroll proc
push ebp
mov ebp,esp
sub esp,32
mov dword ptr[ebp-32],28
mov dword ptr[ebp-28],SIF_ALL
lea esi,[ebp-32]
push esi
push SB_CTL
push hscrl
call GetScrollInfo
mov edx,[ebp-12] ;y
mov eax,[ebp+8]
cmp ax,SB_LINEDOWN
push ax
jnz @sblup
inc edx
@sblup:
pop ax
cmp ax,SB_LINEUP
push ax
jnz @sbpageup
dec edx
@sbpageup:
pop ax
cmp ax,SB_PAGEUP
push ax
jnz @sbpagedown
sub edx,[ebp-16]
@sbpagedown:
pop ax
cmp ax,SB_PAGEDOWN
push ax
jnz @sbthumposition
add edx,[ebp-16]
@sbthumposition:
pop ax
cmp ax,SB_THUMBPOSITION
push ax
jnz @sbthumbtrack
mov edx,[ebp-12]
@sbthumbtrack:
pop ax
cmp ax,SB_THUMBTRACK
jnz @endswitch
mov edx,[ebp-8]
@endswitch:
push 1
push edx
push SB_CTL
push hscrl
call SetScrollPos
push FALSE
push 0
push hbtn
call InvalidateRect
push hbtn
call UpdateWindow
mov esp,ebp
pop ebp
ret 4
OnVScroll endp
;----------------CLIP BOARD-------------
cpytoclipboard proc
push ebp
mov ebp,esp
sub esp,4 ;reserve 4 octet pour handle MEM
invoke SendMessage,hlist, LB_GETCURSEL,0,0
test eax,eax
js @noselectitem
invoke SendMessage,hlist, LB_GETTEXT,eax,ADDR buf
push hlist
call OpenClipboard
call EmptyClipboard
push 200
push GMEM_ZEROINIT or GMEM_MOVEABLE or GMEM_SHARE
call GlobalAlloc ;cree l'espace MEMOIRE
mov [ebp-4],eax ;retourne un handle
push eax
call GlobalLock ;donne ptr sur MEMOIRE
mov edi,eax
lea esi,buf
push esi
@c: lodsb
stosb
test al,al
jnz @c
mov al,0
mov ecx,100
pop edi
rep stosb
push [ebp-4]
call GlobalUnlock
push [ebp-4]
push 1 ;type texte
call SetClipboardData
call CloseClipboard
push [ebp-4]
call GlobalFree
@noselectitem:
mov esp,ebp
pop ebp
ret
cpytoclipboard endp
;-------------------------------------
;------------------CHANGEMENT DE SELECTION LSTBOX----
SelChange proc
push ebp
mov ebp,esp
;------------on recupere ptr associé à l'item
invoke SendMessage,hlist, LB_GETCURSEL,0,0
test eax,eax
jnz @memdata
invoke SendMessage,hlist, LB_SETCURSEL,1,0
@memdata:
invoke SendMessage,hlist,LB_GETITEMDATA,eax,0
push eax ;ptr item_data
call memdata
mov ebx,bloc_scrl
;----------mask scroll info
mov edx,SIF_ALL
or edx,SIF_DISABLENOSCROLL
mov dword ptr [ebx+4],edx
;---------min scroll info
mov dword ptr [ebx+8],0
mov [ebx+12],eax
;-------- pos scroll info
mov dword ptr [bloc_scrl+20],0
push 1
push bloc_scrl
push SB_CTL
push hscrl
call SetScrollInfo
push 0
push 0
push hbtn
call InvalidateRect
mov esp,ebp
pop ebp
ret
SelChange endp
;--------------OUVERTURE ET MAPPAGE DU FICHIER----------------------
MappFile proc
push ebp
mov ebp,esp
sub esp,16
lea eax,FilterStExe
mov [OPFN+12],eax
mov eax,OFN_PATHMUSTEXIST
or eax,OFN_FILEMUSTEXIST
or eax,OFN_HIDEREADONLY
or eax,OFN_LONGNAMES
mov [OPFN+52],eax
mov [OPFN+44],0
push 100
push offset initDir
call GetSystemDirectory
push offset OPFN
call GetOpenFileName
and eax,eax
jnz mapping
mov esp,ebp
pop ebp
ret
mapping:
push 0
push OPEN_EXISTING
push 0
push FILE_SHARE_READ
push GENERIC_READ
push offset buffer
call CreateFile
mov dword ptr [ebp-12],eax
push 0
push 0
push 0
push PAGE_READONLY
push 0
push eax
call CreateFileMapping
mov dword ptr [ebp-8],eax
push 0
push 0
push 0
push FILE_MAP_READ
push eax
call MapViewOfFile
mov dword ptr [ebp-4],eax
cmp word ptr [eax],'ZM'
jnz exitMappFile
add eax,[eax+60]
cmp dword ptr [eax],4550h
jnz noValidPE
push eax
lea edi,[szdisplayname+10]
mov byte ptr [edi],'-'
inc edi
push edi
push offset lpfile
call scopy
push offset szdisplayname
push [ebp+8]
call SetWindowText
pop eax
push [ebp+8]
push eax
push [ebp-4];ptr_mapp
call GetRsrc
jmp exitMappFile
noValidPE:
push 0
push offset msg1
push offset msg1
push 0
call MessageBox
exitMappFile:
push [ebp-4]
call UnmapViewOfFile
push [ebp-8]
call CloseHandle
push [ebp-12]
call CloseHandle
mov esp,ebp
pop ebp
ret 4
MappFile endp
;--------------LIBERE MEM-----
freedata proc
mov eax,hModule
test eax,eax
jnz free
ret
free:
push hModule
call FreeLibrary
push bloc_data
push 0
push hHeap
call HeapFree
invoke SendMessage,hlist,LB_GETCOUNT,0,0
test eax,eax
jnz freeitem
ret
freeitem:
;dec eax
mov ecx,eax
freenext:
push ecx
invoke SendMessage,hlist,LB_GETITEMDATA,ecx,0
push eax
push 0
push hHeap
call HeapFree
pop ecx
dec ecx
test ecx,ecx
jnz freenext
ret
freedata endp
;-----------------------------
;-------------LIT SECTION RSRC ET STOCKE LES DONNEES --------------
;arg1 ptr mappfile, arg2 addr PE
GetRsrc proc
push ebp
mov ebp,esp
sub esp,32
call freedata
push 0
push 0
push LB_RESETCONTENT
push hlist
call SendMessage
push 1
push 0
push hbtn
call InvalidateRect
mov eax,[ebp+12]
add eax,248 ;eax=OFF_SECTION_HEADER
;------------------ recherche section de resource dans le header
mov ecx,5
findsection:
cmp dword ptr[eax],'rsr.'
jz itssection
add eax,40
dec ecx
test ecx,ecx
jnz findsection
mov esp,ebp
pop ebp
ret 12
itssection:
mov edx,[eax+12] ;edx=RVA SECTION
mov dword ptr [ebp-8],edx
mov eax,[eax+20] ;eax=off_file rsrc
mov dword ptr [ebp-12],eax ;RAW SECTION
add eax,[ebp+8] ;eax=pmap_off_file rsrc
mov dword ptr [ebp-4],eax ;sauvegarde
;-------------------
push eax
push LOAD_LIBRARY_AS_DATAFILE
push 0
push offset buffer
call LoadLibraryEx
mov hModule,eax
invoke SendMessage,hlist,LB_ADDSTRING,0,ADDR str_raw
pop eax
mov cx,[eax+12]
mov dx,[eax+14]
add cx,dx
movzx ecx,cx ;ecx = NBR_DIR_ENTRY
add eax,16 ;eax = RSRC_DIR_ENTRY
next_dir_entry:
push ecx
push eax
mov edx,[eax]
mov dword ptr [ebp-32],edx
test edx,0FFFFFF00h
jnz next_type ;si le type est un string passe au suivant
cmp edx,1 ;curseur ?
jnz @1
mov dword ptr [ebp-16],offset str_cursor
jmp @4
@1:
cmp edx,3 ;icone ?
jnz @2
mov dword ptr [ebp-16],offset str_icon
jmp @4
@2:
cmp edx,12 ;grp_cursor ?
jnz @3
mov dword ptr [ebp-16],offset str_grpcursor
jmp @4
@3:
cmp edx,14 ;grp_icon ?
jnz next_type ;si le type pas icone pas curseur pas groupe icone pas grp cur suivant
mov dword ptr [ebp-16],offset str_grpicon
@4:
mov edx,[eax+4]
and edx,00FFFFFFh
add edx,[ebp-4] ;edx= ADDR SUB_DIR_TO_MAPFILE
mov cx,[edx+12]
add cx,[edx+14];cx= NBR_SUBDIR_ENTRY
add edx,16 ;edx=START_SUBDIRS
movzx ecx,cx
next_subdir_entry:
push ecx
push edx
mov ebx,[edx]
mov dword ptr [ebp-20],ebx ;ebx= ID_RSRC
mov ebx,[edx+4];ebx=ADDR_DIR_DATA
and ebx,00FFFFFFh
add ebx,[ebp-4];ebx=ADDR_DIR_DATA_TO_MAPFILE
mov ebx,[ebx+20];ebx=ADDR_SUBDIR_DATA
and ebx,00FFFFFFh
add ebx,[ebp-4];ebx=ADDR_SUBDIR_DATA_TO_MAPFILE
mov edi,[ebx];edi=RVA_DATA
sub edi,[ebp-8]
add edi,[ebp-12]
mov dword ptr [ebp-24],edi ;save
mov edi,[ebx+4];edi=SIZE_DATA
mov dword ptr [ebp-28],edi ;save
;----------formatage de la chaine-----
;-------------reinit buf2
lea edi,buf2
mov al,20h
mov cx,100
rep stosb
;----------------
lea edi,buf2
push edi
push edi
push [ebp-16]
call scopy
mov byte ptr [edi-1],20h
pop edi
add edi,10
push edi
push edi
test dword ptr [ebp-20],0FFFF0000h
jz idnbr
mov edx,[ebp-20]
and edx,0000FFFFh
add edx,[ebp-4]
push edx
call UnicodeAnsi
mov byte ptr [edi],20h
jmp @addr
idnbr:
push [ebp-20]
call BinAsciiDec
push offset buf
call scopy
mov byte ptr [edi-1],20h
@addr:
pop edi
add edi,10
push edi
push offset buf
push [ebp-24]
call BinAsciiHex
call scopy
mov byte ptr [edi-1],20h
push edi
push offset buf
push [ebp-28]
call BinAsciiHex
call scopy
;--------------écrit la chaine
invoke SendMessage,hlist,LB_ADDSTRING,0,ADDR buf2
;------------
cmp dword ptr [ebp-32],12
jz @7
cmp dword ptr [ebp-32],14
jnz @8
@7:
mov ebx,[ebp-24];addr data
add ebx,[ebp+8];eax=addr data to mappfile
mov cx,[ebx+4];nbr de sous icone
movzx ecx,cx
push [ebp-32];type
push ecx ;nbr de sous icone
push eax ;index_item
push ebx ;addr data to mappfile
call grpmem
jmp @9
@8:
push eax
invoke HeapAlloc,hHeap,HEAP_ZERO_MEMORY,10
mov edx,[ebp-32]
mov ebx,[ebp-20]
mov word ptr [eax],dx ;type
mov word ptr [eax+2],1 ;nbr
mov word ptr [eax+4],bx ;id
pop ebx
invoke SendMessage, hlist, LB_SETITEMDATA,ebx,eax
@9:
pop edx
pop ecx
add edx,8
dec ecx
test ecx,ecx
jnz next_subdir_entry
next_type:
pop eax
pop ecx
add eax,8
dec ecx
test ecx,ecx
jnz next_dir_entry
;--------ptr mem pour fichier
invoke HeapAlloc,hHeap,HEAP_ZERO_MEMORY,0
mov bloc_data,eax
invoke SendMessage,hlist,LB_GETCOUNT,0,0
dec eax
jz noitem ;si ya rien on ce casse
invoke SendMessage,hlist,LB_SETCURSEL,1,0
call SelChange
push hlist
call SetFocus
jmp fitem
noitem:
invoke SendMessage,hlist,LB_RESETCONTENT,0,0
fitem:
mov esp,ebp
pop ebp
ret 12
GetRsrc endp
;---------------------------MEMORISE STRUCTS GROUPS--------------------------------
;arg1 addr data, arg2 index item, arg3 nbr sous icones, arg4 type
grpmem proc
push ebp
mov ebp,esp
mov eax,[ebp+16]
mov edx,eax
shl edx,2
shl eax,1
add eax,edx
add eax,4
invoke HeapAlloc,hHeap,HEAP_ZERO_MEMORY,eax
push eax ;ptr_mem
mov edx,[ebp+20]
sub edx,11
mov ecx,[ebp+16]
mov word ptr [eax],dx
mov word ptr [eax+2],cx
mov ebx,[ebp+8]
add ebx,18
add eax,4
nextID:
mov dx,[ebx]
mov word ptr [eax],dx
add ebx,14
add eax,2
dec ecx
test ecx,ecx
jnz nextID
pop eax
invoke SendMessage, hlist, LB_SETITEMDATA,[ebp+12],eax
mov esp,ebp
pop ebp
ret 16
grpmem endp
;---------MEM FICHIER ET CREE ICONE(S)------
memdata proc
push ebp
mov ebp,esp
sub esp,28
;-----------reserve mem pour fichier
invoke HeapReAlloc,hHeap,HEAP_ZERO_MEMORY,bloc_data,100000
mov bloc_data,eax
;---
mov dword ptr [ebp-28],0
;---
mov edx,[ebp+8]
mov cur_item,edx
mov bx,[edx]
movzx ebx,bx
mov dword ptr [ebp-4],ebx ;type
mov cx,[edx+2]
movzx ecx,cx
;------------écrit l'entete de 6 octets ds bloc
;word res,word type,word nbr
mov word ptr [eax],0
cmp ebx,3
jnz @11
mov word ptr [eax+2],1 ;icone
@11:
cmp ebx,1
jnz @12
mov word ptr [eax+2],2 ;curseur
@12:
mov word ptr [eax+4],cx ;nbr
;-------------------------------------
mov ebx,eax
add ebx,6
mov eax,ecx
shl eax,4
add eax,6
mov dword ptr [ebp-20],eax ;taille header ou debut des données
add edx,4
mov edi,ecx
shl edi,1
add edi,edx
mov dword ptr [ebp-24],edi ;addr first handle
next_elem:
push edx
push ecx
push ebx
;--------------chercher la resource--------
push [ebp-4] ;type rsrc
mov bx,[edx]
movzx ebx,bx
push ebx ;id rsrc
push hModule
call FindResource
mov dword ptr [ebp-8],eax ;hRes
;------------charger la resource-----
push [ebp-8];hRes
push hModule
call LoadResource
mov dword ptr [ebp-12],eax ;hGlobal
;-----------optenir la taille de la resource
push [ebp-8];hRes
push hModule
call SizeofResource
cmp dword ptr [ebp-4],1
jnz itnscur
sub eax,4 ;si curseur on reduit la taille de 4
itnscur:
mov dword ptr [ebp-16],eax ;dwSize
;-----------creer un pointeur sur la resource
push [ebp-12];hGlobal
call LockResource
cmp dword ptr [ebp-4],1
jnz iticon
add eax,4 ;si curseur on avance le pointeur de 4
iticon:
;--------écrire dans bloc_data
pop ebx
push ebx
mov edx,[eax+4]
mov byte ptr [ebx],dl ;largeur
mov edx,[eax+8]
shr edx,1
add dword ptr [ebp-28],edx ;pour scrollbar info
add dword ptr [ebp-28],20
mov byte ptr [ebx+1],dl ;hauteur
mov edx,[eax+32]
mov byte ptr [ebx+2],dl ;nbr de couleur
mov byte ptr [ebx+3],0 ;reserve
mov word ptr [ebx+4],1 ;nbr plan
mov dx,[eax+14]
mov word ptr [ebx+6],dx ;nbr octets par pixel
mov edx,[ebp-16]
mov dword ptr [ebx+8],edx ;nbr d'octets de données associées
mov edx,[ebp-20]
mov dword ptr [ebx+12],edx ;addresse des données dans le fichier
mov edi,bloc_data
add edi,[ebp-20]
mov esi,eax
mov ecx,[ebp-16]
rep movsb
push 0
push [eax+4] ;hauteur
push [eax+4] ;largeur
push 30000h
push 1
push [ebp-16];dwSize
push eax ;ptr resource
call CreateIconFromResourceEx
mov edx,[ebp-24]
mov dword ptr [edx],eax ;recup hicon dans itemdata
add dword ptr [ebp-24],4
mov eax,[ebp-16]
add dword ptr [ebp-20],eax ;prochaine addr ou taille fichier en fin de boucle
pop ebx
pop ecx
pop edx
add ebx,16
add edx,2
dec ecx
test ecx,ecx
jnz next_elem
;---------taille fichier
mov eax,[ebp-20]
mov filesize,eax
;---------nmax scroll info
mov eax,[ebp-28]
mov esp,ebp
pop ebp
ret 4
memdata endp
;--------------------------DESSINE
DrawItem proc
push ebp
mov ebp,esp
sub esp,32
mov esi,[ebp+12] ;DRAWITEMSTRUCT
;----------creation du contexte d'affichage en mémoire
push [esi+24]
call CreateCompatibleDC
mov dword ptr [ebp-4],eax ;hMemDC
push [esi+40]
push [esi+36]
push [esi+24]
call CreateCompatibleBitmap
mov dword ptr [ebp-8],eax ;hMemBmp
push eax
push [ebp-4]
call SelectObject
mov dword ptr [ebp-12],eax ;hOldBmp
;----------- fond
push COLOR_BTNFACE
call GetSysColor
push eax
call CreateSolidBrush
push eax ;arg DeleteObject
lea edi,[esi+28]
push eax
push edi
push [ebp-4]
call FillRect
call DeleteObject
push SB_CTL
push hscrl
call GetScrollPos
neg eax
mov dword ptr [ebp-16],eax ;init pos.y
;--------------init rect text
mov dword ptr [ebp-32],20;left
mov dword ptr [ebp-24],100;right
;-------dessin de l'icone
mov edi,cur_item
mov cx,[edi+2]
movzx ecx,cx ;nbr
mov edx,ecx
shl edx,1
add edx,4
add edi,edx ;addr premier hicon
mov edx,bloc_data
add edx,18
@next_ico:
push ecx
push edx
mov eax,[edx]
add eax,bloc_data ;info_header
push eax
push esi
push edi
push eax
push [eax+4]
call BinAsciiDec
push offset buf2
push offset buf
call scopy
mov byte ptr [edi-1],'x'
pop eax
push eax
push edi
push offset buf
push [eax+4]
call BinAsciiDec
call scopy
mov byte ptr [edi-1],','
pop eax
mov dx,[eax+14];bitbcount
cmp dx,4
jz @16col
cmp dx,8
jz @256col
mov eax,1
jmp @colcount
@16col:
mov eax,16
jmp @colcount
@256col:
mov eax,256
@colcount:
push edi
push offset buf
push eax
call BinAsciiDec
call scopy
push TRANSPARENT
push [ebp-4]
call SetBkMode
;-----rec text
mov eax,[ebp-16] ;y
mov dword ptr [ebp-28],eax ;top
add eax,20
mov dword ptr [ebp-20],eax ;bottom
;------
lea eax,[ebp-32]
push DT_LEFT or DT_SINGLELINE or DT_VCENTER
push eax
push 0FFFFFFFFh
push offset buf2
push [ebp-4]
call DrawText
add dword ptr [ebp-16],20 ;y+=20
pop edi
pop esi
pop eax
push DI_NORMAL
push 0
push 0
push [eax+4]
push [eax+4]
push [edi];hIcon
push [ebp-16] ;y
mov edx,[eax+4]
add dword ptr [ebp-16],edx ;prochain y
push 20 ;x
push [ebp-4]
call DrawIconEx
add edi,4
pop edx
pop ecx
add edx,16
dec ecx
test ecx,ecx
jnz @next_ico
;-------------recopie le contexte à l'écran
push SRCCOPY
push 0
push 0
push [ebp-4]
push [esi+40]
push [esi+36]
push 0
push 0
push [esi+24]
call BitBlt
;-----------liberation des resources
push [ebp-12]
push [ebp-4]
call SelectObject
push [ebp-4]
call DeleteDC
push [ebp-8]
call DeleteObject
mov esp,ebp
pop ebp
ret 8
DrawItem endp
;-----------------EXTRACTION-------------------------
Extract proc
push ebp
mov ebp,esp
sub esp,4
mov al,0
mov ecx,200
lea edi,buffer
rep stosb
mov ebx,bloc_data
cmp word ptr [ebx+2],1
jnz itscurs
lea eax,FilterStrIco
lea edi,[FilterStrIco+22]
jmp filterstr
itscurs:
lea eax,FilterStrCurs
lea edi,[FilterStrCurs+25]
filterstr:
mov dword ptr [OPFN+60],edi
mov [OPFN+12],eax
mov eax,OFN_PATHMUSTEXIST
or eax,OFN_OVERWRITEPROMPT
or eax,OFN_HIDEREADONLY
or eax,OFN_LONGNAMES
mov [OPFN+52],eax
mov [OPFN+44],0
push offset OPFN
call GetSaveFileName
;-------------------------creer fichier
push 0
push FILE_ATTRIBUTE_NORMAL
push CREATE_ALWAYS
push 0
push 0
push GENERIC_WRITE
push offset buffer
call CreateFile
push eax
;--------------------------------écrit le fichier
lea edx,[ebp-4]
push 0
push edx
push filesize ;nbr d'octets à écrire
push bloc_data ;off data à écrire
push eax ;handle du fichier
call WriteFile
;-------------------------------fermer le fichier
pop eax
push eax
call CloseHandle
mov esp,ebp
pop ebp
ret
Extract endp
;-----------------------------DWORD EN CHAINE ASCII DEC----------------------------------------
BinAsciiDec proc
push ebp
mov ebp,esp
mov eax,[ebp+8]
sub esp,20 ;creer une zone temporaire de 20 bytes
mov esi,ebp
dec esi
mov byte ptr [esi],0
mov ecx,1
mov ebx,10 ;10 pour la division
divis: mov edx,0 ;eax=quotient précédent
div ebx ;diviser par 10
add dl,'0' ;convertir reste en ASCII
dec esi ;on écrit de droite à guauche
mov [esi],dl ;stocker dans zone temporaire
inc ecx
test eax,eax
jne divis ;tant que reste diff zéro
lea edi,buf
rep movsb ;ds:si->es:di
mov esp,ebp ;suppression zone temporaire
pop ebp
ret 4 ;depile l'argument dword (4 bytes)
BinAsciiDec endp
;-----------------------------DWORD EN CHAINE ASCII HEX---------------------------------
;arg1 DWORD:valeur
BinAsciiHex proc
push ebp
mov ebp,esp
lea edi,buf
lea esi,FORMHEX
mov eax,[ebp+8]
ror eax,24
mov ecx,4
xor ebx,ebx
xor edx,edx
NEXTB:
mov dl,al
mov bl,dl
shr dl,4 ;dl=4 bits poid fort
and bl,00001111b ;bl=4 bits poid faible
push esi
push esi
add esi,edx
mov dl,[esi]
mov byte ptr [edi],dl
inc edi
pop esi
add esi,ebx
mov bl,[esi]
pop esi
mov byte ptr [edi],bl
rol eax,8
inc edi
loop NEXTB
mov esp,ebp
pop ebp
ret 4 ;depile les arguments 4 bytes
BinAsciiHex endp
;---------------------------CONVERTI UNICODE EN ANSI-------------------------------
;arg1 src,arg2 dest
UnicodeAnsi proc
push ebp
mov ebp,esp
mov esi,[ebp+8]
mov edi,[ebp+12]
mov cl,[esi]
inc esi
nuni:
inc esi
movsb
dec cl
test cl,cl
jnz nuni
mov byte ptr [edi],0
mov esp,ebp
pop ebp
ret 8
UnicodeAnsi endp
;---------------------------COPIE UNE CHAINE A UNE ADDRESSE------------------------
;arg1 src,arg2 dest
scopy proc
push ebp
mov ebp,esp
mov esi,[ebp+8]
mov edi,[ebp+12]
@cpy:lodsb
stosb
test al,al
jnz @cpy
pop ebp
ret 8
scopy endp
end PROGRAMME
;DLGTEMPLATE STRUCT DWORD
; style DWORD ?
; dwExtendedStyle DWORD ?
; cdit WORD ?;
; x WORD ?
; y WORD ?
; lx WORD ?
; ly WORD ?
;DLGTEMPLATE ENDS
;DRAWITEMSTRUCT STRUCT
; CtlType DWORD ?
; CtlID DWORD ?
; itemID DWORD ?
; itemAction DWORD ?
; itemState DWORD ?
; hwndItem DWORD ?
; hdc DWORD ?
; rcItem RECT <>
; itemData DWORD ?
;DRAWITEMSTRUCT ENDS
;SCROLLINFO STRUCT
; cbSize DWORD ?
; fMask DWORD ?
; nMin DWORD ?
; nMax DWORD ?
; nPage DWORD ?
; nPos DWORD ?
; nTrackPos DWORD ?
;SCROLLINFO ENDS
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Console + Icon [ par DeAtHCrAsH ]
J'essaye de mettre une icone dans mon programme en mode console. J'ai un fichier de resource avec ca dedans :#define IDI_ICON1 100LANGUAGE 0, 0IDI_ICO
RESSOURCE MASM32 [ par LordBob ]
Salut a tous,voila en fait j'aimerais juste savoir avec quoi vous fesiez vos fichier resource (.rc) pour lorsque vous faites des programmes Win32 avec
Mettre un icon avec la prog asm. [ par zerolol ]
Salut Pour Masm32.Est t’il possible d’incéré un icon dans le programme asm sans utiliser de fichier ressource « rsrc.rc
ICON EXECUTABLE HELP ME !! SVP [ par kanabis ]
Je voudrais savoir comment modifier l'icon d'un executable (un fichier *.com compilé en *.exe), avec quel logociel et ou le trouver ?Merci à toutes le
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Logiciels
974 Application Server (12.2.4.0)974 APPLICATION SERVER (12.2.4.0)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP mySongBook Player (1.0.0)MYSONGBOOK PLAYER (1.0.0)mySongBook Player est un logiciel gratuit permettant l'accès à une archive de tablatures/partitio... Cliquez pour télécharger mySongBook Player
|