Unicode ReadProgramData,ReadProgramString

Anfängerfragen zum Programmieren mit PureBasic.
kevv
Beiträge: 31
Registriert: 28.11.2010 15:52

Unicode ReadProgramData,ReadProgramString

Beitrag von kevv »

Hallo,
warum läuft der folgende code nicht im Unicode modus ???

Code: Alles auswählen

Define *CMDBuffer = AllocateMemory(5000)


ProgramID = RunProgram("cmd", "", "", #PB_Program_Open | #PB_Program_Read | #PB_Program_Write | #PB_Program_Error |#PB_Program_Hide)
Delay(500)

WriteProgramStringN(ProgramID, "dir C:\")
Delay(1000)


Repeat
    bytes.i= AvailableProgramOutput(ProgramID)
    If bytes
      
      ;Debug ReadProgramString(ProgramID)
      
     ReadProgramData(ProgramID, *CMDBuffer, bytes)
     Debug PeekS(*CMDBuffer,bytes,#PB_UTF8)
     
     
    EndIf
    Delay(200)

ForEver 
Benutzeravatar
_JON_
Beiträge: 389
Registriert: 30.03.2010 15:24

Re: Unicode ReadProgramData,ReadProgramString

Beitrag von _JON_ »

Das wird wohl dran liegen, dass WriteProgramStringN() ein UNICODE string sendet.
Aber cmd.exe braucht einen ASCII string.
PureBasic 5.46 LTS (Windows x86/x64) | windows 10 x64 Oktober failure
Benutzeravatar
_JON_
Beiträge: 389
Registriert: 30.03.2010 15:24

Re: Unicode ReadProgramData,ReadProgramString

Beitrag von _JON_ »

hier mal 2 Möglichkeiten das in Unicode modus zu machen

Code: Alles auswählen

ProgramID = RunProgram("cmd", "/c dir C:\", "", #PB_Program_Open | #PB_Program_Read | #PB_Program_Write | #PB_Program_Error |#PB_Program_Hide)

While ProgramRunning(ProgramID)
  bytes.i= AvailableProgramOutput(ProgramID)
  If bytes
    *CMDBuffer = AllocateMemory(bytes)
    ReadProgramData(ProgramID, *CMDBuffer, bytes)
    Debug PeekS(*CMDBuffer, bytes, #PB_Ascii)
    FreeMemory(*CMDBuffer)
  EndIf
  Delay(200)
Wend
Oder gleich cmd.exe Unicode ausspucken lassen:

Code: Alles auswählen

ProgramID = RunProgram("cmd", "/u /c dir C:\", "", #PB_Program_Open | #PB_Program_Read | #PB_Program_Write | #PB_Program_Error |#PB_Program_Hide)

While ProgramRunning(ProgramID)
  bytes.i= AvailableProgramOutput(ProgramID)
  If bytes
    *CMDBuffer = AllocateMemory(bytes)
    ReadProgramData(ProgramID, *CMDBuffer, bytes)
    Debug PeekS(*CMDBuffer, bytes, #PB_Unicode)
    FreeMemory(*CMDBuffer)
  EndIf
  Delay(200)
Wend
PureBasic 5.46 LTS (Windows x86/x64) | windows 10 x64 Oktober failure
Antworten