voici un code que je vien de faire qui permet a une appli de se copier, avec gestion des erreurs.
Source / Exemple :
; #########################################################################
.386
.model flat, stdcall
option casemap :none ; case sensitive
; #########################################################################
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
; #########################################################################
.data
; # variable dynamiques #
filename dd 0
dirname dd 0
.code
Mtitle db "codé par BlackWizzard",0
message db "fichier copié avec succes :)",0
erreurmsg db "erreur durant la copie :(",0
newname db "test.exe",0
start:
push 46h ; taille maximum buffer (+ si crainte du buffer overflow)
push offset filename ; variable qui va accueillir la reponse
push 0 ; sais pas a koi ça correspond
call GetModuleFileNameA ; appel de l'API
; on connais le nom de notre programme, on commence la copie
push offset newname ; argument "destination"
push offset filename ; argument "fichier source"
call CopyFileA ; on appel l'API
cmp eax, 0 ; si eax = 0: erreur (fichier deja existant, etc...)
jz short erreur ; dans ce cas, on va direct a "erreur:" pour signaler
push MB_OK ; MB_OK = 0
push offset Mtitle ; le titre
push offset message ; le message
push 0 ; sais pas
call MessageBox ; on appel l'API
push 0 ; sais pas
call ExitProcess ; on appel l'API pour terminer le programme
erreur: ; en cas d'erreur
push MB_OK ; MB_OK = 0 ; blablabla...G deja expliké plus haut...
push offset Mtitle
push offset erreurmsg
push 0
call MessageBox
push 0
call ExitProcess
end start
Conclusion :
un chose que G pas compris, si je fait un appel a l'API GetCurrentDirectoryA (que je met dans une variable dirname), la variable filename (GetModuleFileNameA) sera corrompu, elle sera toute melangé...
pkoi ça fait ça? Pkoi je px pas faire appel aux 2 api a la suite, sans que ça me pourrisse la premiere variable??
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.