a994894043 2021-08-11 11:28 采纳率: 60%
浏览 45
已结题

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

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

  • 写回答

2条回答 默认 最新

  • 真的小白啊 2021-08-11 16:24
    关注

    获取窗口句柄也是容易的

    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);
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 8月19日
  • 已采纳回答 8月11日
  • 创建了问题 8月11日

悬赏问题

  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看