我有兩個用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