using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Reflection; using System.Runtime.InteropServices; using Accessibility;
namespace ConsoleApplication1 { class Program { static void Main(string[] args) { int hWnd = FindWindowEx(0, 0, "Maxthon2_Frame", null); EnumChildWindows(hWnd, callBackEnumChildWindows, 0); Console.ReadKey(); }
[DllImport("oleacc", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)] public static extern int AccessibleChildren(IAccessible paccContainer, int iChildStart, int cChildren, [In, Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 2)] object[] rgvarChildren, ref int pcObtained);
[DllImport("oleacc.dll")] internal static extern int AccessibleObjectFromWindow( IntPtr hwnd, uint id, ref Guid iid, [In, Out, MarshalAs(UnmanagedType.IUnknown)] ref object ppvObject);
internal enum OBJID : uint { WINDOW = 0x00000000, SYSMENU = 0xFFFFFFFF, TITLEBAR = 0xFFFFFFFE, MENU = 0xFFFFFFFD, CLIENT = 0xFFFFFFFC, VSCROLL = 0xFFFFFFFB, HSCROLL = 0xFFFFFFFA, SIZEGRIP = 0xFFFFFFF9, CARET = 0xFFFFFFF8, CURSOR = 0xFFFFFFF7, ALERT = 0xFFFFFFF6, SOUND = 0xFFFFFFF5, }
/// <summary> /// ////////////////////////////////// [DllImport("user32.dll")] public static extern int FindWindowEx(int hwndParent, int hwndChildAfter, string lpszClass, string lpszWindow); [DllImport("user32.dll")] public static extern int GetWindowText(int hWnd, StringBuilder lpString, int nMaxCount);
[DllImport("user32.dll")] public static extern int EnumChildWindows(int hWndParent, CallBack lpfn, int lParam);
/// <summary> /// 回调函数代理 /// </summary> public delegate bool CallBack(int hwnd, int lParam);
/// <summary> /// 子窗口回调处理函数 /// </summary> /// <param name="hwnd"></param> /// <param name="lParam"></param> /// <returns></returns> public static bool ChildWindowProcess(int hwnd, int lParam) { StringBuilder title = new StringBuilder(200); int len; len = GetWindowText(hwnd, title, 200); if (len < 1) return true; if (title.ToString().Contains("标准工具栏")) { Console.WriteLine("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"); msaa((IntPtr)hwnd); Console.WriteLine("ddddddddddddddddddddddddddddddddddddddddddddddddddddddddd"); } Console.WriteLine(title + " " + hwnd); return true; }
/// <summary> /// 子窗口回调函数代理 /// </summary> public static CallBack callBackEnumChildWindows = new CallBack(ChildWindowProcess);
public static void msaa(IntPtr hwnd2) { object ōbj = new object(); Guid guid = new Guid("{618736E0-3C3D-11CF-810C-00AA00389B71}"); AccessibleObjectFromWindow(hwnd2, (uint)OBJID.WINDOW, ref guid, ref obj); IAccessible accessible = obj as IAccessible; accessible = accessible as IAccessible; Object[] childs = new Object[accessible.accChildCount]; int ōbtained = 0; try { AccessibleChildren(accessible, 0, accessible.accChildCount, childs, ref obtained); } catch (Exception ex) { Console.WriteLine(ex.Message); } Console.WriteLine(accessible.accChildCount); Console.WriteLine(obtained.ToString());
for (int i = 0; i < obtained; i++) { IAccessible child = childs[i] as IAccessible; Console.WriteLine(child.get_accName(0)); Object[] accchilds = new Object[child.accChildCount]; int result = 0; AccessibleChildren(child, 0, child.accChildCount - 1, accchilds, ref result); for (int j = 0; j < result; j++) { IAccessible jchild = accchilds[j] as IAccessible; Console.WriteLine(jchild.get_accName(0)); } } } } }
|