C#用API如何遍历所有窗口句柄
来源:互联网 发布:阿拉斯加大学 知乎 编辑:程序博客网 时间:2024/05/16 03:15
1.首先需要声明一个委托函数用于 Win32 API - EnumWindows 的回调函数:
private delegatebool WNDENUMPROC(IntPtr hWnd, int lParam); //IntPtr hWnd用int也可以
2.然后利用 C# 中的平台调用声明从 USER32.DLL 库中调用 API - EnumWindows,具体参数请参考 MSDN - Win32 API。
[DllImport("user32.dll")]
private staticextern bool EnumWindows(WNDENUMPROC lpEnumFunc,int lParam);
3.最后实例化委托,调用 EnumWindows。
EnumWindows(delegate(IntPtr hWnd, int lParam) {……},0);
private delegate bool WNDENUMPROC(IntPtr hWnd, int lParam);//用来遍历所有窗口 [DllImport("user32.dll")] private static extern bool EnumWindows(WNDENUMPROC lpEnumFunc, int lParam);//获取窗口Text [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; } public WindowInfo[] GetAllDesktopWindows() {//用来保存窗口对象 列表 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.ToArray(); }
阅读全文
0 0
- C#用API如何遍历所有窗口句柄
- 遍历所有窗口句柄
- 遍历window所有窗口句柄
- C# Windows API应用之GetDesktopWindow ——获得桌面所有窗口句柄的方法
- C#遍历进程获取主窗口句柄
- C#遍历进程获取主窗口句柄
- 遍历所有窗口句柄,截取窗口屏幕(截屏)
- 枚举遍历所有子窗口句柄控件类型标题
- 遍历窗口句柄
- API窗口句柄函数
- win32 API窗口句柄
- 递归方式+FindWindow 遍历窗口句柄。查找已知句柄下的所有句柄。按节点方式保存
- WPF中如何遍历打开所有窗口
- 如何得到句柄、窗口句柄
- 如何获得窗口句柄以及WIN32+API参考大全
- 如何获得窗口句柄以及WIN32+API参考大全
- C#窗口句柄问题
- c#窗口句柄
- 高德地图API使用心得分享
- 今日小程序推荐:清单plus-他人经验,可以攻玉
- C++ 宏定义#define 中##的使用
- Android:支持多选的本地相册
- 矩阵快速幂
- C#用API如何遍历所有窗口句柄
- Node.js初学笔记(使用InteliJ IDEA创建的项目)
- 推荐系统学习--基于item的协同过滤算法及python实现
- PT项目--含税价PB00采购定价方案实例之二
- Android常用代码之普通及系统权限静默安装APK
- JS中this和对象作为函数参数的区别
- spark读取MySQL大Table的效能问题
- JFinal结合Sigar、echarts实现后台服务器监控
- less详解