Win32 是不是允许同时使用控制台和窗口的应用程序?

Posted

技术标签:

【中文标题】Win32 是不是允许同时使用控制台和窗口的应用程序?【英文标题】:Does Win32 allow applications that both use Console and Windowing?Win32 是否允许同时使用控制台和窗口的应用程序? 【发布时间】:2013-06-23 00:34:08 【问题描述】:

C# 宠坏了我,因为我可以编写一个以“控制台”为目标的应用程序,同时仍然使用窗口。这对于调试非常有用,但是,我很茫然:Win32中以/SUB-SYSTEM:WINDOWS为目标的应用程序也可以使用控制台吗?

【问题讨论】:

制作一个也使用WIN32函数进行GUI处理的控制台程序可能会更容易。 当然,使用 AllocConsole()。或者将子系统更改为控制台,就像您在 C# 程序中所做的那样。这确实需要您将入口点更改为 main()。或者使用 Visual Studio 输出窗口进行调试输出。调用 OutputDebugString() 将文本发送到该窗口。 显然,答案是肯定的: (a) 正如您所说,C#(实际上是.NET)证明了这是可能的; (b) 控制台也在一个窗口中运行,因此必须可以同时拥有两者,否则您将不会看到控制台。 @stakx:不过,控制台窗口相当特别。它甚至不属于您的进程,它的所有 GUI 行为都由 conhost.exe 处理。 all of its GUI behavior is handled by conhost.exe。 (检查任务管理器)哦,废话,这是真的。很有趣。 【参考方案1】:

是的。如果您创建控制台应用程序,您仍然可以创建窗口。就像非控制台应用程序一样,您仍然必须拥有get 和dispatch 窗口消息。如果您创建一个基于窗口的应用程序,您可以通过调用AllocConsole 创建一个控制台。

【讨论】:

哦,拉德,我不知道你能做到这一点。那我该如何捕捉 HINSTANCE 呢? 使用GetModuleHandle(NULL)。返回值与应用程序的 HINSTANCE 相同。

以上是关于Win32 是不是允许同时使用控制台和窗口的应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

win32(全屏)无边框窗口重叠任务栏

windows下控制台程序实现窗口显示

win32两个应用程序窗口之间进行进程通信要怎么写

我安装的VS2008怎么win32控制台应用程序生成时窗口总是自动运行一遍就自动关闭

优雅的 Win32 无窗口进程终止

如何在 Win32 控制台应用程序中注册不可见的窗口类?