【发布时间】:2015-07-08 22:47:43
【问题描述】:
我有一个应该在两种模式中执行的小应用程序:非 UI 或 WPF 窗口。它应该取决于命令行参数。
在每种模式下,我都需要显示一些反馈日志:
- 在 WPF 窗口模式下,WPF 将负责可视化日志,
- 在无 UI 模式下,我需要一个控制台来显示日志。如果我的应用程序是从控制台(主要是 cmd.exe)启动的,我想在不打开新应用程序的情况下使用它。如果我的应用是在控制台之外启动的(双击资源管理器、CreateProcess 等),我需要创建一个新控制台来输出结果并等待 Readkey 将其关闭。
我找到了:
- 如何创建新控制台: How to open/close console window dynamically from a wpf application?,
- 如何获取当前控制台窗口句柄以显示/隐藏它: Show/Hide the console window of a C# console application
而且我知道我可以在项目属性中静态选择“Windows 应用程序”或“控制台应用程序”。
选择“Windows 应用程序”,GetConsoleWindow() 始终为 0,我不知道如何重用以前的控制台。
选择“控制台应用程序”,我可以重复使用以前的控制台,但是当在 WPF 窗口模式下从资源管理器启动时,会在我的 WPF 主窗口下创建一个控制台。
问题是:应用程序如何才能真正动态? 在 WPF 窗口模式下,只有一个 WPF 窗口(根本没有控制台)或在非 UI 中,只有一个控制台(开始一个或一个新创建的)。
【问题讨论】:
-
我认为它与 WPF 无关,而仅植根于 PE 标头和 main/winmain 中的子系统。