Windows console OEM unicode output
Publié : ven. 12/mai/2017 10:16
Lire la sortie Stdout, en conservant les accents, depuis cmd.exe est un vrai casse tête, pour ceux qui ont éssayé, j'en fais partie
Donc Je pense qu'il est bon de partager la solution de fryquez, ici.

Donc Je pense qu'il est bon de partager la solution de fryquez, ici.
Code : Tout sélectionner
prog$ = GetEnvironmentVariable("COMSPEC") ;cmd.exe
dosbox = RunProgram(prog$, "", "", #PB_Program_Open|#PB_Program_Read|#PB_Program_Write|#PB_Program_Hide|#PB_Program_Ascii)
If dosbox
OpenWindow(0,0,0,400,500,"Results from DosBox",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
StartDrawing(WindowOutput(0))
DrawText(65,200, "Pinging now, Stand by for results...", #Black, GetSysColor_(#COLOR_BTNFACE))
StopDrawing()
NewList results.s()
WriteProgramStringN(dosbox, "ping google.com", #PB_Ascii)
WriteProgramData(dosbox, #PB_Program_Eof, 0)
While ProgramRunning(dosbox)
If AvailableProgramOutput(dosbox)
AddElement(results())
sOEM_in_unicode.s = ReadProgramString(dosbox, #PB_Ascii)
iByteLength = Len(sOEM_in_unicode) + 2
sOem_in_Ascii.s = Space(iByteLength)
PokeS(@sOem_in_Ascii, sOEM_in_unicode, -1, #PB_Ascii)
sUnicode.s = Space(iByteLength)
OemToChar_(@sOem_in_Ascii, @sUnicode)
results() = sUnicode
Else
Delay(1)
EndIf
Wend
AddElement(results())
AddElement(results())
results() = "Program finished with exit code = " + Str(ProgramExitCode(dosbox))
CloseProgram(dosbox)
ListViewGadget(0,0,0,400,500)
ForEach results()
AddGadgetItem(0, -1, results())
Next
Repeat:Until WaitWindowEvent()=#PB_Event_CloseWindow
Else
MessageRequester("OOPS!", "Can't find " + prog$ )
EndIf