批处理命令以更改当前正在运行的窗口的图标

时间:2018-11-07 08:16:40

标签: batch-file cmd windows-10

在我的工作环境中,最多可以打开10个命令提示符窗口,每个窗口都设置为在不同的上下文中工作。将它们全部打开后,我发现自己不得不在其中几个之间切换以找到我想使用的合适的对象。

我已经基于某些条件为每个窗口设置了不同的前景色和背景色,但是通过在任务栏中使用不同颜色的图标来区分它们将更加容易。这样,我什至不必最大化/吸引他们去集中精力从一开始就找到合适的人。

是否可以通过在其中执行批处理命令来以编程方式更改当前正在运行的命令提示符窗口的任务栏图标?

1 个答案:

答案 0 :(得分:1)

没有“内置”方法可以执行此操作,就像color中的cmd.exe命令来更改颜色一样。

您可以在Internet上搜索某些实用程序,也可以通过调用SetConsoleIcon Win32 API在C#中发布自己的实用程序。但是请注意,该API尚未正式记录为YMMV。

using System;
using System.Drawing;
using System.Runtime.InteropServices;

class Program
{
    [DllImport("kernel32.dll", SetLastError = true)]
    private static extern uint SetConsoleIcon(IntPtr iconHandle);

    static void Main(string[] args)
    {
        if (args[0].Equals("--reset", StringComparison.OrdinalIgnoreCase))
        {
            SetConsoleIcon(IntPtr.Zero);
        }
        else
        {
            // Use this to load an icon from an icon file instead:
            //   var icon = new Icon(args[0]); // load from .ico file
            // Extract icon from given executable/dll.
            using (var icon = Icon.ExtractAssociatedIcon(args[0]))
            {
                if (icon != null)
                    SetConsoleIcon(icon.Handle);
            }
        }
    }
}

您应该可以使用csc.exe setconico.cs进行编译(假设您将文件命名为setconico.cs)。这将生成setconico.exe,您可以像这样使用它:

将运行此控制台的当前控制台图标设置为notepad.exe图标

c:\> setconico.exe c:\windows\notepad.exe

如果您不想编译单独的实用程序,您也许还可以在PowerShell中编写以上代码。