VD2019 vb语言,通过autoit窗口句柄,可以修改某个程序不在任务栏显示显示吗

那么窗口句柄又该怎么获取,一直找不到一个看得懂的语句。

获取窗口句柄也是容易的

img

EnumWindows
https://docs.microsoft.com/zh-cn/windows/win32/api/winuser/nf-winuser-enumwindows

private static void Main(string[] args)
{
    List<Window> windows = Window.GetWindows();
    foreach (Window window in windows)
    {
        Console.WriteLine(window);
    }

    Console.ReadKey();
}
public delegate bool EnumWindowsProc(IntPtr hwnd, IntPtr lParam);

public class Window
{
    private static List<Window> _windows = new List<Window>();

    public string ClassName { get; set; }
    public IntPtr HWnd { get; set; }
    public string Title { get; set; }

    public override string ToString()
    {
        return $"标题:{Title}\n" +
            $"类名:{ClassName}\n" +
            $"句柄:{HWnd}\n";
    }

    public static List<Window> GetWindows()
    {
        _windows.Clear();
        EnumWindows(EnumWindowsFunc, IntPtr.Zero);
        return _windows;
    }

    private static bool EnumWindowsFunc(IntPtr hwnd, IntPtr lParam)
    {
        if (hwnd == IntPtr.Zero)
        {
            return false;
        }
        else
        {
            if (IsWindow(hwnd) != 0)
            {
                StringBuilder buffer = new StringBuilder(256);
                Window window = new Window
                {
                    HWnd = hwnd
                };

                _ = GetClassNameW(hwnd, buffer, buffer.Capacity);
                window.ClassName = buffer.ToString();

                buffer.Clear();
                _ = GetWindowTextW(hwnd, buffer, buffer.Capacity);
                window.Title = buffer.ToString();

                _windows.Add(window);
            }
            return true;
        }
    }

    [DllImport("User32.dll")]
    private static extern bool EnumWindows(EnumWindowsProc lpEnumFunc, IntPtr lParam);

    [DllImport("User32.dll")]
    private static extern int IsWindow(IntPtr hWnd);

    [DllImport("User32.dll", CharSet = CharSet.Unicode)]
    private static extern int GetClassNameW(IntPtr hWnd, StringBuilder lpClassName, int nMaxCount);

    [DllImport("User32.dll", CharSet = CharSet.Unicode)]
    private static extern int GetWindowTextW(IntPtr hWnd, StringBuilder lpString, int nMaxCount);
}

img