Page 1 sur 1

[R] ConsoleRead; @error = 1

Posté : lun. 26 oct. 2009 14:52
par Yoyo86220
Bonjour a tous,

J'ai un problème avec la commande ConsoleRead...

Code : Tout sélectionner

#AutoIt3Wrapper_Change2CUI=Y

ConsoleWrite("Please enter data:")
Sleep(6000)
$console = ConsoleRead()
$buttoncode = MsgBox(2, "From console I read", $console)
If $buttoncode = 3 Then
    $button = "abort"
ElseIf $buttoncode = 4 Then
    $button = "retry"
ElseIf $buttoncode = 5 Then
    $button = "ignore"
EndIf
ConsoleWrite(@CRLF & "The " & $button & " button was pressed in the Msgbox." & @CRLF)
voici mon scripte... une fois compilé je ne peux rien taper dans la console... quand j'écris sur mon clavier sa n'écrit pas dans la console :s voilà où est le probleme merci de votre aide!

Re: [..] ConsoleRead; @error = 1

Posté : lun. 26 oct. 2009 15:23
par sylvanie
il y a deux causes :

la première et sirecte, est que consoleread n'attend pas qu'on tappe, elle renvoie de suite.
Il faut donc l'inclure dans un while et sortir en cas d'erreur ou de retours chariot (sinon on ne sort pas ...).
cf cette modification qui marchera sous Scite ou un autre editeur gérant une console:
► Afficher le texte
2eme point : cmd.exe n'a pas un mode console aussi coopératif que Scite. Pour le stdout, c'est OK, mais pour le stdin il faut passer par l'astuce donnée par le fichier d'aide :
echo Hello! | ConsoleRead.exe
En supposant que l'exe compiler s'appelle "ConsoleRead.exe" biensûr, et là je pense que c'est le cas du cmd que tu souhaites ...

Re: [..] ConsoleRead; @error = 1

Posté : lun. 26 oct. 2009 18:40
par Yoyo86220
mon probleme est le suivant c'est que @error est tjrs égale à 1 dans le script que vous venez de faire donc il sort toujours de la boucle et je ne peux tjrs rien écrire dans la console :( je comprends pas :x

dès que j'exécute le script la console s'ouvre mais le MSG box "From console I read" aussi :s et j'ai vérifier il détecte une erreur c'est pourquoi il quitte la boucle... :'( d'où vient mon problème?

Re: [..] ConsoleRead; @error = 1

Posté : lun. 26 oct. 2009 20:01
par sylvanie
L'éxécution est faite depuis quelle application ?
- Scite
- Pspad
- cmd.exe
- autre ?

Car généralement c'est un soucis de ratachement à la console de l'application hôte.
D'où la question

Re: [..] ConsoleRead; @error = 1

Posté : mar. 08 mars 2011 17:07
par Yoyo86220
(dsl pour ce vieux up) mais je n'ai jamais réussi à utilisé ConsoleRead() je sais pas comment voir quel système est utilisé (cmd; scite...)
merci de m'aider...

Re: [..] ConsoleRead; @error = 1

Posté : mar. 08 mars 2011 17:14
par sksbir
petite question bête : tu l'as compilé en mode console ?

Re: [..] ConsoleRead; @error = 1

Posté : mer. 09 mars 2011 12:53
par Yoyo86220
Bon
Puisque personne à l'aire d'avoir eu mon problème c'est que je dois faire une mauvaise manipulation...

voici les étapes:

Mon Script:
► Afficher le texte
Compilation du script en mode console...
► Afficher le texte
Exécution du script
► Afficher le texte
Je ne tape rien au clavier le script se lance et m'affiche directement ce message....
► Afficher le texte
OU EST MON ERREUR?

Re: [..] ConsoleRead; @error = 1

Posté : mer. 09 mars 2011 13:31
par zeshrek
On de fournit pas le code sous forme d'image. Outre le fait que cela lui fait prendre 10 fois plus de place que le texte, ca oblige ceux qui voudraient t'aider a se farcir la saisie du code.

Merci de rectifier au plus vite


Sinon, tu as pensé a mettre un msgbox ligne 6 plutot qu'un exitloop histoire de voir si y a pas une coquille d'entrée de jeu (j'ai pas testé, cf §1, c'est juste une idée qui me vient)

Re: [..] ConsoleRead; @error = 1

Posté : mer. 09 mars 2011 13:38
par GaRydelaMer
Même réponse, je vais pas me taper l'écriture de ton script.

Mais ligne 7 au lieu de ExitLoop, je mettrais ContinueLoop.

Re: [..] ConsoleRead; @error = 1

Posté : mer. 09 mars 2011 15:06
par zeshrek
bin a ce moment là si tu continue la boucle... autant pas faire le if et carrément supprimer cette ligne ou alors il faut faire un else?

Re: [..] ConsoleRead; @error = 1

Posté : mer. 09 mars 2011 15:17
par GaRydelaMer
Bin non c'est pour sauter les lignes vides et pas les ajouter dans la variable $Console &= $ConsoleTmp.

Re: [..] ConsoleRead; @error = 1

Posté : mer. 09 mars 2011 17:31
par Yoyo86220
Non mais comme je l'ai dis plus haut @error = 1 dès l'entrée dans le script... j'ai testé avec msgbox au lieu de exitloop à chaque tour de la boucle il me détecte une erreur le premier tour @error = 1 et tout les autres tours @error = 2...

PS: Le code était un peu plus haut...

Re: [..] ConsoleRead; @error = 1

Posté : mer. 09 mars 2011 19:57
par Yoyo86220
aucune solution?

Re: [..] ConsoleRead; @error = 1

Posté : jeu. 10 mars 2011 20:25
par Yoyo86220
Personne à eu ce problème avec cette fonction?

Re: [..] ConsoleRead; @error = 1

Posté : dim. 13 mars 2011 11:39
par Yoyo86220
UP

Re: [..] ConsoleRead; @error = 1

Posté : lun. 14 mars 2011 09:35
par sksbir
Bonjour

Essaye ton programme compilé en redirigeant l'entrée standard, tu verras que ça marche...
D:\tmp\test_consoleread.exe < d:\tmp\test_input.txt

Par ailleurs, quand on lance ton programme après modif ( ignorer les erreurs ) et sans rediriger l'entrée standard, on s'aperçoit que tout ce qu'on essaye de taper "ressort" quand on fait Ctrl+C.

En fait, c'est comme si l'entrée standard de ton programme n'était pas l'entrée standard de la console, sauf quand on la redirige.

Mon pronostic personnel est plutôt mauvais : consoleread ne semble pas fait pour fonctionner de façon interactive... ( mais ça n'engage que moi ).

Re: [..] ConsoleRead; @error = 1

Posté : lun. 14 mars 2011 18:32
par Yoyo86220
J'ai pas tout suivi comment rediriger l'entrée ?

pourquoi dans l'aide il propose se script? je trouve quand mm ça inutile de "montrer en exemple de quelque chose qui ne fonctionne pas..."

:?

Re: [..] ConsoleRead; @error = 1

Posté : lun. 14 mars 2011 21:27
par Tlem
En fait, ce qu'il faut comprendre, c'est ceci :
ConsoleRead

Remarks
ConsoleRead reads from the console standard input stream of the AutoIt script process, which is normally used by console applications to read input from a parent process.
Pour faire ce que vous cherchez à faire, c'est un petit peut plus compliqué que de lire avec ConsoleRead.

Voici un exemple concret :

Code : Tout sélectionner

#AutoIt3Wrapper_Change2CUI=y
#include <WinAPI.au3>

$sResponse = _ConsoleInput("Veuillez entrer du text : ")
ConsoleWrite("Vous avez entré : " & $sResponse & @CRLF)

Func _ConsoleInput($sPrompt)
    If Not @Compiled Then Return SetError(1, 0, 0) ; Not compiled

    ConsoleWrite($sPrompt)

    Local $tBuffer = DllStructCreate("char"), $nRead, $sRet = ""
    Local $hFile = _WinAPI_CreateFile("CON", 2, 2)

    While 1
        _WinAPI_ReadFile($hFile, DllStructGetPtr($tBuffer), 1, $nRead)
        If DllStructGetData($tBuffer, 1) = @CR Then ExitLoop
        If $nRead > 0 Then $sRet &= DllStructGetData($tBuffer, 1)
    WEnd

    _WinAPI_CloseHandle($hFile)
    Return $sRet
EndFunc
Source : http://www.autoitscript.com/forum/topic ... _p__761205

Re: [..] ConsoleRead; @error = 1

Posté : mar. 15 mars 2011 16:08
par Yoyo86220
Encore une fois une grand merci Tlem!