C# Winform 已知窗体句柄,如何遍历出所有控件句柄
C# Winform 已知窗体句柄,如何遍历出所有控件句柄
public delegate bool CallBack(int hwnd, int lParam);
public delegate bool EnumWindowsProc(int hWnd, int lParam);
List<string> list = new List<string>(); [DllImport("user32.dll")] [return: MarshalAs(UnmanagedType.Bool)] public static extern bool EnumChildWindows(IntPtr hwndParent, EnumWindowsProc lpEnumFunc, IntPtr lParam); [DllImport("user32.dll")] public static extern int GetWindowText(int hWnd, IntPtr lpString, int nMaxCount); private void toolStripButton5_Click(object sender, EventArgs e) { list.Clear(); EnumChildWindows(this.Handle, this.EnumWindowsMethod, IntPtr.Zero); //这里得到了所有的子窗口list.Count; //this.Handle改成你已得到的窗体句柄 } private bool EnumWindowsMethod(int hWnd, int lParam) { IntPtr lpString = Marshal.AllocHGlobal(200); GetWindowText(hWnd, lpString, 200);//这里获得控件text var text = Marshal.PtrToStringAnsi(lpString); if (!string.IsNullOrWhiteSpace(text)) list.Add(text);//添加到list,如果要获得句柄就新建list添加hWnd return true; }
//public delegate bool CallBack(int hwnd, int lParam);
//public delegate bool EnumWindowsProc(int hWnd, int lParam);
//[DllImport("User32.dll", EntryPoint = "FindWindow", SetLastError = false)]
//public static extern int FindWindow(string lpClassName, string lpWindowName);
//[DllImport("user32.dll")]
//[return: MarshalAs(UnmanagedType.Bool)]
//public static extern bool Enumchildwindows(IntPtr hwndParent, EnumWindowsProc lpEnumFunc, IntPtr lParam);
//[DllImport("user32.dll")]
//public static extern int GetWindowText(int hWnd, StringBuilder lpString, int nMaxCount);
//[DllImport("user32.dll")]
//public static extern int EnumThreadWindows(int dwThreadId, CallBack lpfn, int lParam);
//[DllImport("user32.dll")]
//public static extern int EnumWindows(CallBack lpfn, int lParam);
//[DllImport("user32.dll")]
//public static extern int EnumChildWindows(int hWndParent, CallBack lpfn, int lParam);
参考链接:https://zhidao.baidu.com/question/1575352645104568900.html
龙腾一族至尊龙骑