2011-10-17 74 views
2

是否有可能嵌入您的应用程序窗口内系统的命令行吧?在窗口内嵌入命令行?

我希望能够有命令行承担我的C++应用程序,和我的应用程序采取上述空间的底部一定的空间。理想情况下,它应该可以在Mac,Linux和Windows上运行,但对于初学者来说,Windows是我开发它的主要目标。

+0

你说的“需要一些空间”是什么意思?你想在你的窗口上显示命令行吗?或者你想嵌入可执行文件吗?如果你想将它嵌入到可执行文件中,它应该是哪个命令行?最后一次调用? – RedX

+0

我想在窗口内显示命令行,并在用户移动窗口时在窗口内移动。我希望它能正常工作,所以它只是嵌入在那里。嵌入可执行文件,或者以某种方式渲染/放入系统cmd。 – Tower

+0

看到tenfours的答案,它是一个GUI应用程序或控制台应用程序? – RedX

回答

1

在Windows中,您可以使用一些WinAPI函数(如ShellExecuteCreateProcess(还有其他一些我不记得的东西))来实现。您从GUI获取命令字符串,将它传递给这些WinAPI函数之一,然后将输出发送回您的GUI。

你想在多个平台上做到这一点,所以我建议制作一个通用模块(函数的类或名称空间,无论你最适合),允许使用操作系统终端不知道实际的下层操作系统。然后。当你想将应用程序移植到另一个操作系统时,只需更改此模块的实现。

注:(?有)升压正在开发一个库,由运行shell命令更容易,Boost.Process。但目前它的版本为0.4,并且自2010年10月4日以来尚未更新(即使其状态仍“持续”)。

+0

这个工作是否可以让交互式命令行工作?例如,考虑Linux less或者Git的log命令,它们有交互作用。 – Tower

1

谈到针对Windows,Windows控制台窗口是“特殊”,因为它得到特殊待遇,比系统上的任何其他窗口不同。您不会成功操纵它以供您自己使用。举一个很好的例子,尝试在控制台窗口上使用Spy ++。

注意与AllocConsole创建的窗口不是一个命令行解释器,它只是一个控制台窗口。

你应该实现自己的控制台窗口,并尽可能解释命令我能想到的几个选项取决于你所期望的,探索的行为,明智和复杂明智:

  1. 委托命令到一个隐藏的cmd.exe
  2. 自己解释命令
  3. 有可能是命令行解释的开源解决方案。
+0

代表团是否可以工作,以便交互式命令行也可以工作。例如,考虑Linux less或者Git的log命令,它们有交互作用。 – Tower

+1

是的,它需要一点工作。子进程('less'/etc)使用标准输入句柄'stdin','stdout'和'stderr'。您需要使用控制台I/O重定向来处理这些句柄,方法是将您自己的句柄传递给'CreateProcess'。有很多这方面的文章和关于SO的问题。以下是一个:http://www.halcyon.com/~ast/dload/guicon.htm – tenfour