c# – 如何动态控制台应用程序或Windows应用程序
我有一个小应用程序,应该以两种模式执行:非UI或
WPF窗口.它应该依赖于命令行参数.
在每种模式中,我都需要显示一些反馈日志: >在WPF窗口模式下,WPF将负责可视化日志, 我已经找到: >我如何创建一个新的控制台: 而且我知道我可以在项目属性中静态选择“Windows应用程序”或“控制台应用程序”. 选择“Windows应用程序”,GetConsoleWindow()始终为0,我看不到如何重用以前的控制台. 选择“控制台应用程序”,我可以重用以前的控制台,但是当在WPF窗口模式下从资源管理器启动时,会在我的WPF主窗口下创建一个控制台. 问题是:应用程序如何真正动态?在WPF窗口模式下,只有一个WPF窗口(根本没有控制台)或非UI,只有一个控制台(启动一个或新创建的控制台). 解决方法
在Winforms中它更容易,但它并不太难.
从WPF应用程序项目开始(不是具有WPF窗口的控制台应用程序项目). 在根目录中创建一个新的Program.cs类,添加以下代码: class Program { [DllImport("Kernel32")] public static extern void AllocConsole(); [DllImport("Kernel32")] public static extern void FreeConsole(); [DllImport("kernel32.dll")] static extern bool AttachConsole(uint dwProcessId); [STAThread] public static void Main(string[] args) { bool madeConsole = false; if (args.Length > 0 && args[0] == "console") { if (!AttachToConsole()) { AllocConsole(); Console.WriteLine("Had to create a console"); madeConsole = true; } Console.WriteLine("Now I'm a console app!"); Console.WriteLine("Press any key to exit"); Console.ReadKey(true); if (madeConsole) FreeConsole(); } else { WpfApplication1.App.Main(); } } public static bool AttachToConsole() { const uint ParentProcess = 0xFFFFFFFF; if (!AttachConsole(ParentProcess)) return false; Console.Clear(); Console.WriteLine("Attached to console!"); return true; } } 现在您有一个控制台应用程序或WPF应用程序.在“属性”中,将启动对象设置为Program.Main方法.在上面的示例中,WpfApplication1.App.Main是旧的启动对象(在App.xaml.cs文件中定义). 编辑这个错过了关于使用现有控制台的一个要求,一旦我弄清楚如何保持在同一个控制台窗口,我就会编辑它. New Edit Now可以使用现有的控制台! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |