AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 27.11.2022, 20:05   #9  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,987 / 3273 (117) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Попробовал я набросать проект и не получилось.

Взял пример от Товарищ ♂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,
        }
    }
}
Вложения
Тип файла: rar AotInspectWindows.rar (320.8 Кб, 147 просмотров)

Последний раз редактировалось Logger; 27.11.2022 в 20:07.
Теги
aot, sidax, tabax, toolbar

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
DAX 2012 и шаблоны проектирования db DAX: Программирование 31 24.07.2014 12:40
DAX: Enabling Power View on Multidimensional Models for Microsoft Dynamics AX 2012 R2 Blog bot DAX Blogs 0 27.06.2013 06:16
DAX: How to gain additional value from the Microsoft application platform with Microsoft Dynamics AX 2012 R2 Blog bot DAX Blogs 3 21.06.2013 15:16
dax-lessons: Display Barcode in SSRS report [Dynamics AX 2012, X++] Blog bot DAX Blogs 0 15.05.2012 18:11
dax-lessons: Get list of printers in Dynamics AX 2012 for SSRS reports [Using X++] Blog bot DAX Blogs 0 14.05.2012 23:13

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 20:26.