我有两个用C++开发的独立控制台应用程序。我被要求为他们开发一个GUI。在这个GUI中,我收集了启动这些应用程序所需的一些参数。任何人都可以将控制台应用程序与此GUI集成在一起?是否有可能从GUI启动应用程序并没有看到控制台?应用程序在控制台中写入的内容是否可以重定向到日志文件?将GUI集成到控制台应用程序
在此先感谢。
我有两个用C++开发的独立控制台应用程序。我被要求为他们开发一个GUI。在这个GUI中,我收集了启动这些应用程序所需的一些参数。任何人都可以将控制台应用程序与此GUI集成在一起?是否有可能从GUI启动应用程序并没有看到控制台?应用程序在控制台中写入的内容是否可以重定向到日志文件?将GUI集成到控制台应用程序
在此先感谢。
要将GUI从命令行工具中分离出来,您需要用GUI调用提供正确参数的现有程序。您可以使用CreateProcess() API功能redirecting its output to a filehandle。该呼叫将收到STARTUPINFO结构,您可以在其中指定是否显示该命令的窗口。
查看链接的例子,一个完整的创建过程示例可以找到here。
这是纯粹的Windows API处理方式。
如果您正在进行C++/.NET开发,通过System.Diagnostics.Process可以更轻松地完成任务。
如果你可以选择任何语言来做到这一点,我一定会采用.NET方式(甚至将语言改为C#),这几乎是微不足道的(因为它本身管理所有的API调用,而且你有一个理智的接口)
你也可以通过shell重定向输出,但这是相当不灵活和容易出错的IMO。
看看Expect。不同的实现可用,并将链接到GUI库。
Expect旨在连接到CLI并与它们交互(提供输入,读取输出)。根据选择的实现(有Perl/Java/Python以及原始的Tcl),您可以使用相应的GUI工具包(例如Swing to Java)。
从GUI开始:
1)尝试提取控制台应用程序,它是纯逻辑的部分,和什么都没有做与屏幕上显示的东西。丢弃显示控制台内部数据的部分。
您可以使用GUI工具包,例如Qt,该工具包非常易于安装和使用。
然后
2)如果你想要写的东西到一个日志文件的应用程序,那么有两件事情可以做:
一)与启动程序将会将STDOUT重定向到文件的参数,例如:
./MyProgram > logfile.txt
b)只需打开一个文件并通过修改打印代码从应用程序中写入。
我希望这会有所帮助。
非常有用......我还没有想过“>”thingy。其中一个应用程序是由我编写的,它可以很容易地提取逻辑部分,但另一个是一个非常大的和修改的应用程序...这可能会很棘手......谢谢! – deb 2009-07-23 11:09:33
我说你有两个明确的选择:
第二个选项通常更简单,更清晰,但如果控制台应用程序参数语法更改可能会“不同步”。
看看Tcl/Tk.它是专门为改造命令行C程序的脚本而设计的,并且有一个C API,使得它非常简单。 作为奖励,您还可以获得程序的脚本功能。有几种方式支持这种类型的集成:
将Tcl解释器链接到程序中。有一个直接的API可以将Tcl数据结构转换为argv
类型char **
结构。这使您可以调用程序并使用命令行参数。
为C/C++程序生成管道并通过管道与管道交互。
使用Tcl脚本的命令参数生成程序。
其他更复杂的RPC构造(但你可能不需要这些)。
Tcl非常便携,可以在包括Windows在内的多种平台上运行。 Tcl还带有一个易于编程的GUI工具包Tk。现代版本支持主题引擎,为它们提供原生的外观和感觉,所以你可以使Tk应用看起来非常接近本地窗口。
This posting讨论了使用Tcl/Tk进行某种你在某种程度上要求的事情。
如果你发现有用的东西,你可以upvote的答案(这是这个想法)。 – 2009-07-23 11:14:21