★★★★★没有思路的问题--怎么和命令行程序交互?怎么样接收程序的返回值?

时间:2022-04-13 17:42:48
      我想升级一个程序。这个程序是别人开发的,我只是想将这个程序的操作改变一下(这个程序原来只有命令行的模式)。
      
      这个程序我现在还没有源程序,只有可执行程序。

      进入程序后,就进入了程序命令行(象FTP似的:ftp>...。这个软件是:hts>...的命令行提示符),命令有好多个,还带有参数。命令的返回值是 字符串 或是  表格(行、列都不定)。

      我想实现的是提供一个可视化的操作界面,将输入、输出都在可视化界面内进行。可以说我这个程序是一个外壳程序,我不知道怎么和这样的程序交互?怎么样接收程序的返回值?

20 个解决方案

#1


关注!

#2


用ShellExecute,具体你看看msdn

#3


关注

#4


用反编译工具得到它的汇编码,然后将JMP改到你的程序

#5


关注

#6


有没有高手帮帮忙?

#7


用ShellExecute函数,调用参数是比较好办的,现在关键是怎样得到他们的返回参数,
返回的具体有哪些类的参数呢?

#8


你的问题很cool,但我还不太明白。那个console程序的返回值是一个退出码,即main()返回的东西,还是它大段大段的输出?如果是前者则简单多了,如果是后者则很难,你恐怕要出高分多吸引点人来关注了。500分不多。

#9


如果他的程序中用了stdin和stdout,你可以考虑用管道来实现你的要求。
将你的程序中的控制命令通过管道传递给console程序,输出也通过管道传输回来,
返回给你的界面。该方法可以试一试。

#10


我给高分300,希望这么做不会伤害高手大虾的自尊心

#11


1.把你自己的可视化程序作为主程序,控制台程序作为一个其的一个系统调用执行:
  system("hts ....");
2.将控制台程序的输出重定向到一个文本文件
  system("hts para > test.txt");
3.用你自己的可视化程序分析文本文件并做相应输出

#12


不过这样做的缺点是在你的程序system调用hts时,会跳出一个控制台窗口,你可设置MS_DOS属性为最小化。

二。你也可用CREATEPROCESS

#13


这个问题以前有人问过我,当时要升级的程序是DOS的集成电路版图设计软件,我当时的回答就是不可能。
不过象你这种纯字符交互的,可能有办法,刚才在MSDN里翻了翻,找到一个东西,关于控制台程序I/O重定向的,主题:"How to Spawn a Console App and Redirect Standard Handles"

#14


给你一个思路,调用CreateProcess,然后将你要执行的程序的输入和输出流重定项

#15


大虾们说的好,能不能具体一点?

#16


简单,这是输入出重定向问题,msdn里有例子:

HOWTO: Spawn Console Processes with Redirected Standard Handles

#17


winmain()  函数的第3个参数即可交互命令行

#18


是不是研究一下Win32 console API? 如,
ReadConsoleOutput()

#19


我有delphi的例子
原理是createprocess + 重定向I/O

#20


You can use the API "ShellExecute" or "ShellExecuteEx". If you don't its argv that you can find it at MSDN.

Try to do, and you will reslove it easily.

#1


关注!

#2


用ShellExecute,具体你看看msdn

#3


关注

#4


用反编译工具得到它的汇编码,然后将JMP改到你的程序

#5


关注

#6


有没有高手帮帮忙?

#7


用ShellExecute函数,调用参数是比较好办的,现在关键是怎样得到他们的返回参数,
返回的具体有哪些类的参数呢?

#8


你的问题很cool,但我还不太明白。那个console程序的返回值是一个退出码,即main()返回的东西,还是它大段大段的输出?如果是前者则简单多了,如果是后者则很难,你恐怕要出高分多吸引点人来关注了。500分不多。

#9


如果他的程序中用了stdin和stdout,你可以考虑用管道来实现你的要求。
将你的程序中的控制命令通过管道传递给console程序,输出也通过管道传输回来,
返回给你的界面。该方法可以试一试。

#10


我给高分300,希望这么做不会伤害高手大虾的自尊心

#11


1.把你自己的可视化程序作为主程序,控制台程序作为一个其的一个系统调用执行:
  system("hts ....");
2.将控制台程序的输出重定向到一个文本文件
  system("hts para > test.txt");
3.用你自己的可视化程序分析文本文件并做相应输出

#12


不过这样做的缺点是在你的程序system调用hts时,会跳出一个控制台窗口,你可设置MS_DOS属性为最小化。

二。你也可用CREATEPROCESS

#13


这个问题以前有人问过我,当时要升级的程序是DOS的集成电路版图设计软件,我当时的回答就是不可能。
不过象你这种纯字符交互的,可能有办法,刚才在MSDN里翻了翻,找到一个东西,关于控制台程序I/O重定向的,主题:"How to Spawn a Console App and Redirect Standard Handles"

#14


给你一个思路,调用CreateProcess,然后将你要执行的程序的输入和输出流重定项

#15


大虾们说的好,能不能具体一点?

#16


简单,这是输入出重定向问题,msdn里有例子:

HOWTO: Spawn Console Processes with Redirected Standard Handles

#17


winmain()  函数的第3个参数即可交互命令行

#18


是不是研究一下Win32 console API? 如,
ReadConsoleOutput()

#19


我有delphi的例子
原理是createprocess + 重定向I/O

#20


You can use the API "ShellExecute" or "ShellExecuteEx". If you don't its argv that you can find it at MSDN.

Try to do, and you will reslove it easily.

#21