2011-10-17 109 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