gpt4 book ai didi

c# - 有没有办法在运行时更改控制台图标

转载 作者:太空狗 更新时间:2023-10-30 00:36:02 26 4
gpt4 key购买 nike

我对更改显示在 Windows 资源管理器中的 EXE 中的实际图标不感兴趣,而只想更改显示在控制台窗口左上角的图标。我已经在 visual studio 项目中设置了图标,并且在 Windows 资源管理器中得到了很好的效果,并且该图标也显示在控制台窗口中,我只想能够在运行时在控制台窗口中更改它。也就是说,我想放置一个图标来显示有新电子邮件或其他内容。

最佳答案

根据 Leniel 的回答,我想在 C# winforms 应用程序中执行此操作。他发布的链接是 C++。如果您想在 C# 中执行此操作,基本上这里是您需要的代码:

[DllImport("kernel32.dll", SetLastError = true)]
static extern bool SetConsoleIcon(IntPtr hIcon);

并这样调用它:

public static void SetConsoleIcon(System.Drawing.Icon icon)
{
SetConsoleIcon(icon.Handle);
}

我有一个在 winforms 应用程序中使用的 ConsoleWindow 类,它也能够显示控制台窗口。这是全类定义

 class ConsoleWindow
{
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool AllocConsole();

[DllImport("kernel32.dll")]
static extern bool AttachConsole(int dwProcessId);
private const int ATTACH_PARENT_PROCESS = -1;

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

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

[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
static extern bool SetWindowText(IntPtr hwnd, String lpString);

[DllImport("user32.dll")]
static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert);

[DllImport("user32.dll")]
static extern bool EnableMenuItem(IntPtr hMenu, uint uIDEnableItem, uint uEnable);

[DllImport("kernel32.dll", SetLastError = true)]
static extern bool SetConsoleIcon(IntPtr hIcon);

const int SW_HIDE = 0;
const int SW_SHOW = 5;

const int SC_CLOSE = 0xF060;
const int MF_GRAYED = 1;

public static void AttachConsoleWindow()
{
// redirect console output to parent process;
// must be before any calls to Console.WriteLine()
AttachConsole(ATTACH_PARENT_PROCESS);
}

public static void ShowConsoleWindow()
{
var handle = GetConsoleWindow();

if (handle == IntPtr.Zero)
{
AllocConsole();
}
else
{
ShowWindow(handle, SW_SHOW);
}
}

public static void HideConsoleWindow()
{
var handle = GetConsoleWindow();

ShowWindow(handle, SW_HIDE);
}

public static void SetWindowText(string text)
{
var handle = GetConsoleWindow();

SetWindowText(handle, text);
}

public static void DisableCloseButton()
{
var handle = GetConsoleWindow();

var hmenu = GetSystemMenu(handle, false);

EnableMenuItem(hmenu, SC_CLOSE, MF_GRAYED);
}

public static void SetConsoleIcon(System.Drawing.Icon icon)
{
SetConsoleIcon(icon.Handle);
}
}

关于c# - 有没有办法在运行时更改控制台图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2986853/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com