Page 2 sur 2
Publié : mer. 20/févr./2008 19:44
par djes
La syntaxe pour que cmd execute quelque chose est "cmd /c blabla".
Pour le faire avec pb, tu utilises OpenFileRequester() pour sélectionner tes fichiers (regarde l'aide), tu charges tes deux fichiers source avec readdata() et allocmem(), et tu les balances dans un fichier en sortie avec writedata().
Facile, non?
Tu ne peux pas le faire avec include puisque ce dernier sert à intégrer un fichier dans ton exécutable; pas à le charger dynamiquement lors de l'exécution. Faut pas tout mélanger!
Publié : mer. 20/févr./2008 20:44
par Ar-S
Comme je l'ai dit plus haut,
Code : Tout sélectionner
parametres$="copy /B "+Chr(34)+image$+Chr(34)+" + "+Chr(34)+archive$+Chr(34)+" "+FichierSortie$
prg=RunProgram(copy$,parametres$,"",#PB_Program_Open) ; ,#PB_Program_Hide
If prg
; MessageRequester("OK","ça marche"+Chr(10)+copy$+" "+parametres$)
SetClipboardText(copy$+" "+parametres$)
endif
Doit fonctionner mais ça ne marche pas !
tu charges tes deux fichiers source avec readdata() et allocmem(), et tu les balances dans un fichier en sortie avec writedata().
Je vais tenter de faire comme ça merci.
Publié : mer. 20/févr./2008 22:32
par Backup
djes a écrit :La syntaxe pour que cmd execute quelque chose est "cmd /c blabla".
ce serai bien que tu prenne le temps de lire les posts avant de répondre
voici ce que j'ai ecris un poil plus haut
Dobro a écrit :oui c'est bizarre !!
ceci apparemment fonctionne , mais aucune copie n'est effectué !
Code : Tout sélectionner
prg=RunProgram("cmd.exe", "?/c copy "+Chr(34)+"d:\PureBasic\ readme.txt d:\PureBasic\dobro\toto.txt"+Chr(34)+" /V", "", #PB_Program_Open|#PB_Program_Read)
If prg
While ProgramRunning(prg)
Debug ReadProgramString(prg)
Wend
EndIf
CloseProgram(prg)
Publié : jeu. 21/févr./2008 6:47
par Ar-S
J'ai bien lu ton message dobro, sauf que si tu ecris
ceci apparemment fonctionne , mais aucune copie n'est effectué !
Le "mais" laisse entendre que c'est censé fonctionner mais que ça ne fonctionne pas !
Je ré-essayerai en rentrant du taf.
Publié : jeu. 21/févr./2008 9:32
par Backup
Ar-S a écrit :J'ai bien lu ton message dobro, sauf que si tu ecris
ceci apparemment fonctionne , mais aucune copie n'est effectué !
Le "mais" laisse entendre que c'est censé fonctionner mais que ça ne fonctionne pas !
Je ré-essayerai en rentrant du taf.
Note que je cite
Djes , c'est donc a lui que je m'adressais !!

(reveillez vous les gars !!

)
oui je dit bien que cela devrai fonctionner , mais que cela ne fonctionne pas !!

Publié : jeu. 21/févr./2008 10:02
par djes
Le code suivant fonctionne très bien :
Code : Tout sélectionner
image$="c:\test1.txt"
archive$="c:\test2.txt"
RunProgram("cmd"," /c dir c:\ >"+image$,"",#PB_Program_Wait)
RunProgram("cmd"," /c dir c:\ /d >"+archive$,"",#PB_Program_Wait)
fichiersortie$="c:\test3.txt"
parametres$=" copy /B "+Chr(34)+image$+Chr(34)+"+"+Chr(34)+archive$+Chr(34)+" "+fichiersortie$
prg=RunProgram("cmd"," /c "+parametres$,"",#PB_Program_Open) ; ,#PB_Program_Hide
If prg
; MessageRequester("OK","ça marche"+Chr(10)+copy$+" "+parametres$)
SetClipboardText(copy$+" "+parametres$)
EndIf
Ar-S> Juste quelques remarques : mets les codes complets quand tu postes, sinon comment veux-tu qu'on teste dans les mêmes conditions? De même, sois plus attentif à la syntaxe; en programmation, un espace en trop, une virgule en moins, et rien ne fonctionne.
Dobro> Moi je m'adressais à tout le monde... Quand j'ai vu le "?" dans ton code, j'ai crû que tu avais mal compris ce que j'avais dit.

Publié : jeu. 21/févr./2008 14:26
par Ar-S
ah la communication ! le mal du siècle !
En tout cas merci les gars pour votre aide.
J'essayerai ton code ce soir Djes, là je file faire mon Maso chez l'arracheur de dents

Publié : jeu. 21/févr./2008 17:06
par Ar-S
De retour,
Après quelques essayes, je ni arrive toujours pas, j'enrage.
Voilà le code complet, j'ai fait en sorte de copier les fichiers dans c:\ histoire de voir si cela venait d'une histoire de chemin "long" mais même pas..
Code : Tout sélectionner
;Cache Cache by LDV MULTIMEDIA
Enumeration
#WIN
#BT_GO
#AFFICHE
EndEnumeration
;}
Global path$=GetCurrentDirectory()
Global An$="Annulé par l'utilisateur"
Define.l Event, EventWindow, EventGadget, EventType, EventMenu
;}
Procedure OpenWindow_WIN()
If OpenWindow(#WIN, 192, 650, 206, 87, "Cache Cache", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_TitleBar|#PB_Window_SizeGadget)
If CreateGadgetList(WindowID(#WIN))
ButtonGadget(#BT_GO, 0, 5, 205, 60, "Cacher une archive dans une image")
StringGadget(#AFFICHE, 1, 68, 204, 19, "By LDVMULTIMEDIA", #PB_String_BorderLess|#ES_CENTER)
; Gadget Colors
PureCOLOR_SetButtonColor(#BT_GO, $68FF5B, $0)
EndIf
EndIf
EndProcedure
OpenWindow_WIN()
;{- Event loop
Repeat
Event = WaitWindowEvent()
Select Event
; ///////////////////
Case #PB_Event_Gadget
EventGadget = EventGadget()
EventType = EventType()
Select EventGadget
Case #BT_GO
SetGadgetText(#AFFICHE,"~ Patientez S.V.P ~")
Delay(100)
ImgFiltre$="Fichier Image ou Audio|*.bmp;*.jpg;*.gif;*.tif;*.png;*.mp3;*.wav;*.ogg;*.mpc;*.aiff;*.rm"
ArchiveFiltre$="Fichier Archivé (rar,zip,ace,7z,kgb)|*.rar;*.zip;*.ace;*.kgb;*.7z"
filtre=0
fichierpardefaut$=path$
image$=OpenFileRequester("Choisissez le fichier multimedia",fichierpardefaut$, ImgFiltre$, filtre)
If image$
ext$=GetExtensionPart(image$)
archive$=OpenFileRequester("Choisissez l'archive à cachée",fichierpardefaut$, ArchiveFiltre$, filtre)
If archive$
SortieFiltre$="Fichier (*."+ext$+")|*."+ext$
FichierSortie$=SaveFileRequester("Nom du nouveau fichier",fichierpardefaut$, SortieFiltre$, filtre)
If FichierSortie$
ArchiveName$=GetFilePart(archive$)
ImageName$=GetFilePart(image$)
archiveTemp$="c:\"+ArchiveName$
imageTemp$="c:\"+ImageName$
CopyFile(image$,imageTemp$)
CopyFile(archive$,archiveTemp$)
FichierSortie$=Chr(34)+FichierSortie$+"."+ext$+Chr(34)
parametres$="copy /B "+Chr(34)+imageTemp$+Chr(34)+" + "+Chr(34)+archiveTemp$+Chr(34)+" "+FichierSortie$
prg=RunProgram("cmd.exe",parametres$,"",#PB_Program_Open) ;
If prg
MessageRequester("OK","Parametres : "+Chr(10)+copy$+" "+parametres$)
SetClipboardText(copy$+" "+parametres$)
SetGadgetText(#AFFICHE,"Terminé")
DeleteFile(imageTemp$) ;
DeleteFile(archiveTemp$) ; suppression des copies des fichiers temporaires
Else
MessageRequester("No","ça chie")
EndIf
CloseProgram(prg)
;MessageRequester("Succés","Le fichier camouflé est : "+FichierSortie$+Chr(10)+"Il est complètement fonctionnel (écoutable, visible...)"+Chr(10)+"Pour ouvrir l'archive camoufflée, il vous suffit d'ouvrir votre fichier avec votre archiveur")
Else
MessageRequester ("Annulé",An$)
EndIf
Else
MessageRequester ("Annulé",An$)
EndIf
Else
MessageRequester ("Annulé",An$)
EndIf
Case #AFFICHE
EndSelect
Case #PB_Event_CloseWindow
EventWindow = EventWindow()
Select EventWindow
Case #WIN
CloseWindow(#WIN)
Break
EndSelect
EndSelect
ForEver
;
;}
Ainsi vous pourrez tester avec les fichiers adéquate.
Publié : ven. 22/févr./2008 22:17
par djes
A 1ère vue tu as oublié un espace entre cmd et parametres$...
Publié : sam. 23/févr./2008 12:01
par Ar-S
Oh, j'hallucine, ça venait bien de ça !
Je ne comprends pas pourquoi l'espace n'est pas automatique !
Ce n'est pas logique, du moment ou l'on appel un programme et qu'on lui attribut des paramètres, l'espace entre les 2 est toujours indispensable.
Vu que la fonction RunProgram contient ces 2 attributs, je trouvais donc logique qu'un espace les séparait.
En tout cas merci, du coup ça fonctionne.