Page 2 sur 4
Re: [..] Récupérer le contenu de cmd.exe (pour newbies)
Posté : dim. 23 janv. 2011 14:58
par Tlem
1 -> Tout à fait.
2 -> Je ne vois pas de quoi vous parlez.
Re: [..] Récupérer le contenu de cmd.exe (pour newbies)
Posté : dim. 23 janv. 2011 20:23
par Anthony
Toute la variable $Param en une seule fois.
Sans passer par le presse papier (CTRL+C => CTRL+V)

Re: [..] Récupérer le contenu de cmd.exe (pour newbies)
Posté : dim. 23 janv. 2011 20:39
par Tlem
Si je comprend votre question, vous voulez envoyer le contenu de la variable $Param dans la fenêtre CMD. C'est bien ça ?
Re: [..] Récupérer le contenu de cmd.exe (pour newbies)
Posté : lun. 24 janv. 2011 07:16
par Anthony
Tlem a écrit :Si je comprend votre question, vous voulez envoyer le contenu de la variable $Param dans la fenêtre CMD. C'est bien ça ?
Voilà mais en une seule traite c'est à dire aussi vite qu'un coller car dès que l'on dépasse quelques lignes de commande çà peut mettre plusieurs secondes, un peu comme une touche de clavier enfoncée.
Cette ligne de commande met 2 voir 3 secondes avant de se terminer et de se lancer
► Afficher le texte
Code : Tout sélectionner
"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 1024 --stats "D:\temp\RipBot264temp\job1\job1.stats" --fps 24000/1001 --force-cfr --min-keyint 24 --keyint 240 --frames 123122 --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 1 --b-pyramid none --subme 7 --aq-mode 1 --trellis 1 --partitions all --me umh --stdin y4m --output "D:\temp\RipBot264temp\video.264" - : 2
Voilà mon code pour envoyer le status AutoIt vers mon application en temp réel mais l'usage du CPU est énorme (environ 24% sur mon q9550)
comment la réduire ?
► Afficher le texte
Code : Tout sélectionner
While 1 ;use infinite loop since ExitLoop will get called
; Get the handle of a cmd.exe window (from its classname)
$handle = WinGetHandle("classname=ConsoleWindowClass", "")
If @error Then
Exit
Else
; send to MMB the Windows Title
$text = WinGetText("MMBTitle", "")
$Replace = stringreplace($text,@LF,"")
$Param = "Title$='" & $Replace & "'"
SendScriptMMB("MMBTitle", $Param)
EndIf
WEnd
Merci pour tout

Re: [..] Récupérer le contenu de cmd.exe (pour newbies)
Posté : lun. 24 janv. 2011 23:12
par Tlem
Avec du
ControlSend, je fait pas mieux que ceci en vitesse :
► Afficher le texte
Code : Tout sélectionner
$String = '"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 1024 --stats "D:\temp\RipBot264temp\job1\job1.stats" --fps 24000/1001 --force-cfr --min-keyint 24 --keyint 240 --frames 123122 --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 1 --b-pyramid none --subme 7 --aq-mode 1 --trellis 1 --partitions all --me umh --stdin y4m --output "D:\temp\RipBot264temp\video.264" - : 2'
$PID = Run(@ComSpec, "", @SW_Show)
Sleep(500)
Opt("SendKeyDownDelay", 0)
Opt("SendKeyDelay", 0)
ControlSend("[CLASS:ConsoleWindowClass]", "", "", $String)
Sinon en trichant un peut, j'arrive à ceci :
► Afficher le texte
Code : Tout sélectionner
$String = '"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 1024 --stats "D:\temp\RipBot264temp\job1\job1.stats" --fps 24000/1001 --force-cfr --min-keyint 24 --keyint 240 --frames 123122 --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 1 --b-pyramid none --subme 7 --aq-mode 1 --trellis 1 --partitions all --me umh --stdin y4m --output "D:\temp\RipBot264temp\video.264" - : 2'
$String = $String & @CRLF ; pour rajouter le retour chariot.
ClipPut($String)
$PID = Run(@ComSpec, "", @SW_Show)
$Hwndle = _GetHwndFromPID($PID)
Sleep(200)
$aPos = WinGetPos($Hwndle)
MouseClick ( "right" , $aPos[0] + 50, $aPos[1] + 50, 1, 0 )
Send ("{DOWN}{DOWN}{DOWN}{ENTER}")
Func _GetHwndFromPID($PID)
$hWnd = 0
$stPID = DllStructCreate("int")
Do
$winlist2 = WinList()
For $i = 1 To $winlist2[0][0]
If $winlist2[$i][0] <> "" Then
DllCall("user32.dll", "int", "GetWindowThreadProcessId", "hwnd", $winlist2[$i][1], "ptr", DllStructGetPtr($stPID))
If DllStructGetData($stPID, 1) = $PID Then
$hWnd = $winlist2[$i][1]
ExitLoop
EndIf
EndIf
Next
Sleep(100)
Until $hWnd <> 0
Return $hWnd
EndFunc ;==>_GetHwndFromPID
Re: [..] Récupérer le contenu de cmd.exe (pour newbies)
Posté : mar. 25 janv. 2011 06:45
par Anthony
Super et encore merci.
Je regarderai çà quand j'aurai un peu de temps

Re: [..] Récupérer le contenu de cmd.exe (pour newbies)
Posté : jeu. 27 janv. 2011 19:15
par Anthony
Bon voilà j'ai pas mal avancé en mixant un peu de tout pour y arriver mais reste un problème
Je colle cette commande dans ma demo:
► Afficher le texte
Code : Tout sélectionner
"C:\Program Files (x86)\RipBot264\tools\avs2yuv\pipebuf.exe" "C:\Program Files (x86)\RipBot264\tools\avs2yuv\avs2yuv.exe" "D:\temp\RipBot264temp\job2\job2.avs" - : "C:\Program Files (x86)\RipBot264\tools\x264\x264_x64.exe" --pass 1 --bitrate 512 --stats "D:\temp\RipBot264temp\job2\job2.stats" --fps 24000/1001 --force-cfr --min-keyint 24 --keyint 240 --frames 1660 --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 1 --b-pyramid none --subme 7 --aq-mode 1 --trellis 1 --partitions all --me umh --stdin y4m --output "D:\temp\RipBot264temp\video.264" - : 2
pause
Le problème est que çà ne dépasse pas:
C:\ProgramCode : Tout sélectionner
D:\Test>C:\Program
'C:\Program' n'est pas reconnu en tant que commande interne
ou externe, un programme exécutable ou un fichier de commandes.
AutoIt aurait-il du mal avec les espaces ?
Voici mon code AutoIt:
► Afficher le texte
Code : Tout sélectionner
#NoTrayIcon
#include<Constants.au3>
#include<GUIConstantsEx.au3>
#include<WindowsConstants.au3>
#include <MMBLib.au3>
#include <WinAPI.au3>
; Change into the WinTitleMatchMode that supports classnames and handles
AutoItSetOption("WinTitleMatchMode", 4)
AutoItSetOption("WinSearchChildren", 1)
; Atribute the MMB Title
$MMBTitle = 'MMBTitle'
; Get the handle of a cmd.exe window (from its classname)
$handle = WinGetHandle("classname=ConsoleWindowClass", "")
$textstart = WinGetText($MMBTitle, "")
$textstart = stringreplace($textstart,@LF,"")
If @error Then
$Param = 'RunScript("Script CMD not found by AutoIt")'
SendScriptMMB($MMBTitle, $Param)
Sleep(5)
Exit
Else
; get the string from commandline
$Param=$CmdLine[1]
; activate the cmd.exe window
WinActivate($handle, "")
; send the parameter to cmd.exe via Send command
Opt("SendKeyDownDelay", 0)
ControlSend("", "", $handle, $Param)
Send("{ENTER}")
EndIf
While True ;use infinite loop since ExitLoop will get called
; Get the handle of a cmd.exe window (from its classname)
$handle = WinGetHandle("classname=ConsoleWindowClass", "")
If @error Then
$Param = 'RunScript("Script CMD not found by AutoIt")'
SendScriptMMB($MMBTitle, $Param)
Sleep(5)
Exit
Else
$text = WinGetText($MMBTitle, "")
$text = stringreplace($text,@LF,"")
$end = $textstart & ' - pause'
If $text = $end Then
Send("{ENTER}")
$Param = "Title$='Done...'"
SendScriptMMB($MMBTitle, $Param)
Sleep(5)
Exit
Else
$Replace = stringreplace($text,@LF,"")
; send to MMB the Windows Title
$Param = "Title$='" & $Replace & "'"
SendScriptMMB($MMBTitle, $Param)
Sleep(100)
EndIf
EndIf
WEnd
Re: [..] Récupérer le contenu de cmd.exe (pour newbies)
Posté : jeu. 27 janv. 2011 20:53
par TommyDDR
Cette "erreur" apparait dans le cmd.exe non ?
Si oui : c'est normal, autoit envoi la chaine telle que vous lui avez dit.
Il faut aussi envoyer les " pour que votre cmd.exe prennent tout le chemin
pour mettre un " dans une chaine
Code : Tout sélectionner
$MaVariable = "Voici un chemin avec espace : ""c:\program files\"""
mettez 2 " pour "annuler" la fin de chaine ... (je ne vois pas comment le dire sans m'embrouiller ...)
Bref, mettez 2 " dans une chaine et vous en aurez 1 en sortie.
sinon, ne passez pas par " pour délimiter votre chaine mais par '
Code : Tout sélectionner
$MaVariable = 'Voici un chemin avec espace : "c:\program files\"'
J'espère m'être fait compris.
Re: [..] Récupérer le contenu de cmd.exe (pour newbies)
Posté : jeu. 27 janv. 2011 22:17
par Anthony
J'ai donc enlevé les " çà me tape bien toute la ligne de commande saufles \ mais le resultat est le même,
Je prendrai un peu plus de temps pour me plonger vraiment dedant car avec le boulot dur dur.
En tout cas merci encore à tous
Ligne de commande envoyé:
► Afficher le texte
Code : Tout sélectionner
C:\Program Files (x86)\RipBot264\tools\avs2yuv\pipebuf.exe C:\Program Files (x86)\RipBot264\tools\avs2yuv\avs2yuv.exe D:\temp\RipBot264temp\job2\job2.avs - : C:\Program Files (x86)\RipBot264\tools\x264\x264_x64.exe --pass 1 --bitrate 512 --stats D:\temp\RipBot264temp\job2\job2.stats --fps 24000/1001 --force-cfr --min-keyint 24 --keyint 240 --frames 1660 --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 1 --b-pyramid none --subme 7 --aq-mode 1 --trellis 1 --partitions all --me umh --stdin y4m --output D:\temp\RipBot264temp\video.264 - : 2
Ce que çà donne:
► Afficher le texte
Code : Tout sélectionner
D:\Binder>C:Program Files (x86)RipBot264toolsavs2yuvpipebuf.exe C:Program Files (x86)RipBot264toolsavs2yuvavs2yuv.exe D:tempRipBot264tempjob2job2.avs - : C:Program Files (x86)RipBot264toolsx264x264_x64.exe
--pass 1 --bitrate 512 --stats D:tempRipBot264tempjob2job2.stats --fps 24000/100
1 --force-cfr --min-keyint 24 --keyint 240 --frames 1660 --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 1 --b-pyramid none --subme 7 --aq-mode 1 --trellis 1 -
-partitions all --me umh --stdin y4m --output D:tempRipBot264tempvideo.264 - : 2
'C:Program' n'est pas reconnu en tant que commande interne
ou externe, un programme exécutable ou un fichier de commandes.
Ce qu'il manque c'est les \

Re: [..] Récupérer le contenu de cmd.exe (pour newbies)
Posté : jeu. 27 janv. 2011 22:49
par TommyDDR
doublez vos \ -> \\
En C/C++ :
\ = caractère d'échappement
pour afficher un \ il faut échapper l'échappement (^^) -> \\
Re: [..] Récupérer le contenu de cmd.exe (pour newbies)
Posté : ven. 28 janv. 2011 04:01
par Anthony
OK J'essayerai çà, merci je part au boulot

Re: [..] Récupérer le contenu de cmd.exe (pour newbies)
Posté : ven. 28 janv. 2011 09:33
par TommyDDR
Posté: Ven Jan 28, 2011 5:01 am
Bon courage.
Re: [..] Récupérer le contenu de cmd.exe (pour newbies)
Posté : lun. 31 janv. 2011 12:50
par Anthony
Snif je comprends plus:
La ligne entrée est trop longue.
Code : Tout sélectionner
D:\Binder>"C:\Program Files (x86)\RipBot264\tools\avs2yuv\pipebuf.exe C:\Program Files (x86)\RipBot264\tools\avs2yuv\avs2yuv.exe D:\temp\RipBot264temp\job2\job2.avs - : C:\Program Files (x86)\RipBot264\tools\x264\x264_x64.exe --pass 1 --bitrate 512 --stats D:\temp\RipBot264temp\job2\job2.stats --fps 24000/1001 --force-cfr --min-keyint 24 --keyint 240 --frames 1660 --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 1 --b-pyramid none --subme 7 --aq-mode 1 --trellis 1 --partitions all --me umh --stdin y4m --output D:\temp\RipBot264temp\video.264 - : 2
La ligne entrée est trop longue.
Re: [..] Récupérer le contenu de cmd.exe (pour newbies)
Posté : lun. 31 janv. 2011 13:05
par zeshrek
Effectivement la ligne est trop longue.
De mémoire une ligne de commande dos ne doit pas dépasser 255 caracteres. Avec plus de 600 la tienne est _vraiment_ trop longue.
Je te suggère d'utiliser un fichier de parametres (un ini ou un bête fichier texte) dont tu recupereras les paramettres...
Sinon, ta ligne de commande ouvre un guillemet... et ne le referme pas. M'est avis que ca doit pas aider non plus

Re: [..] Récupérer le contenu de cmd.exe (pour newbies)
Posté : lun. 31 janv. 2011 15:07
par TommyDDR
Code : Tout sélectionner
AutoIt3 Limits/defaults
AutoIt3 limits Value Description
MAX_LINESIZE 4095 Maximum size for a line of script.
Re: [..] Récupérer le contenu de cmd.exe (pour newbies)
Posté : lun. 31 janv. 2011 23:30
par Tlem
4095 c'est la longueur maximale d'une ligne dans un script AutoIt pour être interprétée, mais lors de l'envoi en argument de la ligne de commande (DOS) cette limite dégringole.

Re: [..] Récupérer le contenu de cmd.exe (pour newbies)
Posté : mar. 01 févr. 2011 10:03
par zeshrek
Non non, apres vérification, il se trouve que je n'avais pas raison... même si je n'avais pas tort
En fait la restriction de 255 caracteres s'applique bien au dos, mais au MS-DOS en tant qu'OS.
Depuis NT & XP, DOS n'est plus l'OS mais un simple shell et ils en ont profité pour modifier aussi cette limite :
"
Sur les ordinateurs qui exécutent Microsoft Windows XP ou une version ultérieure, la longueur maximale de chaîne que vous pouvez utiliser à l'invite de commandes est de 8 191 caractères. Sur les ordinateurs qui exécutent Windows 2000 ou Windows NT 4.0, la longueur maximale de chaîne que vous pouvez utiliser à l'invite de commandes est de 2 047 caractères.
Cette limitation s'applique à la ligne de commande, aux variables d'environnement individuelles (telles que la variable PATH) qui sont héritées par d'autres processus, et à toutes les extensions de variable d'environnement. Si vous exécutez des fichiers de commandes à partir de l'invite de commandes, cette limitation s'applique également au traitement des fichiers de commandes." (
Source)
Donc le pb ne vient pas de là.
Tu as regardé du coté de ce guillemet qui s'ouvre en début ed ligne et qui n'est pas refermé ?
Je supopse que le guillemet fermant devrait se trouver juste apres le .exe ?
Re: [..] Récupérer le contenu de cmd.exe (pour newbies)
Posté : mar. 01 févr. 2011 11:03
par Tlem
Il existe quand même une limite de l'interprétation d'une ligne de commande pour certaines fonctions.
Pour preuve, essaye de taper ceci dans une fenêtre de console :
Code : Tout sélectionner
dir ceci_est_un_nom_de_fichier_super_long_tellement_long_que_meme_la_commande_DIR_ne_peut_interpreter_la_chaine_qui_depasse_un_certain_nombre_de_caracteres_et_que_cette_longueur_empeche_les_commandes_classiques_de_fonctionner_123.txt
Le résultat sera sans appel :
Nom de fichier ou extension trop long.
Si par contre tu supprime '123' à la fin de la ligne, alors la ligne sera bien interprétée.
Maintenant, je n'ai pas fait de recherche sur les limites de telle ou telle commande, mais à mon avis, elle existe pour la plupart des commande DOS.
Si je me souviens bien, cette discussion à déjà eu lieu dans un autre sujet.

Re: [..] Récupérer le contenu de cmd.exe (pour newbies)
Posté : mer. 02 févr. 2011 12:53
par Anthony
Bonjour,
J'ai mis mon
programme de test à jour (how get.exe) garanti sans virus

Cette fois ci çà marche même si j'ai un espace avant la ligne de commande
Maintenant nouveau problème si je ferme la fenêtre (cmd.exe) à l'intérieur de mon programme,
autoit (send.exe) continue dans la fenête active
En plus il ne trouve plus (cmd.exe) quand il est présent
je sais que le problème est là mais...
Code : Tout sélectionner
For $i = 1 to $Param_Len
; Get the handle of a cmd.exe window (from its classname)
$handle = WinGetHandle("classname=ConsoleWindowClass", "")
If $handle = $textstart Then
$CharSend=StringMid($Param,$i,1)
Send($CharSend)
#Opt("SendKeyDownDelay", 0)
#ControlSend("", "", $handle, $Param)
Else
Exit
EndIf
Next
Send("{ENTER}")
EndIf
Code au3 complet:
► Afficher le texte
Code : Tout sélectionner
#NoTrayIcon
#include <file.au3>
#include<Constants.au3>
#include<GUIConstantsEx.au3>
#include<WindowsConstants.au3>
#include <MMBLib.au3>
#include <WinAPI.au3>
; Change into the WinTitleMatchMode that supports classnames and handles
AutoItSetOption("WinTitleMatchMode", 4)
AutoItSetOption("WinSearchChildren", 1)
; Atribute the MMB Title
$MMBTitle = 'MMBTitle'
#MsgBox(0, "Title of MMB is:", $MMBTitle)
; Get the handle of a cmd.exe window (from its classname)
$handle = WinGetHandle("classname=ConsoleWindowClass", "")
$textstart = WinGetText($MMBTitle, "")
$textstart = stringreplace($textstart,@LF,"")
If @error Then
#MsgBox(4096, "AutoIt", "Ne trouve pas la fenêtre cmd.exe")
$Param = 'RunScript("Script CMD not found by AutoIt")'
SendScriptMMB($MMBTitle, $Param)
Sleep(5)
Exit
Else
; get the string from commandline
$Param=$CmdLine[1]
; get the length of obtained string
$Param_Len=StringLen($Param)
; activate the cmd.exe window
WinActivate($handle, "")
; send the parameter to cmd.exe via Send command
For $i = 1 to $Param_Len
; Get the handle of a cmd.exe window (from its classname)
$handle = WinGetHandle("classname=ConsoleWindowClass", "")
If $handle = $textstart Then
$CharSend=StringMid($Param,$i,1)
Send($CharSend)
#Opt("SendKeyDownDelay", 0)
#ControlSend("", "", $handle, $Param)
Else
Exit
EndIf
Next
Send("{ENTER}")
EndIf
While True ;use infinite loop since ExitLoop will get called
; Get the handle of a cmd.exe window (from its classname)
$handle = WinGetHandle("classname=ConsoleWindowClass", "")
If @error Then
#Send("{ENTER}") ; Problème lance send.exe sans arret
$Param = 'RunScript("Script CMD not found by AutoIt")'
SendScriptMMB($MMBTitle, $Param)
Sleep(5)
Exit
Else
$text = WinGetText($MMBTitle, "")
$text = stringreplace($text,@LF,"")
$end = $textstart & ' - pause'
If $text = $end Then
Send("{ENTER}")
$Param = "Title$='Done...'"
SendScriptMMB($MMBTitle, $Param)
Sleep(5)
Exit
Else
$Replace = stringreplace($text,@LF,"")
; send to MMB the Windows Title
$Param = "Title$='" & $Replace & "'"
SendScriptMMB($MMBTitle, $Param)
Sleep(100)
EndIf
EndIf
WEnd
Re: [..] Récupérer le contenu de cmd.exe (pour newbies)
Posté : jeu. 10 févr. 2011 16:54
par Anthony
Bon j'ai craqué, j'abandone le controlsend, çà part dans d'autres fenêtres

en tous cas merci pour l'aide déjà fournie, çà peut toujours servir un jour
Je souhaite passer ma ligne de commande et en récupérér le contenu (le processus):
Code : Tout sélectionner
$String = '"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 66128 --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'
Mais là çà coince car rien n'est récupéré, pourtant la conversion se fait
Code : Tout sélectionner
Local $Stream = Run($String, '', @SW_SHOW, $STDERR_CHILD + $STDIN_CHILD + $STDOUT_CHILD)
Alors que là dans votre exemple çà le récupère le ==> dir C:\ <== car cmd.exe est lancé grâce à ==> @ComSpec <==
Code : Tout sélectionner
Local $Stream = Run(@ComSpec & " /c dir c:\ ", @SystemDir, @SW_SHOW, $STDERR_CHILD + $STDIN_CHILD + $STDOUT_CHILD)
Comment intégrer ma variable dans cette commande ?
Nouveau code complet:
► Afficher le texte
Code : Tout sélectionner
#NoTrayIcon
#include <file.au3>
#include<Constants.au3>
#include<GUIConstantsEx.au3>
#include<WindowsConstants.au3>
#include <MMBLib.au3>
#include <WinAPI.au3>
; Cré en variable AutoIt le Title de la fenêtre du programme MMB (ici => MMBTitle)
$MMBTitle = 'MMBTitle'
$String = '"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 66128 --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'
Local $Stream = Run(@ComSpec & " /c dir c:\ ", @SystemDir, @SW_SHOW, $STDERR_CHILD + $STDIN_CHILD + $STDOUT_CHILD)
#Local $Stream = Run($String, '', @SW_SHOW, $STDERR_CHILD + $STDIN_CHILD + $STDOUT_CHILD)
Local $line
While 1
$line = StdoutRead($Stream)
If @error Then ExitLoop
; ==> Adapte la variable reçue ($line) vers une variable compatible MMB
$line = stringreplace($line,"'","'+CHR(39)+'")
$line = stringreplace($line,@CRLF,@CR)
; <== Adapte la variable reçue vers une variable compatible MMB
$line = "Batch$='" & $line & "'" & @LF & 'Invert("Rectangle")' ;Invert=Fait clignoter la partie qui reçoie le script (Batch$) MMB
SendScriptMMB($MMBTitle, $line)
#MsgBox(0, "STDOUT read:", $line)
Sleep(100)
Wend