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)

Image

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
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) :shock:
comment la réduire ?
► Afficher le texte
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
Sinon en trichant un peut, j'arrive à ceci :
► Afficher le texte

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 :wink:

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 :cry:
Je colle cette commande dans ma demo:
► Afficher le texte
Le problème est que çà ne dépasse pas: C:\Program

Code : 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

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 :wink:

Ligne de commande envoyé:
► Afficher le texte
Ce que çà donne:
► Afficher le texte
Ce qu'il manque c'est les \ :cry:

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 :P :shock:

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. :roll:
Si je me souviens bien, cette discussion à déjà eu lieu dans un autre sujet. :mrgreen:

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 :wink:
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 :shock:
En plus il ne trouve plus (cmd.exe) quand il est présent :roll:

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

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 :D

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 :roll:

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