[R] Récupérer le contenu de cmd.exe Sous MMB + Codes Source

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Récupérer le contenu de cmd.exe (pour newbies)

#21

Message par Tlem »

1 -> Tout à fait.
2 -> Je ne vois pas de quoi vous parlez.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
Anthony
Niveau 7
Niveau 7
Messages : 324
Enregistré le : lun. 17 janv. 2011 14:08
Localisation : France
Status : Hors ligne

Re: [..] Récupérer le contenu de cmd.exe (pour newbies)

#22

Message par Anthony »

Toute la variable $Param en une seule fois.
Sans passer par le presse papier (CTRL+C => CTRL+V)

Image
Je suis diagnostiqué pour trouble de la concentration, soyez indulgent
Merci à tous pour votre aide.
UDF: GuiStatusBarEx --- 2025/03/17 --- Une StatusBar complète, rapide et simple
Code: Code-Texte fusion --- Une GUI pour fusionner des GCodes pour CNC 3018
Cool: Base64 Compression Tool --- des fichiers dans vos scripts
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Récupérer le contenu de cmd.exe (pour newbies)

#23

Message 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 ?
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
Anthony
Niveau 7
Niveau 7
Messages : 324
Enregistré le : lun. 17 janv. 2011 14:08
Localisation : France
Status : Hors ligne

Re: [..] Récupérer le contenu de cmd.exe (pour newbies)

#24

Message 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 ;-)
Je suis diagnostiqué pour trouble de la concentration, soyez indulgent
Merci à tous pour votre aide.
UDF: GuiStatusBarEx --- 2025/03/17 --- Une StatusBar complète, rapide et simple
Code: Code-Texte fusion --- Une GUI pour fusionner des GCodes pour CNC 3018
Cool: Base64 Compression Tool --- des fichiers dans vos scripts
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Récupérer le contenu de cmd.exe (pour newbies)

#25

Message 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
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
Anthony
Niveau 7
Niveau 7
Messages : 324
Enregistré le : lun. 17 janv. 2011 14:08
Localisation : France
Status : Hors ligne

Re: [..] Récupérer le contenu de cmd.exe (pour newbies)

#26

Message par Anthony »

Super et encore merci.
Je regarderai çà quand j'aurai un peu de temps :wink:
Je suis diagnostiqué pour trouble de la concentration, soyez indulgent
Merci à tous pour votre aide.
UDF: GuiStatusBarEx --- 2025/03/17 --- Une StatusBar complète, rapide et simple
Code: Code-Texte fusion --- Une GUI pour fusionner des GCodes pour CNC 3018
Cool: Base64 Compression Tool --- des fichiers dans vos scripts
Avatar du membre
Anthony
Niveau 7
Niveau 7
Messages : 324
Enregistré le : lun. 17 janv. 2011 14:08
Localisation : France
Status : Hors ligne

Re: [..] Récupérer le contenu de cmd.exe (pour newbies)

#27

Message 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
Je suis diagnostiqué pour trouble de la concentration, soyez indulgent
Merci à tous pour votre aide.
UDF: GuiStatusBarEx --- 2025/03/17 --- Une StatusBar complète, rapide et simple
Code: Code-Texte fusion --- Une GUI pour fusionner des GCodes pour CNC 3018
Cool: Base64 Compression Tool --- des fichiers dans vos scripts
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2130
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: [..] Récupérer le contenu de cmd.exe (pour newbies)

#28

Message 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.
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Avatar du membre
Anthony
Niveau 7
Niveau 7
Messages : 324
Enregistré le : lun. 17 janv. 2011 14:08
Localisation : France
Status : Hors ligne

Re: [..] Récupérer le contenu de cmd.exe (pour newbies)

#29

Message 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:
Je suis diagnostiqué pour trouble de la concentration, soyez indulgent
Merci à tous pour votre aide.
UDF: GuiStatusBarEx --- 2025/03/17 --- Une StatusBar complète, rapide et simple
Code: Code-Texte fusion --- Une GUI pour fusionner des GCodes pour CNC 3018
Cool: Base64 Compression Tool --- des fichiers dans vos scripts
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2130
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: [..] Récupérer le contenu de cmd.exe (pour newbies)

#30

Message par TommyDDR »

doublez vos \ -> \\
En C/C++ :
\ = caractère d'échappement
pour afficher un \ il faut échapper l'échappement (^^) -> \\
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Avatar du membre
Anthony
Niveau 7
Niveau 7
Messages : 324
Enregistré le : lun. 17 janv. 2011 14:08
Localisation : France
Status : Hors ligne

Re: [..] Récupérer le contenu de cmd.exe (pour newbies)

#31

Message par Anthony »

OK J'essayerai çà, merci je part au boulot :P :shock:
Je suis diagnostiqué pour trouble de la concentration, soyez indulgent
Merci à tous pour votre aide.
UDF: GuiStatusBarEx --- 2025/03/17 --- Une StatusBar complète, rapide et simple
Code: Code-Texte fusion --- Une GUI pour fusionner des GCodes pour CNC 3018
Cool: Base64 Compression Tool --- des fichiers dans vos scripts
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2130
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: [..] Récupérer le contenu de cmd.exe (pour newbies)

#32

Message par TommyDDR »

Posté: Ven Jan 28, 2011 5:01 am
Bon courage.
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Avatar du membre
Anthony
Niveau 7
Niveau 7
Messages : 324
Enregistré le : lun. 17 janv. 2011 14:08
Localisation : France
Status : Hors ligne

Re: [..] Récupérer le contenu de cmd.exe (pour newbies)

#33

Message 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.
Je suis diagnostiqué pour trouble de la concentration, soyez indulgent
Merci à tous pour votre aide.
UDF: GuiStatusBarEx --- 2025/03/17 --- Une StatusBar complète, rapide et simple
Code: Code-Texte fusion --- Une GUI pour fusionner des GCodes pour CNC 3018
Cool: Base64 Compression Tool --- des fichiers dans vos scripts
Avatar du membre
zeshrek
Niveau 10
Niveau 10
Messages : 984
Enregistré le : mer. 17 nov. 2010 09:31
Localisation : Sur ma chaise
Status : Hors ligne

Re: [..] Récupérer le contenu de cmd.exe (pour newbies)

#34

Message 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 ;)
Si vis pacem para bellum
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2130
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: [..] Récupérer le contenu de cmd.exe (pour newbies)

#35

Message par TommyDDR »

Code : Tout sélectionner

AutoIt3 Limits/defaults

AutoIt3        limits    Value Description 
MAX_LINESIZE   4095      Maximum size for a line of script.
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Récupérer le contenu de cmd.exe (pour newbies)

#36

Message 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. ;)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
zeshrek
Niveau 10
Niveau 10
Messages : 984
Enregistré le : mer. 17 nov. 2010 09:31
Localisation : Sur ma chaise
Status : Hors ligne

Re: [..] Récupérer le contenu de cmd.exe (pour newbies)

#37

Message 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 ?
Si vis pacem para bellum
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Récupérer le contenu de cmd.exe (pour newbies)

#38

Message 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:
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
Anthony
Niveau 7
Niveau 7
Messages : 324
Enregistré le : lun. 17 janv. 2011 14:08
Localisation : France
Status : Hors ligne

Re: [..] Récupérer le contenu de cmd.exe (pour newbies)

#39

Message 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
Je suis diagnostiqué pour trouble de la concentration, soyez indulgent
Merci à tous pour votre aide.
UDF: GuiStatusBarEx --- 2025/03/17 --- Une StatusBar complète, rapide et simple
Code: Code-Texte fusion --- Une GUI pour fusionner des GCodes pour CNC 3018
Cool: Base64 Compression Tool --- des fichiers dans vos scripts
Avatar du membre
Anthony
Niveau 7
Niveau 7
Messages : 324
Enregistré le : lun. 17 janv. 2011 14:08
Localisation : France
Status : Hors ligne

Re: [..] Récupérer le contenu de cmd.exe (pour newbies)

#40

Message 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
Je suis diagnostiqué pour trouble de la concentration, soyez indulgent
Merci à tous pour votre aide.
UDF: GuiStatusBarEx --- 2025/03/17 --- Une StatusBar complète, rapide et simple
Code: Code-Texte fusion --- Une GUI pour fusionner des GCodes pour CNC 3018
Cool: Base64 Compression Tool --- des fichiers dans vos scripts
Répondre