首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >启动前控制台配置

启动前控制台配置
EN

Stack Overflow用户
提问于 2020-10-08 22:03:36
回答 1查看 15关注 0票数 0

我正在做一个控制台应用程序,我在启动宽度中更改了,可以在控制台启动之前做吗?现在控制台在默认情况下启动,然后更改。

我希望它能在应用配置后启动。

在Visual Studio中使用C#。

谢谢

EN

回答 1

Stack Overflow用户

发布于 2020-10-08 22:43:14

遗憾的是(据我所知)这是不可能的。

一开始我想“嘿,让我们在开始时隐藏窗口,设置大小,然后再次显示窗口”,如下所示:

代码语言:javascript
复制
[DllImport("kernel32.dll")]
static extern IntPtr GetConsoleWindow();

[DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

private const int SwHide = 0;
private const int SwShow = 5;


public static void Main()
{
    _consoleHandle = GetConsoleWindow();
    ShowWindow(_consoleHandle, SwHide);

    Console.SetWindowSize(100, 30);

    ShowWindow(_consoleHandle, SwShow);
}

但这并不管用。即使我尝试在静态构造函数中隐藏控制台窗口(因此它得到了executed before main)。我所说的“不起作用”的意思是,控制台出现,消失,然后以不同的大小重新出现。

然后我偶然发现了一个Q&A here,上面说你可以通过将输出类型设置为"Windows应用程序“而不是”控制台应用程序“来隐藏控制台窗口。所以我想“嘿,我可以在事后附加一个控制台,让我们试试吧”:

代码语言:javascript
复制
[DllImport("kernel32", SetLastError = true)]
static extern bool AttachConsole(uint dwProcessId);

[DllImport("kernel32")]
static extern IntPtr GetConsoleWindow();

[DllImport("user32")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

private const int SwHide = 0;
private const int SwShow = 5;

private const uint AttachParentProcess = 0x0ffffffff;

public static void Main()
{
    AttachConsole(AttachParentProcess);
    var handle = GetConsoleWindow();

    Console.SetWindowSize(100, 30);

    ShowWindow(handle, SwShow);

    Console.WriteLine(Console.WindowHeight);
    Console.WriteLine(Console.WindowWidth);
}

但这也不起作用,由于某种原因,它不能连接控制台,它返回一个无效的句柄,这意味着我不能做任何事情。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64264213

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档