Voici une console "simili-DOS" dans une fonction.
► Afficher le texte
Code : Tout sélectionner
#include <Constants.au3>
#include <GUIConstantsEx.au3>
#Include <GuiEdit.au3>
Global $GlobalPVersion = "0.2"
console()
Func console($fichier = "", $reptravail = "")
Local $cgui, $bt1, $bt2, $bt3, $font, $cout, $AccelKeys
$cgui = GUICreate("Console", 800, 600)
$bt0 = GUICtrlCreateButton(".", 0, 0, 4, 25)
$bt1 = GUICtrlCreateButton("Exit", 0, 0, 80, 25)
$bt2 = GUICtrlCreateButton("Test", 100, 0, 80, 25)
$bt3 = GUICtrlCreateButton("Clear", 200, 0, 80, 25)
$font = "Courier New"
$font = "Lucida Console"
GUISetFont(11, 300, 0, $font)
$cout = GUICtrlCreateEdit("", 0, 25, 800, 600 - 25)
GUICtrlSetColor(-1, 0xFFFFFF)
GUICtrlSetBkColor(-1, 0x000044)
_GUICtrlEdit_SetLimitText ($cout, 256000)
Dim $AccelKeys[1][2] = [ ["{ENTER}", $bt0] ]
GUISetAccelerators ($AccelKeys)
GUICtrlSetState($cout, $GUI_FOCUS)
GUISetState(@SW_SHOW)
If $reptravail = "" Then
$reptravail = @WorkingDir
EndIf
$pid = Run("cmd /k" & $fichier, $reptravail, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD + $STDIN_CHILD)
StdinWrite($pid, "chcp 1252" & @CRLF)
Sleep(24)
$flagfinlecture = 0
$delai = 1000 / 25 * 0.250 ; en secondes
$compteur = $delai
While 1
$Msg = GUIGetMsg(1)
Switch $Msg[0]
Case $GUI_EVENT_CLOSE
ExitLoop
Case $bt0
GUICtrlSetState($cout, $GUI_FOCUS)
$numderlig = _GUICtrlEdit_GetLineCount ($cout)
$derligne = ""
While $derligne = "" And $numderlig > 0
$derligne = _GUICtrlEdit_GetLine ($cout, $numderlig)
$numderlig -= 1
WEnd
$idx = StringInStr($derligne, ">")
If $idx > 0 Then
$derligne = StringMid($derligne, $idx + 1)
EndIf
If StringLen($derligne) > 0 Then
Switch StringUpper($derligne)
Case "CLS"
_GUICtrlEdit_SetText ($cout, "")
_GUICtrlEdit_EmptyUndoBuffer ($cout)
$compteur = $delai
ContinueLoop
Case "EXIT"
ExitLoop
EndSwitch
$st = "{BACKSPACE " & String(StringLen($derligne)) & "}"
Send($st)
Sleep(12)
StdinWrite($pid, $derligne & @CRLF)
$compteur = $delai
EndIf
Case $bt1
ExitLoop
Case $bt2
GUICtrlSetState($cout, $GUI_FOCUS)
Sleep(24)
StdinWrite($pid, "chcp 1252" & @CRLF)
Sleep(24)
StdinWrite($pid, "dir %WINDIR%\*.exe" & @CRLF)
Sleep(24)
$compteur = 999999
Case $bt3
_GUICtrlEdit_SetText ($cout, "")
_GUICtrlEdit_EmptyUndoBuffer ($cout)
Sleep(25)
GUICtrlSetState($cout, $GUI_FOCUS)
Sleep(24)
StdinWrite($pid, "chcp 1252" & @CRLF)
$compteur = 999999
EndSwitch
$lout = StdoutRead($pid, False)
If @error Then
;pass
Else
If $lout <> "" Then
$derligne = $lout
_GUICtrlEdit_AppendText ($cout, $lout)
If StringRight($lout, 1) <> ">" Then
;$compteur=$delai
EndIf
;ContinueLoop
EndIf
EndIf
$lerr = StderrRead($pid, False)
If @error Then
;pass
Else
If $lerr <> "" Then
_GUICtrlEdit_AppendText ($cout, $lerr)
EndIf
EndIf
$compteur -= 1
If $compteur < 1 Then
StdinWrite($pid, " " & @CRLF)
$compteur = 999999
EndIf
Sleep(25)
WEnd
GUIDelete($cgui)
Sleep(125)
EndFunc ;==>console