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); int sub = FindWindowEx(hWnd, 0, "XTPDockBar", null); int subhwnd = FindWindowEx(sub, 0, null, "标准工具栏"); if (subhwnd!= null) Console.WriteLine("OK, Found the toolbar"); msaa((IntPtr)subhwnd);
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, }
[DllImport("user32.dll")] public static extern int FindWindowEx(int hwndParent, int hwndChildAfter, string lpszClass, string lpszWindow);
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 , accchilds, ref result); for (int j = 0; j < result; j++) { IAccessible jchild = accchilds[j] as IAccessible; Console.WriteLine(jchild.get_accName(0)); } } } } }
|