RunProgram with #PB_Program_Hide not working as expected

Just starting out? Need help? Post your questions and find answers here.
dave@idea-tech.com
New User
New User
Posts: 6
Joined: Sat Mar 11, 2023 12:14 am

RunProgram with #PB_Program_Hide not working as expected

Post by dave@idea-tech.com »

Hi, I am writing a PB program to run and control WinSCP.

WinSCP.com will open WinSCP in console mode.

Here's my code:

Code: Select all

OpenConsole( "Control WinSCP",#PB_Ascii)

Delay(4000)

winscp_handle = RunProgram( "C:/Program Files (x86)/winscp/winscp.com ","","",#PB_Program_Open|#PB_Program_Read|#PB_Program_Write|#PB_Program_Ascii|#PB_Program_Hide  , 0  )
The Console "Control WinSCP" opens but 4 seconds later, the console title changes to "WinSCP" .

I was expecting to have full control of the "Control WinSCP" console and communicate with the hidden WinSCP program with WriteProgramString and ReadProgramString

What am I not understanding about consoles? Thanks!
Gérard
User
User
Posts: 48
Joined: Sat Oct 17, 2015 6:00 pm
Location: France
Contact:

Re: RunProgram with #PB_Program_Hide not working as expected

Post by Gérard »

Hello,
I tried to write few lines of code to understand the question
I don't see why Delay(4000) in your code.
You also need to prevent the console from closing.
Here is my test code

Code: Select all

EnableExplicit

Define console, winscp_handle, Event, string$

console=OpenConsole("Control WinSCP",#PB_Ascii)

#flags=#PB_Program_Open|#PB_Program_Read|#PB_Program_Write|#PB_Program_Ascii|#PB_Program_Hide

winscp_handle = RunProgram("winscp.com","","",#flags,console)

If console And winscp_handle
  If OpenWindow(0,0,0,100,100,#Empty$,#PB_Window_Invisible)
    PrintN("Winscp: help to displays help.")
    PrintN(#Empty$)
    WriteProgramStringN(winscp_handle,#Empty$,#PB_Ascii)
    Repeat
      Event=WaitWindowEvent(20)
      string$=Input()
      If string$<>#Empty$
        Select string$
          Case "exit" : Break
          Default
            WriteProgramStringN(winscp_handle,string$+#CRLF$,#PB_Ascii)
            While AvailableProgramOutput(winscp_handle)
              PrintN(ReadProgramString(winscp_handle,#PB_Ascii))
            Wend
        EndSelect
      EndIf
    ForEver
  EndIf
  CloseConsole()
EndIf
Help Remarks about ReadProgramString(winscp_handle,#PB_Ascii)

However, the function remains blocked indefinitely if the program requests the intervention of the user. For example, return a yes / no choice to the program to continue.
Gérard
■ Win10 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.00 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ cage sur le forum Français
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Gérard
User
User
Posts: 48
Joined: Sat Oct 17, 2015 6:00 pm
Location: France
Contact:

Re: RunProgram with #PB_Program_Hide not working as expected

Post by Gérard »

Hi,
Here is an example of controlling WinScp via console that works correctly:

Code: Select all

EnableExplicit

Global console, winscp_handle, Event, string$, N

console=OpenConsole("WinSCP Console",#PB_Ascii)

#flags=#PB_Program_Open|#PB_Program_Read|#PB_Program_Write|#PB_Program_Ascii|#PB_Program_Hide

;;; WinSCP.com and WinScp.exe are in the %PATH%
winscp_handle = RunProgram("winscp.com","","",#flags,console)

Structure Command
  Command$
EndStructure

Global *Parameters.Command, Thread

Procedure sendCommand(*Parameters.Command)
  Protected string$
  string$=*Parameters\Command$
  Debug "string="+string$
  WriteProgramStringN(winscp_handle,#CRLF$)
  WriteProgramStringN(winscp_handle,string$+#CRLF$)
  Delay(50)
  While AvailableProgramOutput(winscp_handle)
    PrintN(ReadProgramString(winscp_handle,#PB_Ascii))
  Wend
  ClearStructure(*Parameters, Command)
  FreeMemory(*Parameters)
  Debug "Command line completed"
  PrintN("Command line completed ("+string$+") - Enter exit to quit.")
EndProcedure

If console And winscp_handle
  ;;;EnableGraphicalConsole(#True)
  ConsoleCursor(1)
  ConsoleColor(15,0)
  If OpenWindow(0,0,0,100,100,#Empty$,#PB_Window_Invisible)
    PrintN(#Empty$)
    PrintN("Welcome to WinScp console.")
    PrintN(#Empty$)
    PrintN("winscp> Enter ? to displays help or exit to quit.")
    PrintN(#Empty$)
    WriteProgramStringN(winscp_handle,#Empty$)
    Print(ReadProgramString(winscp_handle,#PB_Ascii))
    Repeat
      Event=WaitWindowEvent(10)
      string$=Input()
      If string$<>#Empty$
        Select LCase(string$)
          Case "exit"
            Break
          Case "cls"
            EnableGraphicalConsole(#True)
            ClearConsole()
            EnableGraphicalConsole(#False)
            WriteProgramStringN(winscp_handle,#Empty$)
            Print(ReadProgramString(winscp_handle,#PB_Ascii))
            string$=#Empty$
          Case "?"
            string$="help"
          Default
            ;;;string$=#Empty$
        EndSelect
        If string$<>#Empty$
          *Parameters.Command = AllocateMemory(SizeOf(Command))
          *Parameters\Command$ = string$
          Thread = CreateThread(@sendCommand(), *Parameters)
          WaitThread(Thread, 1500)
          WriteProgramStringN(winscp_handle,#CRLF$+#CRLF$)
          Delay(50)
          Print(ReadProgramString(winscp_handle,#PB_Ascii))
        EndIf
      Else
        ;;;Delay(100)
        WriteProgramStringN(winscp_handle,#CRLF$)
        Print(ReadProgramString(winscp_handle,#PB_Ascii))
      EndIf
      string$=#Empty$
    ForEver
  EndIf
  CloseConsole()
EndIf
Gérard
■ Win10 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.00 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ cage sur le forum Français
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
dave@idea-tech.com
New User
New User
Posts: 6
Joined: Sat Mar 11, 2023 12:14 am

Re: RunProgram with #PB_Program_Hide not working as expected

Post by dave@idea-tech.com »

Thank You very much Gerard!

I will study this carefully.
Post Reply