2009-07-23 104 views
3

我有兩個用C++開發的獨立控制檯應用程序。我被要求爲他們開發一個GUI。在這個GUI中,我收集了啓動這些應用程序所需的一些參數。任何人都可以將控制檯應用程序與此GUI集成在一起?是否有可能從GUI啓動應用程序並沒有看到控制檯?應用程序在控制檯中寫入的內容是否可以重定向到日誌文件?將GUI集成到控制檯應用程序

在此先感謝。

+0

如果你發現有用的東西,你可以upvote的答案(這是這個想法)。 – 2009-07-23 11:14:21

回答

2

要將GUI從命令行工具中分離出來,您需要用GUI調用提供正確參數的現有程序。您可以使用CreateProcess() API功能redirecting its output to a filehandle。該呼叫將收到STARTUPINFO結構,您可以在其中指定是否顯示該命令的窗口。

查看鏈接的例子,一個完整的創建過程示例可以找到here

這是純粹的Windows API處理方式。

如果您正在進行C++/.NET開發,通過System.Diagnostics.Process可以更輕鬆地完成任務。

如果你可以選擇任何語言來做到這一點,我一定會採用.NET方式(甚至將語言改爲C#),這幾乎是微不足道的(因爲它本身管理所有的API調用,而且你有一個理智的接口)

你也可以通過shell重定向輸出,但這是相當不靈活和容易出錯的IMO。

0

看看Expect。不同的實現可用,並將鏈接到GUI庫。

Expect旨在連接到CLI並與它們交互(提供輸入,讀取輸出)。根據選擇的實現(有Perl/Java/Python以及原始的Tcl),您可以使用相應的GUI工具包(例如Swing to Java)。

+0

我忘記說我正在使用Windows XP。 – deb 2009-07-23 11:00:59

+0

不應該是一個問題。儘管該頁面涉及Unix/X11,但不同的平臺可以使用不同的實現。例如Java變體顯然將與平臺無關 – 2009-07-23 11:04:04

+0

我將嘗試從我開發的GUI中調用應用程序,但我也會看到Expect如何工作以防其他解決方案無法正常工作。再次感謝! – deb 2009-07-23 11:13:02

2

從GUI開始:

1)嘗試提取控制檯應用程序,它是純邏輯的部分,和什麼都沒有做與屏幕上顯示的東西。丟棄顯示控制檯內部數據的部分。

您可以使用GUI工具包,例如Qt,該工具包非常易於安裝和使用。


然後

2)如果你想要寫的東西到一個日誌文件的應用程序,那麼有兩件事情可以做:

一)與啓動程序將會將STDOUT重定向到文件的參數,例如:

./MyProgram > logfile.txt 

b)只需打開一個文件並通過修改打印代碼從應用程序中寫入。

我希望這會有所幫助。

+0

非常有用......我還沒有想過「>」thingy。其中一個應用程序是由我編寫的,它可以很容易地提取邏輯部分,但另一個是一個非常大的和修改的應用程序...這可能會很棘手......謝謝! – deb 2009-07-23 11:09:33

1

我說你有兩個明確的選擇:

  1. 擴展應用程序,並把它們連接到一個GUI,使得功能從GUI調用。
  2. 創建一個獨立應用程序(由其自身編譯,沒有來自控制檯應用程序的任何代碼依賴性)的GUI,在運行時調用(exec)控制檯應用程序,傳遞從窗體收集的參數或其提供的任何交互機制。

第二個選項通常更簡單,更清晰,但如果控制檯應用程序參數語法更改可能會「不同步」。

0

看看Tcl/Tk.它是專門爲改造命令行C程序的腳本而設計的,並且有一個C API,使得它非常簡單。 作爲獎勵,您還可以獲得程序的腳本功能。有幾種方式支持這種類型的集成:

  • 將Tcl解釋器鏈接到程序中。有一個直接的API可以將Tcl數據結構轉換爲argv類型char **結構。這使您可以調用程序並使用命令行參數。

  • 爲C/C++程序生成管道並通過管道與管道交互。

  • 使用Tcl腳本的命令參數生成程序。

  • 其他更復雜的RPC構造(但你可能不需要這些)。

Tcl非常便攜,可以在包括Windows在內的多種平臺上運行。 Tcl還帶有一個易於編程的GUI工具包Tk。現代版本支持主題引擎,爲它們提供原生的外觀和感覺,所以你可以使Tk應用看起來非常接近本地窗口。

This posting討論了使用Tcl/Tk進行某種你在某種程度上要求的事情。

相關問題