getting input from another program
BlitzMax Forums/BlitzMax Programming/getting input from another program
| ||
I have some working code to start and control an external player program, but besides sending commands like pause, mute, seek and so on, I would like to receive input from it as well, such as position, lengths and so on. The following code is something I put together by taking out some of the code from my control program. Its not complete, but it should demonstrate where my problem is and what I am after. Type TPlayer Global pipe:TPipeStream Field process:TProcess Field stream:TStream Function createPlayer:TPlayer(hwnd:Long) Local this:TPlayer=New TPlayer Local cmd:String=PlayerPath+" dvd://1 -dvd-device "+VirtDrivePath+" -slave -colorkey 0x0A0A0A -vf scale="+scrX+":"+scrY+" -noaspect -wid "+hwnd this.process=TProcess.Create(cmd,0) this.stream=OpenStream(cmd) Return this End Function Method Mute() pipe=process.pipe pipe.WriteLine( "mute"+Chr(10) ) ' MUTE End Method Method Seek(ff:Int) pipe=process.pipe pipe.WriteLine( "seek "+ff+Chr(10) ) ' FORWARD ff SECONDS End Method End Type Rem mute [value] Toggle sound output muting or set it to [value] when [value] >= 0 (1 == on, 0 == off). seek <value> [type] Seek to some place in the movie. 0 is a relative seek of +/- <value> seconds (default). 1 is a seek to <value> % in the movie. 2 is a seek to an absolute position of <value> seconds. get_time_length Print out the length of the current file in seconds. get_time_pos Print out the current position in the file in seconds, as float. EndRem As you can see, if I need to send a command to the external player, I use the WriteLine command of the process module. This works just fine. But if you look at the text between the Rem/EndRem statements, you will see what the documentation tells me about getting output from the player. And this is where I am stuck. I have no idea how I would go about getting this output into my program. Does anyone have any ideas how to get the values of get_time_length and get_time_pos? Here is a link to the complete documentation text: http://www.mplayerhq.hu/DOCS/tech/slave.txt |
| ||
Method ReadLine$() 'nonblocking - returns empty string if no data available yourString = pipe.ReadLine$() send your command first via pipe.WriteLine and get the result with pipe.ReadLine imagine it that your pipe has two tubes, one pointing to stdin and one to stdout |
| ||
I had tried using ReadLine$() but for some reason unknown not in connection with the WriteLine$(), but just testing a bit, it seem to be in the right direction. Thanks. |