2011-06-21 42 views
1

這不是另一個「我需要在我的GUI應用程序中使用控制檯」,這已經經常討論。我的情況與此不同。Win GUI應用程序從控制檯啓動=>打印到控制檯不可能?

我有一個Windows GUI應用程序,從命令行運行。現在,如果您將錯誤的參數傳遞給此應用程序,我會而不是想要一個彈出窗口來顯示可能的開關,但我希望打印到產生我的進程的控制檯中。

我得到了那麼多,我可以打印到控制檯(調用AttachConsole(...)父進程),但問題是我的應用程序不是「阻塞」。只要我啓動它,命令提示符就會返回,並且所有輸出都會寫入此窗口(請參閱附加圖像以便說明)。

_

我打了一下週圍,創建一個控制檯應用程序,運行它,看那裏,「塊」,提示只能重新出現在應用程序終止後。將我的GUI應用程序切換到/ SUBSYSTEM:控制檯導致奇怪的錯誤(MSVCRTD.lib(crtexe.obj):錯誤LNK2019:函數「___tmainCRTStartup」中的無法解析的外部符號「_main」。)

我看到了管道方法「.exe」和MSDEV的「.com」文件方法,但我覺得它很可怕。有沒有辦法解決這個更漂亮?

+1

更改爲控制檯子系統聽起來像是正確的方式。儘管如此,您必須將主聲明更改爲與控制檯應用程序一致。除了那個AFAIK之外,你不能使用WinMain阻止它,因爲命令行正在啓動它。 –

+0

切換到控制檯子系統有其他副作用。如果從快捷方式而不是控制檯窗口啓動,它將創建一個新的控制檯,即使快捷方式提供了正確的參數。 – Jon

回答

1

也許編寫一個基於控制檯的包裝應用程序,檢查參數,打印錯誤信息在錯誤的參數,並調用/啓動實際的程序時,參數是正確的?

+0

這就是我試圖避免:(上面提到的MSDEV解決方案有確切的這樣一個「.com」文件包裝應用程序,這是在Windows控制檯的優先次序,所以當你鍵入「myapp」[返回],它將首先嚐試啓動「myapp.com」,然後是「myapp.exe」,但是這是一個獨立的應用程序,我不想分發多個文件。解決方案應該包含在一個單獨的應用程序中,以確保當有人忘記拖動時它不會中斷兩部分。 – Tom

2

這不是你可以通過修改你的應用程序來改變的行爲(除了像已經討論的那樣重新標記它)。命令解釋程序查看可執行文件標記的子系統,並決定是否等待應用程序相應終止。 If the executable is labelled as having a GUI, then the command interpreter doesn't wait for it to terminate.

在一些命令解釋器中,這是可配置的。例如,在JP Software's TCC/LE中,可以是configure the command interpreter to always wait for applications to terminate,甚至是GUI。但是,在Microsoft的CMD中,這不是可配置的行爲。微軟的答案是使用START command/WAIT選項。

再一次:這不是您的應用程序的行爲。除了作爲TUI程序的重新標記之外,還有沒有編程方式涉及你的代碼來改變這一點。

相關問題