Попробовал я набросать проект и не получилось.
Взял пример от Товарищ ♂uatr
запихнул его в C# проект (консольное приложение) - все работает (правда запускать надо debug версию, ну не суть)
Запускаем проект, он спрашивает hwnd окна
Даем ему hwnd в десятичном виде (в моем примере 67552) в ответ текст
Цитата:
Waiting for HWND input (in decimal format):
67552
HWND hex:107E0; Name:SalesTable; HWND:67552
HWND hex:107E0; Description:\Data Dictionary\Tables\SalesTable: 7; HWND:67552
т.е. он для окна может прочитать имя объекта АОТ и полный путь к нему в свойствах Name и Description. Только к полному пути еще добавляет через двоеточие число дочерних узлов. Но это нестрашно.
Оговорюсь что нужно скармливать не hwnd окна АОТ (с ClassName AxMDIChildWindow) а hwnd дочернего к нему окна (с ClassName AxPaneWnd)
Текст проекта
X++:
// [url=http://axforum.info/forums/showthread.php?p=434649#post434649]Dax 2012 получить путь к Treenode (Toolbar, tabax)[/url]
// Товарищ ♂uatr
using System;
using System.Runtime.InteropServices;
using System.Security;
using Accessibility;
namespace AotInspectWindows
{
class Program
{
[DllImport("oleacc.dll")]
private static extern int AccessibleObjectFromWindow(IntPtr hwnd, uint id, ref Guid iid,
[In, Out, MarshalAs(UnmanagedType.IUnknown)] ref object ppvObject);
static void Main(string[] args)
{
object accessibleObj = null;
string name;
string description;
Guid guid = new Guid("{618736E0-3C3D-11CF-810C-00AA00389B71}");
Console.WriteLine("Waiting for HWND input (in decimal format):");
string ptr = Console.ReadLine(); // вводить в десятичном формате
IntPtr handle = new IntPtr(Convert.ToInt32(ptr));
// int result = AccessibleObjectFromWindow(handle, (uint)OBJID.OBJID_WINDOW, ref guid, ref accessibleObj); // для такого вызова будет пустым get_accDescription() но непустым get_accName()
int result = AccessibleObjectFromWindow(handle, (uint)OBJID.OBJID_CLIENT, ref guid, ref accessibleObj); // а для такого все ок - и get_accDescription() и get_accName() - непустые
name = ((IAccessible)accessibleObj).get_accName(0);
Console.WriteLine($"HWND hex:{handle.ToString("X")}; Name:{name}; HWND:{handle}");
description = ((IAccessible)accessibleObj).get_accDescription(0);
Console.WriteLine($"HWND hex:{handle.ToString("X")}; Description:{description}; HWND:{handle}");
Console.ReadKey();
}
public enum OBJID : uint
{
OBJID_WINDOW = 0x00000000,
OBJID_SYSMENU = 0xFFFFFFFF,
OBJID_TITLEBAR = 0xFFFFFFFE,
OBJID_MENU = 0xFFFFFFFD,
OBJID_CLIENT = 0xFFFFFFFC,
OBJID_VSCROLL = 0xFFFFFFFB,
OBJID_HSCROLL = 0xFFFFFFFA,
OBJID_SIZEGRIP = 0xFFFFFFF9,
OBJID_CARET = 0xFFFFFFF8,
OBJID_CURSOR = 0xFFFFFFF7,
OBJID_ALERT = 0xFFFFFFF6,
OBJID_SOUND = 0xFFFFFFF5,
}
}
}