Batch file 更改当前运行窗口图标的批处理命令

Batch file 更改当前运行窗口图标的批处理命令,batch-file,cmd,windows-10,Batch File,Cmd,Windows 10,在我的工作环境中,最多可以打开10个命令提示符窗口,每个窗口都设置为在不同的上下文中工作。打开所有这些文件后,我发现自己不得不在其中几个文件之间切换,以找到我想要使用的正确文件 我已经根据一些标准设置了每个窗口的不同前景色和背景色,但是如果任务栏中有一个不同颜色的图标,将更容易区分它们。这样,我甚至不需要最大化/让他们集中精力从一开始就找到合适的人 有没有一种方法可以通过在当前运行的命令提示符窗口中执行批处理命令,以编程方式更改该窗口的任务栏图标?没有“内置”方法可以做到这一点,就像使用cmd.

在我的工作环境中,最多可以打开10个命令提示符窗口,每个窗口都设置为在不同的上下文中工作。打开所有这些文件后,我发现自己不得不在其中几个文件之间切换,以找到我想要使用的正确文件

我已经根据一些标准设置了每个窗口的不同前景色和背景色,但是如果任务栏中有一个不同颜色的图标,将更容易区分它们。这样,我甚至不需要最大化/让他们集中精力从一开始就找到合适的人

有没有一种方法可以通过在当前运行的命令提示符窗口中执行批处理命令,以编程方式更改该窗口的任务栏图标?

没有“内置”方法可以做到这一点,就像使用
cmd.exe
中的
color
命令来更改颜色一样

您可以通过调用
SetConsoleIcon
Win32 API在internet上搜索一些实用程序,也可以自己使用,例如在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中编写上述代码。

没有“内置”方法来完成此操作,就像
cmd.exe
中有
color
命令来更改颜色一样

您可以通过调用
SetConsoleIcon
Win32 API在internet上搜索一些实用程序,也可以自己使用,例如在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中编写上述代码