Page 4 sur 4
Re: [..] Récupérer le contenu de cmd.exe (pour newbies)
Posté : mar. 22 févr. 2011 08:16
par Anthony

Pinaise j'ai presque touché Dieu, presque, presque
► Afficher le texte
Code : Tout sélectionner
$text='CRLF'
$len_text=StringLen($text)
$contenu=$line
;méthode regexp
$resul=StringRegExp($contenu,"(?i)"&$text,3)
If IsArray($resul) Then
$occurence=UBound($resul)
Else
$occurence=0
EndIf
$location = StringInStr( $send, $text, 0, $occurence)
MsgBox(0,"résultat",$text&" a été trouvé "&$occurence&" fois, la partie à supprimer est de: "&$location&" à "&$Lensend)
Sauf que ce code ne fonctionne pas si je rajoute le:
$ à
CRLF$ même
ne fonctionne pas non plus
Voilà il ne reste plus qu'à supprimer cette partie avec.....

Re: [..] Récupérer le contenu de cmd.exe (pour newbies)
Posté : mar. 22 févr. 2011 09:02
par Tlem
Tant que vous ne donnez pas la ligne avec les crlf$, on ne peut pas faire des tests pour vous.
En ce qui me concerne, j'utiliserais le
StringSplit, puis je supprimerais la dernière valeur du tableau et enfin, je reformerais la ligne avec les nouvelles valeurs. ^^
StringRegExp peut être pas mal aussi, mais là il va falloir trouver le bon pattern.

Re: [..] Récupérer le contenu de cmd.exe (pour newbies)
Posté : mar. 22 févr. 2011 09:38
par Anthony
Voilà c'est fait, la variable avec les
crlf$:
Ce code compatible est envoyé à mon programme avec le label "MMBTitle"
► Afficher le texte
Code : Tout sélectionner
MPlayer Sherpya-SVN-r30369-4.2.5 (C) 2000-2009 MPlayer Team'+CRLF$+'getch2: 6 can'+l$+'t get number of input events [disabling console input]'+CRLF$+''+CRLF$+'Playing F:\Send\video.avi.'+CRLF$+'AVI file format detected.'+CRLF$+'[aviheader] Video stream found, -vid 0'+CRLF$+'[aviheader] Audio stream found, -aid 1'+CRLF$+'VIDEO: [H264] 320x240 24bpp 25.000 fps 150.0 kbps (18.3 kbyte/s)'+CRLF$+'=========================================================================='+CRLF$+'Opening video decoder: [ffmpeg] FFmpeg'+l$+'s libavcodec codec family'+CRLF$+'Selected video codec: [ffh264] vfm: ffmpeg (FFmpeg H.264)'+CRLF$+'=========================================================================='+CRLF$+'=========================================================================='+CRLF$+'Opening audio decoder: [ffmpeg] FFmpeg/libavcodec audio decoders'+CRLF$+'AUDIO: 44100 Hz, 1 ch, s16le, 64.0 kbit/9.07% (ratio: 8000->88200)'+CRLF$+'Selected audio codec: [ffmp3] afm: ffmpeg (FFmpeg MPEG layer-3 audio)'+CRLF$+'=========================================================================='+CRLF$+'[AO SDL] Samplerate: 44100Hz Channels: Mono Format s16le'+CRLF$+'AO: [null] 44100Hz 1ch s16le (2 bytes per sample)'+CRLF$+'Starting playback...'+CRLF$+'Movie-Aspect is 1.33:1 - prescaling to correct movie aspect.'+CRLF$+'VO: [direct3d] 320x240 => 320x240 Planar YV12 '+CRLF$+'A: 0.2 V: 0.0 A-V: 0.126 ct: 0.000 2/ 2 ??% ??% ??,?% 0 0 A: 0.2 V: 0.1 A-V: 0.108 ct: -0.000 3/ 3 ??% ??% ??,?% 1 0 A: 0.2 V: 0.1 A-V: 0.082 ct: -0.001 4/ 4 ??% ??% ??,?% 1 0 A: 0.2 V: 0.2 A-V: 0.058 ct: -0.001 5/ 5 ??% ??% ??,?% 1 0 A: 0.2 V: 0.2 A-V: 0.034 ct: -0.001 6/ 6 ??% ??% ??,?% 1 0 A: 0.3 V: 0.2 A-V: 0.010 ct: -0.001 7/ 7 ??% ??% ??,?% 1 0 A: 0.3 V: 0.3 A-V: -0.013 ct: -0.002 8/ 8 ??% ??% ??,?% 1 0 A: 0.3 V: 0.3 A-V: -0.014 ct: -0.003 9/ 9 ??% ??% ??,?% 1 0 A: 0.3 V: 0.4 A-V: -0.016 ct: -0.005 10/ 10 ??% ??% ??,?% 1 0 A: 0.4 V: 0.4 A-V: -0.020 ct: -0.007 11/ 11 ??% ??% ??,?% 1 0 A: 0.4 V: 0.4 A-V: -0.021 ct: -0.009 12/ 12 ??% ??% ??,?% 1 0 A: 0.5 V: 0.5 A-V: -0.020 ct: -0.011 13/ 13 ??% ??% ??,?% 1 0 A: 0.5 V: 0.5 A-V: -0.023 ct: -0.014 14/ 14 28% 15% 0.4% 1 0 A: 0.6 V: 0.6 A-V: -0.003 ct: -0.014 15/ 15 26% 14% 0.4% 1 0 A: 0.6 V: 0.6 A-V: -0.001 ct: -0.014 16/ 16 25% 13% 0.3% 1 0 A: 0.6 V: 0.6 A-V: -0.007 ct: -0.015 17/ 17 23% 12% 0.5% 1 0 A: 0.7 V: 0.7 A-V: -0.002 ct: -0.015 18/ 18 22% 12% 0.4% 1 0 A: 0.7 V: 0.7 A-V: -0.011 ct: -0.016 19/ 19 21% 12% 0.4% 1 0 A: 0.7 V: 0.8 A-V: -0.011 ct: -0.017 20/ 20 20% 11% 0.4% 1 0
Mon code Send.au3 actuel:
► Afficher le texte
Code : Tout sélectionner
#NoTrayIcon
#include <array.au3>
#include <file.au3>
#include<Constants.au3>
#include<GUIConstantsEx.au3>
#include<WindowsConstants.au3>
#include <MMBLib.au3>
#include <WinAPI.au3>
; Déclaration des variables
Global $send, $StopBatch, $Stopsend
; Change into the WinTitleMatchMode that supports classnames and handles
AutoItSetOption("WinTitleMatchMode", 4)
AutoItSetOption("WinSearchChildren", 1)
; get the string from commandline
#$cmd = 'MMBTitle||50||10||"C:\Program Files (x86)\RipBot264\tools\avs2yuv\pipebuf.exe" "C:\Program Files (x86)\RipBot264\tools\avs2yuv\avs2yuv.exe" "D:\temp\RipBot264temp\job1\job1.avs" - : "C:\Program Files (x86)\RipBot264\tools\x264\x264_x64.exe" --pass 1 --bitrate 852 --stats "D:\temp\RipBot264temp\job1\job1.stats" --fps 50 --force-cfr --min-keyint 50 --keyint 500 --frames 2000 --sar 1:1 --level 4.0 --aud --nal-hrd vbr --vbv-bufsize 25000 --vbv-maxrate 25000 --filter 0,0 --ref 3 --bframes 3 --b-adapt 2 --b-pyramid none --subme 7 --aq-mode 1 --trellis 2 --partitions all --me umh --stdin y4m --output "D:\temp\RipBot264temp\video.264" - : 2 '
$cmd = $CmdLine[1]
#MsgBox(0, "cmd is:", $cmd)
; Atribute variables from MMB
$CmdVar = StringSplit($cmd, "||", 1)
$MMBTitle = StringSplit($CmdVar[1], "||")
$MMBTitle = $MMBTitle[1]
$AutoItTimer = StringSplit($CmdVar[2], "||")
$AutoItTimer = $AutoItTimer[1]
$StopBatch = StringSplit($CmdVar[3], "||")
$StopBatch = $StopBatch[1]
$cmd = StringSplit($CmdVar[4], "||")
$cmd = $cmd[1]
#MsgBox(0, "MMBTitle is:", $MMBTitle)
#MsgBox(0, "AutoIt Timer is:", $AutoItTimer)
#MsgBox(0, "Stop Batch is:", $StopBatch)
#MsgBox(0, "cmd is:", $cmd)
SendScriptMMB($MMBTitle, "Status$='Starting...'")
Local $Stream = Run(@ComSpec & ' /c "' & $cmd & '"', @SystemDir, @SW_SHOW, $STDERR_CHILD + $STDOUT_CHILD)
Sleep(1000)
Local $line
SendScriptMMB($MMBTitle, "Status$='Running...'")
While 1
$line = StdoutRead($Stream)
If @error Then ExitLoop
; Get the handle of a cmd.exe window (from its classname)
$ConsoleWindowClass = WinGetTitle("classname=ConsoleWindowClass", "")
$ConsoleWindowClass = stringreplace($ConsoleWindowClass,@LF,"")
SendScriptMMB($MMBTitle, "Title$='" & $ConsoleWindowClass & "'")
; End of Get the handle of a cmd.exe window (from its classname)
If $line <>'' Then
$line = stringreplace($line,"'","'+l$+'")
#$line = stringreplace($line,@CR,"'+CR$+'")
#$line = stringreplace($line,@LF,"'+LF$+'")
$line = stringreplace($line,@CRLF,"'+CRLF$+'")
If $StopBatch = 1 then
If $Stopsend < 1 then
$Stopsend = 1
$line = stringreplace($line,@CR,"") ; Supression des Retours Chariot pour avoir une seule ligne à supprimer
#$line = stringreplace($line,@CR,"à éffacer" & @CR)
$send = $send & $line
$Lensend=StringLen($send)
##########################################
$text='CRLF'
$len_text=StringLen($text)
$contenu=$line
;méthode regexp
$resul=StringRegExp($contenu,"(?i)"&$text,3)
If IsArray($resul) Then
$occurence=UBound($resul)
Else
$occurence=0
EndIf
$location = StringInStr( $send, $text, 0, $occurence)
MsgBox(0,"résultat",$text&" a été trouvé "&$occurence&" fois, la partie à supprimer est de: "&$location&" à "&$Lensend)
##########################################
$Lensend=StringLen($send)
MsgBox(0, "send is:", $send)
SendScriptMMB($MMBTitle, "Batch$='" & $send & "'")
EndIf
SendScriptMMB($MMBTitle, "LastLine$='" & $line & "'")
Else
$send = $send & $line
SendScriptMMB($MMBTitle, "Batch$='" & $send & "'")
SendScriptMMB($MMBTitle, "LastLine$='" & $line & "'")
EndIf
EndIf
Sleep($AutoItTimer)
Wend
SendScriptMMB($MMBTitle, "Status$='Done...'")
PS: Je viens d'apprendre la déclaration des variables, çà devient vraiment intéressant ce petit AutoIt

:
Code : Tout sélectionner
; Déclaration des variables
Global $send, $StopBatch, $Stopsend
Re: [..] Récupérer le contenu de cmd.exe (pour newbies)
Posté : mar. 22 févr. 2011 10:11
par Tlem
En considérant la ligne que vous avez donné et en la plaçant dans le fichier test.txt, voici ce que cela donne :
Code : Tout sélectionner
Global $Line, $NewLine, $aLigne, $i
$Line = FileRead('test.txt')
$aLine = StringSplit($Line, "+CRLF$+", 1)
For $i = 1 to $aLine[0] - 1
$NewLine &= $aLine[$i] & "+CRLF$+"
Next
;$NewLine = StringTrimRight($NewLine, 7) ; Si vous ne voulez pas le dernier "+CRLF$+".
;$NewLine = StringTrimRight($NewLine, 1) ; Si vous ne voulez garder "+CRLF$" à la fin.
MsgBox(0, '', $NewLine)
Re: [..] Récupérer le contenu de cmd.exe (pour newbies)
Posté : mar. 22 févr. 2011 10:45
par Anthony
Vraiment Génial, quoi dire d'autre que génial et:
Encore merci, merci, merci.
PS: Le temps de modifier et réarenger tout le script et je poste le tout au propre et [R].
Re: [..] Récupérer le contenu de cmd.exe (pour newbies)
Posté : mar. 22 févr. 2011 11:39
par TommyDDR
Ce post va donc passer en [R] ?
Qui l'aurait cru ? ^^
Re: [..] Récupérer le contenu de cmd.exe (pour newbies)
Posté : mar. 22 févr. 2011 11:44
par Anthony
Re: [R] Récupérer le contenu de cmd.exe (pour newbies)
Posté : mar. 22 févr. 2011 18:42
par Anthony
Voilà c'est fait ma demo est finie et je vous offre les 2 codes source, AutoIt + MMB, bien sûr le pack inclu les exe's compilé
Et oui c'est vraiment fini j'ai même ajouté la prise en compte des STDERR
Je précise quand même que le code source "Send.au3" se compile avec AutoIt et "Get Full CMD.mbd" avec Multimedia Builder de Mediachance.
Cliquez sur "Voir" pour acceder au code source
► Afficher le texte
Code : Tout sélectionner
"MMBLib.au3" A mettre dans le dossier programme AutoIt Include
"Send.au3" Le code AutoIt
"how get.mbd" Le code source sous Multimedia Builder
Code : Tout sélectionner
"how get.exe" Mon Programme Compilé Sous Multimedia Builder
"mplayer.exe" Utilisé dans la démo
"Send.exe" Le code AutoIt Compilé
"video.avi" Utilisé par mplayer
Je tiens tout particulièrement à remercier tous ceux qui m'on supporté pour l'aide et le temps passé.
A titre d'info
çà fait 3 voir 4 années que je suis sur ce projet dont 2 intensives à 12 heures par jour et souvent plus.
Tout ceci à été possible grâce aux Dieux:
Tlem
TommyDDR
zeshrek

Re: [R] Récupérer le contenu de cmd.exe Sous MMB + Codes Sou
Posté : mar. 22 févr. 2011 19:14
par Tlem
C'est beaucoup d'honneur pour moi d'être comparé à un dieu, mais je tient à dire que je suis comme beaucoup un humble utilisateur et surtout que mes connaissances, je les ai acquises sur le premier forum AutoIt (dieu (le vrai) ai son âme ...) et donc tout ceci est bel et bien une histoire de communauté.
Je tient aussi à rajouté une sorte de devise qui pourrait convenir à ce forum :
Lisez, profitez, créez et partagez
.
Re: [R] Récupérer le contenu de cmd.exe (pour newbies)
Posté : mar. 22 févr. 2011 19:25
par TommyDDR
Anthony a écrit :Tout ceci à été possible grâce aux Dieux:
Tlem
TommyDDR
zeshrek
Tiens, on parle de moi ^^'
Bon, Tlem viens de faire un speach, je pense qu'il à résumer le tout, pas la peine de faire un double de son post ^^.
Merci à vous

Re: [R] Récupérer le contenu de cmd.exe Sous MMB + Codes Sou
Posté : mar. 22 févr. 2011 21:09
par zeshrek
Heuuuuuu... qu'est ce que je fais là moi ?
J'y suis pour rien, j'ai rien fait, c'est pas moi ! La vie de ma mere je suis innocent comme l'agneau qui vient de naitre !
Re: [R] Récupérer le contenu de cmd.exe Sous MMB + Codes Sou
Posté : mar. 22 févr. 2011 21:14
par Tlem
Re: [R] Récupérer le contenu de cmd.exe Sous MMB + Codes Sou
Posté : mar. 22 févr. 2011 22:11
par Anthony
Je confirme j'ai parcouru les 4 pages de posts pour n'oublier personne.
D'ailleur si çà gêne personne je mettrai vos pseudos dans "@propos de" de mon prochain programme qui utilisera vos scripts.
Attention @ n'est pas une variable
Aller dernière pour la soirée !
C'est grâce à des personnes comme vous que le monde avance.