Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: PanoConverter Mer 2 Nov 2016 - 23:21 | |
| J' ai repris les derniers codes sur la création d' un *.exe J' ai mixé avec recover source Puis dans l' idée de pouvoir faire tout cela depuis le menu contextuel cela donne cela : - Code:
-
' ------------------------------------------------------------------------------ ' PANORAMIC CONVERTER ' par ygeronimi ' Vs 1.0 ' Avec l' aide de la communauté ' Utilise KGF.dll, développé par Klaus ' ------------------------------------------------------------------------------
VARIABLES() CONSTANTES() GUI() INIT() MENU() QUITTER() end ' ------------------------------------------------------------------------------ ' DECLARATION DES VARIABLES ' ------------------------------------------------------------------------------
sub VARIABLES() ' variable d' incrementation des objets dim no% ' variable fichier importer dim file$ ' variable type déterminant le sens de conversion dim type% ' variables projet dim nclic% dim nchange% dim decoder%(255) dim decoder$ dim work_file$ dim ps% dim size% dim Panofile% dim prg$ end_sub
' ------------------------------------------------------------------------------ ' DECLARATION DES CONSTANTES ' ------------------------------------------------------------------------------
sub CONSTANTES() ' dossier source dim path$ : path$=dir_current$ if right$(path$,1)="\" : path$=left$(len(path$)-1) : end_if path$=path$+"\" ' fichiers dll dim kgf$ :' kgf$="C:\KGF\KGF.dll" dim kernel$ : kernel$="C:\Windows\System32\kernel32.dll" ' fichier paramètres dim param$ ' objets panoramic dim pan% : no%=no%+1 : pan%=no% dim alph1% : no%=no%+1 : alph1%=no% dim alph2% : no%=no%+1 : alph2%=no% dim alph3% : no%=no%+1 : alph3%=no% dim alph4% : no%=no%+1 : alph4%=no% dim pbar% : no%=no%+1 : pbar%=no% dim mem1% : no%=no%+1 : mem1%=no% dim mem2% : no%=no%+1 : mem2%=no% dim FRO% : no%=no%+1 : FRO%=no% dim FWO% : no%=no%+1 : FWO%=no% dim F_OR% : no%=no%+1 : F_OR%=no% dim F_OW% : no%=no%+1 : F_OW%=no% dim Odial% : no%=no%+1 : Odial%=no% end_sub
' ------------------------------------------------------------------------------ ' INITIALISATIONS ' ------------------------------------------------------------------------------
sub INIT() dim_local i%,sep%,k%,f$
prg$ = param_value$(0) param$=file_extract_path$(prg$)+"Param.inf" file$= param_value$(2) if file_exists(kgf$)=0 if file_exists(param$)=1 file_open_read F_OR%,param$ file_readln F_OR%,kgf$ file_close F_OR% else if message_warning_yes_no("KGF.dll n' a pas été trouvé !"+chr$(13)+"Voulez vous indiquer son chemin d' accès ?" )=1 open_dialog Odial% dir_dialog Odial%,"C:\" filter Odial%,"*.dll|*.dll" f$=file_name$(Odial%) delete Odial% if upper$(file_extract_name$(f$))="KGF.DLL" kgf$=f$ file_open_write F_OW%,param$ file_writeln F_OW%,kgf$ file_close F_OW% else Message "Désolé, KGF.dll est indispensable."+chr$(13)+"L' application va se fermer." Terminate end_if else Message "Désolé, KGF.dll est indispensable."+chr$(13)+"L' application va se fermer." Terminate end_if end_if end_if dll_on kgf$ if file_extract_extension$(file$)=".bas" : type%=1 : end_if if file_extract_extension$(file$)=".exe" : type%=2 : end_if for i%=0 to 255 k%=bin_xor(i%,23) if i%=0 or i%=10 or i%=13 then k%=0 decoder%(i%) = k% next i% end_sub
' ------------------------------------------------------------------------------ ' INTERFACE UTILISATEUR ' ------------------------------------------------------------------------------
sub GUI() dim_local h%,w% border_hide 0 height 0,100 width 0,350 top 0,(screen_y-height(0))/2 left 0,(screen_x-width(0))/2 panel pan% full_space pan% w%=width(pan%) h%=height(pan%) color pan%,255,210,140 font_name pan%,"Arial" font_size pan%,8 font_color pan%,140,0,0 font_bold pan%
alpha alph1% parent alph1%,pan% top alph1%,10 font_name alph1%,"Times" font_size alph1%,18 caption alph1%,"Panoramic-Converter" left alph1%,(w%-width(alph1%))/2 alpha alph2% parent alph2%,pan% top alph2%,45 left alph2%,10 caption alph2%,"" progress_bar pbar% parent pbar%,pan% top pbar%,60 left pbar%,10 width pbar%,w%-55 color_progress_bar(pbar%,140,0,0) min pbar%,0 : max pbar%,100 : position pbar%,0 alpha alph3% parent alph3%,pan% top alph3%,60 caption alph3%,"0 %" left alph3%,w%-width(alph3%)-10 alpha alph4% parent alph4%,pan% top alph4%,80 if type%=1 caption alph4%,"Convert *.bas to *.exe" else caption alph4%,"Convert *.exe to *.bas" end_if left alph4%,(w%-width(alph4%))/2 memo mem1% : hide mem1% memo mem2% : hide mem2% end_sub
' ------------------------------------------------------------------------------ ' MENU ' ------------------------------------------------------------------------------
sub MENU() dim_local i%,l$,f$,sep%,ctfile%,p,prct if type%=1 caption alph2%,file_extract_name$(file$) file_load mem2%,file$
for i%=1 to count(mem2%) l$=item_read$(mem2%,i%) if Upper$(left$(trim$(l$),8))="#INCLUDE" ctfile%=ctfile%+1 prct=100/(ctfile%+1) end_if next i% if ctfile%=0 prct=100/(count(mem2%)+1) end_if for i%=1 to count(mem2%) l$=item_read$(mem2%,i%) if Upper$(left$(trim$(l$),8))="#INCLUDE" sep%=instr(l$,chr$(34)) : f$=right$(l$,len(l$)-sep%) sep%=instr(f$,chr$(34)) : f$=left$(f$,sep%-1) f$=file_extract_path$(file$)+f$ caption alph2%,f$ file_add mem1%,f$ p=p+prct if frac(p)=0 GotoPbarPosition(int(p)) end_if else caption alph2%,file_extract_name$(file$) item_add mem1%,l$ if ctfile%=0 p=p+prct if frac(p)=0 GotoPbarPosition(int(p)) end_if end_if end_if next i% caption alph2%,"Edition du fichier *.exe" EDIT_EXE() if PanoFile%=0 GotoPbarPosition(100) end_if exit_sub else EXTRACT_BAS() if PanoFile%=1 exit_sub else SAVE_FILE() exit_sub end_if end_if end_sub
' ------------------------------------------------------------------------------ ' FONCTIONS INTERFACE ' ------------------------------------------------------------------------------
sub COLOR_PROGRESS_BAR(nb%,r%,g%,b%) dim_local i,j,k%,my_library$,my_dll$,found% ' verifie si "user32" existe: my_dll$="user32" i=0 k%=0 found%=0 my_dll$=lower$(my_dll$) j=instr(my_dll$,".") : if j>0 then my_dll$=left$(my_dll$,j-1) repeat k%=k%+1 until library$(k%)="_" repeat i=i+1 my_library$=lower$(library$(i)) j=instr(my_library$,".") : if j>0 then my_library$=left$(my_library$,j-1) ' if my_library$=my_dll$ found%=1 exit_repeat end_if until i=32 ' charge la librairie et cré la commande si nécessaire if found%=0 library k%,my_dll$ ' print k%," : not found ",library$(k%) :' debug command "pb_color","SendMessageA",k%,"IIII","stdcall" else ' print i," : found ",library$(i) :' debug end_if ' colore la progress_bar pb_color handle(nb%),1033,0,(b%*65536)+(g%*256)+r% end_sub
' ------------------------------------------------------------------------------
sub GotoPbarPosition(n%) dim_local i% for i%=Position(pbar%) to n% position pbar%,i% caption alph3%,str$(position(pbar%))+" %" left alph3%,width(pan%)-(width(alph3%)+10) display pause 100 next i% end_sub
' ------------------------------------------------------------------------------ ' FONCTIONS D EXTRACTION D UN SOURCE ' ------------------------------------------------------------------------------
SUB EXTRACT_BAS() dim_local l%,s$,b%,i%,n%,res%,pos_pbar% Caption alph2%,file_extract_name$(file$) if file_extract_extension$(file$)=".exe" filebin_open_read FRO%,file$ l%=filebin_size(FRO%) filebin_position FRO%,l%-4 filebin_hexa_read FRO%,4,s$ if (s$<>"33422E46") message "["+time$+"] -ERROR- Ce fichier n' a pas été créé avec Panoramic" filebin_close FRO% Panofile%=1 exit_sub end_if filebin_position FRO%,l%-8 s$="" for i%=0 to 3 filebin_read FRO%,b% s$=s$+chr$(b%) next i% ps%=adr(s$) get_size() n%=size% size%=size%+8 filebin_position FRO%,l%-size% s$="" for i%=0 to n%-1 filebin_read FRO%,b%
pos_pbar%=int((i%*100)/size%) position pbar%,pos_pbar% caption alph3%,str$(pos_pbar%)+" %" left alph3%,width(pan%)-(width(alph3%)+10) display
b%=decoder%(b%) if (b%=0) item_add mem1%,s$ s$="" pause 10 else s$=s$+chr$(b%) end_if next i% if (len(s$)>0) item_add mem1%,s$ end_if filebin_close FRO% else message "["+time$+"] -ERROR- Fichier invalide !..." Panofile%=1 exit_sub end_if END_SUB
' ------------------------------------------------------------------------------
SUB Get_size() dim_local res%,fonction$,hnd_kernel% fonction$="RtlMoveMemory" hnd_kernel% = dll_call1("LoadDLL",adr(kernel$)) res% = dll_call2("TargetDLL",hnd_kernel%,adr(fonction$)) res% = dll_call3("CallDLL3",adr(ps%),ps%,4) res% = dll_call3("CallDLL3",adr(size%),ps%,4) res% = dll_call1("UnLoadDLL",hnd_kernel%) END_SUB
' ------------------------------------------------------------------------------ ' FONCTION DE CREATION D UN EXE ' ------------------------------------------------------------------------------
sub EDIT_EXE() dim_local res%,nom$ nom$=left$(file$,len(file$)-3)+"exe" if file_exists(nom$)=1 then file_delete nom$ res% = dll_call3("CompilePanoramicToEXE",adr(prg$),handle(mem1%),adr(nom$)) if res%<> 0 : MESSAGERIE(res%) : end_if PanoFile%=res% end_sub
' ------------------------------------------------------------------------------ ' FONCTION DE SAUVEGARDE ' ------------------------------------------------------------------------------
sub SAVE_FILE() dim_local NewFile$ if type%=2 NewFile$=left$(file$,len(file$)-3)+"bas" end_if file_save mem1%,NewFile$ end_sub
' ------------------------------------------------------------------------------ ' FONCTION DE SORTIE ' ------------------------------------------------------------------------------
sub QUITTER() dim_local fin% fin% = dll_call1("KillProcessByHandle",handle(0)) end_sub
' ------------------------------------------------------------------------------ ' MESSAGES D ERREUR ' ------------------------------------------------------------------------------
sub MESSAGERIE(n%) dim_local m%,mes$,p% m%=(n%*-1) select m% case 1 m$="Erreur inattendue !" case 2 m$="Nom de programme invalide !" case 3 m$="Programme non trouvé !" case 4 m$="Nom du fichier *.exe invalide !" case 5 m$="Le fichier *.exe existe déjà !" case 6 m$="Erreur en copie du moteur Panoramic !" case 7 m$="Erreur en écriture dans le fichier *.exe" end_select
if message_warning_ok(mes$))=1 p%=p% end_if end_sub
Vous suivez le tuto de Minibug pour ajouter dans le menu contextuel Convert to *.bas dans la clé [.exe] Convert to *.exe dans la clé [.bas] La commande est la même pour les deux "chemin de l' exe" nul: "%1" Le programme vous proposera de lui indiquer le chemin de KGF.dll à sa première utilisation. Normalement, si tout va bien, le menu contextuel doit apparaitre que ce soit pour un *.exe ou un *.bas Si ce n' est pas un exe créé à partir de panoramic le programme se fermera mais bon le logo Panoramic étant de partout... Bon, aller, je vous laisse tester...
Dernière édition par ygeronimi le Jeu 3 Nov 2016 - 14:52, édité 2 fois (Raison : Amélioration du progress_bar sens bas vers exe) | |
|