Il est plus simple de recuperer la sortie console et de l'afficher dans une fenêtre comme ça:
(ça vient du forum)
Code : Tout sélectionner
;Rediriger l'invite de commande dans un gadget
Enumeration Font
#FontGlobal
EndEnumeration
Enumeration Window
#MainForm
EndEnumeration
Enumeration Gadget
#Result
EndEnumeration
Enumeration KeyBoard
#Up
#Down
EndEnumeration
Declare Start()
Declare RunCmd(Cmd.s)
Declare OnChange()
Declare OnKey()
Declare OnResize()
Start()
Procedure Start()
LoadFont(#FontGlobal, "", 11)
SetGadgetFont(#PB_Default, FontID(#FontGlobal))
If OpenWindow(#MainForm, 0, 0, 800, 600, "Terminal", #PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_SizeGadget)
EditorGadget(#Result, 5, 10, 790, 580)
SetGadgetColor(#Result, #PB_Gadget_BackColor, RGB(174, 191, 191))
SetActiveGadget(#Result)
AddKeyboardShortcut(#MainForm, #PB_Shortcut_Up, #Up)
AddKeyboardShortcut(#MainForm, #PB_Shortcut_Down, #Down)
BindEvent(#PB_Event_Menu, @OnKey(), #MainForm, #Up)
BindEvent(#PB_Event_Menu, @OnKey(), #MainForm, #Down)
BindEvent(#PB_Event_SizeWindow, @OnResize())
BindGadgetEvent(#Result, @OnChange(), #PB_EventType_Change)
Repeat : Until WaitWindowEvent(10) = #PB_Event_CloseWindow
EndIf
EndProcedure
Procedure RunCmd(Cmd.s)
Protected prg.i, Stdout.s, TagResult.b
Select LCase(cmd)
Case "cls"
ClearGadgetItems(#Result)
Case "exit"
End
Default
If LSet(Cmd, 3) = "cd "
SetCurrentDirectory(Trim(Mid(cmd, 3)))
AddGadgetItem(#Result, -1, "le dossier courrant est : " + GetCurrentDirectory())
ElseIf LCase(LSet(cmd, 5)) = "title"
SetWindowTitle(#MainForm, Trim(Mid(cmd, 6)))
Else
prg = RunProgram("cmd.exe", "/c " + Cmd, "", #PB_Program_Open|#PB_Program_Read|#PB_Program_Hide|#PB_Program_UTF8);
If prg
While ProgramRunning(prg)
If AvailableProgramOutput(prg)
Stdout = ReadProgramString(prg, #PB_UTF8)
AddGadgetItem(#Result, -1, Stdout)
If Stdout <> ""
TagResult = #True
EndIf
EndIf
Wend
CloseProgram(prg)
If FindString(Cmd, ">") Or FindString(LCase(Cmd), "del")
TagResult = #True
EndIf
If Not TagResult
AddGadgetItem(#Result, -1, "Erreur de commande : " + Cmd)
EndIf
EndIf
EndIf
AddGadgetItem(#Result, -1, "")
EndSelect
EndProcedure
Procedure OnChange()
Protected Buffer.s = GetGadgetItemText(#Result, CountGadgetItems(#Result)-1)
Static Cmd.s
If Buffer = "" And cmd <> ""
RunCmd(cmd)
EndIf
Cmd = Buffer
SetGadgetState(#Result, CountGadgetItems(#Result))
EndProcedure
Procedure OnKey()
Protected Index = CountGadgetItems(#Result)
SetGadgetState(#Result, Index)
EndProcedure
Procedure OnResize()
Protected Width = WindowWidth(#MainForm)
Protected Height= WindowHeight(#MainForm)
ResizeGadget(#Result, #PB_Ignore, #PB_Ignore, Width - 10, Height - 20)
EndProcedure
T'as plus qu'à taper help ou dir sous windows...
C'est dommage que "AltConsole" soit devenu payant parce qu'il est génial:
https://www.purebasic.fr/english/viewto ... ALtconsole
M.