2013-10-03 40 views
1

我有一個Windows應用程序應用程序,通常是僅GUI,並聲明WINDOWS子系統。它在啓動時不會打開控制檯窗口。有沒有辦法讓windows子系統應用程序提供可選的控制檯輸出?

唉,我想提供額外的控制檯輸出,當應用程序恰好從控制檯窗口(例如,從交互式cmd.exe)啓動。

有沒有辦法檢測一些進程「上鍊」是否有一個打開的控制檯,並附加到該控制檯?

我發現的最接近的是a way to explicitly open a console for a gui application,但是我不想打開一個控制檯,如果沒有的話。

+1

AttachConsole()。它總是工作不佳,它已被命令處理器使用。你會爭取輸入,命令處理器首先。只考慮AllocConsole()。 –

回答

3

乍一看好像AttachConsole()功能將讓你連接到你的父進程的控制檯:

AttachConsole(ATTACH_PARENT_PROCESS); 

如果進程實際上並沒有一個控制檯的功能將無法使用ERROR_INVALID_HANDLE。如果您的父進程不再存在,該函數也會失敗。如果失敗,您可以致電AllocConsole()創建您自己的。

我從來沒有試過這個,所以實際上並不知道它是否會起作用:)

+1

它的工作原理!好極了! *確切*我期待的。現在我將弄清楚如何在所述控制檯上獲得輸出。 –

+0

這不起作用。那麼,你一定可以連接並獲得輸出到控制檯上。所有你需要做的就是'printf','cout'或其他。問題是您現在有兩個進程連接到控制檯。他們兩人都可以寫,這使得一團糟。父進程不會等待孩子,所以如果父母退出,那麼控制檯會發生什麼?這個問題已經被問過太多次了。它永遠不會結束。 –

+0

@DavidHeffernan:根據文檔,「控制檯在最後一個連接到它的進程終止或調用FreeConsole時關閉」。 –

相關問題