zoukankan      html  css  js  c++  java
  • c# 列举所有窗口和子窗口

    private delegate bool WNDENUMPROC(IntPtr hWnd, int lParam);
    
            [DllImport("user32.dll", ExactSpelling = true)]
            private static extern bool EnumChildWindows(IntPtr hwndParent, WNDENUMPROC lpEnumFunc, int lParam); 
    
            [DllImport("user32.dll")]
            private static extern bool EnumWindows(WNDENUMPROC lpEnumFunc, int lParam);
            //[DllImport("user32.dll")] 
            //private static extern IntPtr FindWindowW(string lpClassName, string lpWindowName); 
            [DllImport("user32.dll")]
            private static extern int GetWindowTextW(IntPtr hWnd, [MarshalAs(UnmanagedType.LPWStr)]StringBuilder lpString, int nMaxCount);
            [DllImport("user32.dll")]
            private static extern int GetClassNameW(IntPtr hWnd, [MarshalAs(UnmanagedType.LPWStr)]StringBuilder lpString, int nMaxCount);
            public struct WindowInfo
            {
                public IntPtr hWnd;
                public string szWindowName;
                public string szClassName;
            }
    
    
    
    
            private List<WindowInfo> EnumChildWindowsCallback(IntPtr handle, string name, string classname)
            {
                List<WindowInfo> wndList = new List<WindowInfo>();
                EnumChildWindows(handle,delegate(IntPtr hWnd, int lParam)
                {
                    WindowInfo wnd = new WindowInfo();
                    StringBuilder sb = new StringBuilder(256);
                    //get hwnd 
                    wnd.hWnd = hWnd;
                    //get window name 
                    GetWindowTextW(hWnd, sb, sb.Capacity);
                    wnd.szWindowName = sb.ToString();
                    //get window class 
                    GetClassNameW(hWnd, sb, sb.Capacity);
                    wnd.szClassName = sb.ToString();
                    //add it into list 
                    wndList.Add(wnd);
                    return true;
                },0);
                return wndList.Where(it => it.szWindowName == name && it.szClassName == classname).ToList();
            } 
    
            public List<WindowInfo> GetAllDesktopWindows(string name,string classname)
            {
                List<WindowInfo> wndList = new List<WindowInfo>();
    
                //enum all desktop windows 
                EnumWindows(delegate(IntPtr hWnd, int lParam)
                {
                    WindowInfo wnd = new WindowInfo();
                    StringBuilder sb = new StringBuilder(256);
                    //get hwnd 
                    wnd.hWnd = hWnd;
                    //get window name 
                    GetWindowTextW(hWnd, sb, sb.Capacity);
                    wnd.szWindowName = sb.ToString();
                    //get window class 
                    GetClassNameW(hWnd, sb, sb.Capacity);
                    wnd.szClassName = sb.ToString();
                    //add it into list 
                    wndList.Add(wnd);
                    return true;
                }, 0);
    
                return wndList.Where(it => it.szWindowName == name && it.szClassName ==classname ).ToList();
            }
  • 相关阅读:
    两个泛型实例之间的属性变化
    C#
    字符编码
    如何在阿里云 CentOS 8 / RHEL 8 上安装 vsftpd(ftp 服务器)
    使用 ASP.NET Core 创建 Web API使用 JavaScript 调用报错 webapi Unable to get items. TypeError: Failed to fetch
    让WPF程序启动时以管理员身份运行(转载)
    WPF任务栏同步进度
    C# ref and out
    C# 中 string.Empty、""、null的差别
    如何读写拥有命名空间xmlns 属性的Xml文件(C#实现)
  • 原文地址:https://www.cnblogs.com/mutuan/p/3867943.html
Copyright © 2011-2022 走看看