我有一個控制檯,它打開一個窗口。我如何使用我從窗體上的控件獲取的值來寫入此控制檯?例如,如文本字段?C++:寫入一個打開表格的控制檯
回答
要在Windows下訪問控制檯,必須將程序作爲控制檯應用程序鏈接。在Visual C++中,您可以在配置屬性/連接器/系統/子系統=控制檯下的項目設置中進行配置。
將您的應用程序鏈接爲concole應用程序而不是表示您無法打開窗口。它只是意味着a)你的過程總是有一個控制檯窗口,b)例如cmd.exe會同步執行它(=等待它完成後再繼續腳本/再次顯示提示)。
然後你就可以訪問控制檯通常的方式:使用std::cout
,printf
等
AFAIK有沒有(好易)的方式來獲得訪問應用程序從,啓動控制檯如果應用程序鏈接作爲一個窗口應用程序。 (但是你可以分配一個新的控制檯,但我認爲這不是你想要的)。
編輯:如果你想打印一些信息到控制檯,即使輸出已被重定向,我建議你使用std::cerr
打印到「錯誤輸出」。 「錯誤輸出」也默認爲控制檯,但它與「stdout」不同,並且通常不會重定向。它可以被重定向,但我認爲給用戶這個選項是一件好事,而不是通過直接打印到控制檯來解決任何重定向問題。當我需要一個「雙模式」應用程序,即一個可以使用GUI或命令提示符運行的應用程序時,我使用控制檯應用程序,並調用FreeConsole()來擺脫控制檯窗口如果通過命令行參數選擇了GUI版本(例如通過不傳遞任何參數)。如果應用程序在GUI模式下啓動(例如,通過在資源管理器中雙擊),那麼控制檯的這種方式仍會短暫彈出,但它會立即關閉,因此在GUI使用時不會使屏幕混亂。
有'AttachConsole',但它具有不阻擋大多數shell的不良副作用,所以您的進程的輸出將與父級混合。 – 2011-04-05 01:16:40
好吧,我改變了我的帖子,說「沒有(好,簡單)的方式來訪問控制檯......」:)順便說一句:如何得到AttachConsole的正確進程ID?如果我理解正確,就必須獲得shell的進程ID,即當前進程的父進程ID。 – 2011-04-05 01:24:23
使用'ATTACH_PARENT_PROCESS'標誌,在[AttachConsole文檔](http:// msdn.microsoft.com/en-us/library/ms681952.aspx) – 2011-04-05 01:42:35
默認情況下,Windows控制檯應用程序已連接到控制檯stdout
。如果沒有(例如,I/O被shell重定向),則可以打開特殊文件名"CONOUT$"
。
所以我可以使用fprintf並使用CONOUT $作爲文件名? – 2011-04-05 00:35:55
@Alex:是的,你可以'打開(「CONOUT $」,「W」)'然後'fprintf'。 – 2011-04-05 01:17:13
- 1. C# - 寫入一個新的控制檯窗口
- 2. Eclipse RCP寫入控制檯開銷
- 3. C#打開/關閉控制檯輸出
- 4. C從控制檯打開文件
- 5. 從C代碼打開Linux控制檯
- 6. Windows應用程序打開控制檯並在其中寫入
- 7. 統一打開控制檯/終端並向其輸出讀取輸入/寫入
- 8. 向控制檯打印大型表格
- 9. C#控制一個控制檯進程
- 10. 打開第二個Python控制檯
- 11. Spark列 - 寫入控制檯
- 12. 同步寫入控制檯
- 13. Eclipse寫入控制檯
- 14. 寫入導軌控制檯
- 15. 將JSON寫入控制檯
- 16. C++打印→Windows控制檯
- 17. 如何打開Visual C++控制檯應用程序的新控制檯窗口?
- 18. 用C#中的每個新線程打開一個新控制檯?
- 19. 從控制檯獲取輸入到一個表格
- 20. 打開控制檯,並下達命令,從shell腳本打開控制檯
- 21. 寫一個表格(雙打)到二進制文件IO C++
- 22. C#控制檯格式化
- 23. 從C++的控制檯輸入一個大的輸入
- 24. 打開新的控制檯運行另一個Javascript文件
- 25. 子控制檯和寫入控制檯值的時間步驟
- 26. Pi 3上的Python打開並控制一個控制檯應用程序
- 27. 程序在此控制檯中寫入時在控制檯中寫入
- 28. 從C#DLL打開控制檯並使用它打印輸出
- 29. 控制檯寫
- 30. 以表格格式打印控制檯列表
你用'/ clr'編譯?使用'C++ - cli'標籤。 – 2011-04-05 00:31:22