Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为dos实用程序应用程序编写GUI delphi包装器_Delphi_Dos_Wrapper_Delphi Xe3 - Fatal编程技术网

为dos实用程序应用程序编写GUI delphi包装器

为dos实用程序应用程序编写GUI delphi包装器,delphi,dos,wrapper,delphi-xe3,Delphi,Dos,Wrapper,Delphi Xe3,我正在尝试为dos实用程序创建GUI包装应用程序。 在控制台中执行dos实用程序应用程序(dosapp.exe)时,如下所示: ------------------------- WELCOME ------------------------ What do you want to do? 1- Type 1 ,For Enter System 2- Type 2 ,Set Properties 3- TYpe 3, Exit Enter Action: 在我的delphi xe3应用程序中

我正在尝试为dos实用程序创建GUI包装应用程序。 在控制台中执行dos实用程序应用程序(dosapp.exe)时,如下所示:

-------------------------
WELCOME
------------------------
What do you want to do?
1- Type 1 ,For Enter System
2- Type 2 ,Set Properties
3- TYpe 3, Exit
Enter Action:
在我的delphi xe3应用程序中,我有三个按钮,每个按钮对应一个操作,我使用CreateProcess和管道运行dosapp.exe来捕获响应

我的问题是如何在控制台进程上为我的3个按钮脉动编写操作,例如,当用户单击按钮1时,我需要发送到运行创建的进程(dosapp.exe)writeline(“1”)并获得响应。 我看到了一些C#的例子,通过使用process类并调用
process.StandardInput.WriteLine(“1”)
可以轻松实现,但我不能在delphi上实现,任何想法或提示


编辑:根据David Heffman评论最终解决。

接受评论中提到的答案:


创建一个管道。确保它的读取端是可继承的。调用
CreateProcess
启动另一个进程。将管道的读取端作为新流程标准传递。写入到管道的写入端。如果您需要捕获标准输出,请反向执行相同操作。

接受评论中提到的答案:


创建一个管道。确保它的读取端是可继承的。调用
CreateProcess
启动另一个进程。将管道的读取端作为新流程标准传递。写入到管道的写入端。如果需要捕获标准输出,请反向执行相同操作。

这可能会有所帮助:创建一个管道。确保它的读取端是可继承的。调用CreateProcess以启动另一个进程。将管道的读取端作为新流程标准传递。写入到管道的写入端。如果您需要捕获标准输出,请反向操作。也许第一个也是最重要的问题(但这只是因为您说:“当我执行我的dos实用程序时…”)是问:如果是您的应用程序,您是否也有源代码(即使它使用不同的语言)?我之所以问这个问题,是因为包装代码(甚至通过DLL)比包装控制台用户界面要容易得多,也更健壮,因为控制台用户界面可能需要屏幕抓取来解释您得到的响应。我严重怀疑它不是DOS应用程序,而是本机Win32控制台应用程序。@CraingYoung,DosApplication它不是我创建的,所以我没有源代码。这可能会有帮助:创建一个管道。确保它的读取端是可继承的。调用CreateProcess以启动另一个进程。将管道的读取端作为新流程标准传递。写入到管道的写入端。如果您需要捕获标准输出,请反向操作。也许第一个也是最重要的问题(但这只是因为您说:“当我执行我的dos实用程序时…”)是问:如果是您的应用程序,您是否也有源代码(即使它使用不同的语言)?我之所以问这个问题,是因为包装代码(甚至通过DLL)比包装控制台用户界面要容易得多,也更健壮,因为控制台用户界面可能需要屏幕抓取来解释您得到的响应。我严重怀疑它不是DOS应用程序,而是本机Win32控制台应用程序。@CraingYoung,DosApplication它不是我创建的,所以我没有源代码。