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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 28.10.2007, 07:51   #1  
player is offline
player
Участник
 
107 / 69 (3) ++++
Регистрация: 25.08.2007
Цитата:
Сообщение от Russland Посмотреть сообщение
Взято отсюда
text = WinApi::getWindowText(handle);
Это будет Caption, а не Name в АOT,
Упреждая игры с WinAPI - winapi::getclassname вернет AxMDIChildWindow, и в
getclassinfo тоже ничего полезного вроде нет...
Старый 28.10.2007, 12:31   #2  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
player, да обратите же вы наконец внимание на то, что пишет Белугин Максим.
Вы же не первый, кто пытался сделать что-то подобное.

Через hwnd нельзя получить FormRun, если для этого специально не сохранять ссылку на последнего, запоминая его hwnd
Старый 19.01.2009, 16:41   #3  
petergunn is offline
petergunn
Участник
 
118 / 274 (10) ++++++
Регистрация: 30.08.2005
Адрес: Tyumen
DAX 4.0
Цитата:
Сообщение от player Посмотреть сообщение
Это будет Caption, а не Name в АOT,
Упреждая игры с WinAPI - winapi::getclassname вернет AxMDIChildWindow, и в
getclassinfo тоже ничего полезного вроде нет...
Как давно (10.2007) это было
В этой теме приводил пример job'а для DAX 4.0 по перечислению MDI окон и отображения их заголовков. Похоже для DAX 4.0 все же можно вытянуть название формы в виде 'как бы из AOT' по ее HWND - как заголовок дочернего окна AxPaneWnd:

X++:
IdentifierName formNameInAOT( HWND _hWndAx )
{
    HWND    hWndAxPane  ;
    TempStr strWindowClassName = getClassName( _hWndAx ) ;

    #define.AxMdiChildWndClassName('AxMDIChildWindow')
    #define.AxChildFrameClassName('AxChildFrame')
    #define.AxPaneWndClassName('AxPaneWnd')
    ;

    if( strWindowClassName != #AxMdiChildWndClassName //  Ax MDI Child Window ?
        //&& strWindowClassName != #AxChildFrameClassName //  or Ax Child Frame Window ?
        )
            return '' ;

    hWndAxPane = WinAPI::findWindowEx( _hWndAx, 0, #AxPaneWndClassName, '' ) ;
    return hWndAxPane ? WinAPI::getWindowText( hWndAxPane ) : '' ;
}
Для демонстрации - пример job'а для извлечения имени последней открытой формы по HWND:
X++:
static void jbNameInAOTByHWND(Args _args)
{
    FormRun         formRun ;
    DLLFunction     dllFunctionGetClassName     ;

    #define.UserDLL( 'USER32' )
    #WinAPI

    str getClassName( HWND _hWnd )  //  Win32 API GetClassName function
    {
        #define.nMaxCount(512)

        DLL     dllUser ;
        Binary  binaryClassName = new Binary( #nMaxCount *2 ) ;
        ;

        if( !dllFunctionGetClassName )
        {
            dllUser = new DLL( #UserDLL ) ;
            dllFunctionGetClassName = new DLLFunction( dllUser, 'GetClassNameW' ) ;
            dllFunctionGetClassName.returns( ExtTypes::DWord ) ;
            dllFunctionGetClassName.arg( ExtTypes::DWord, ExtTypes::Pointer, ExtTypes::DWord ) ;
        }

        if( !dllFunctionGetClassName.call( _hWnd, binaryClassName, #nMaxCount ) )
            return '' ;

        return binaryClassName.wString( 0 ) ;
    }

    IdentifierName formNameInAOT( HWND _hWndAx )
    {
        HWND    hWndAxPane  ;
        TempStr strWindowClassName = getClassName( _hWndAx ) ;

        #define.AxMdiChildWndClassName('AxMDIChildWindow')
        #define.AxChildFrameClassName('AxChildFrame')
        #define.AxPaneWndClassName('AxPaneWnd')
        ;

        if( strWindowClassName != #AxMdiChildWndClassName //  Ax MDI Child Window ?
            //&& strWindowClassName != #AxChildFrameClassName //  or Ax Child Frame Window ?
            )
            return '' ;

        hWndAxPane = WinAPI::findWindowEx( _hWndAx, 0, #AxPaneWndClassName, '' ) ;
        return hWndAxPane ? WinAPI::getWindowText( hWndAxPane ) : '' ;
    }
    ;

    if( infolog.setLastActivatedForm() )
        formRun = infolog.setLastActivatedForm().object() ;

    if( formRun )
    {
        info( strfmt( "FormRun name in AOT: %1", formRun.name() ) ) ;
        info( strfmt( "by HWND name in AOT: %1", formNameInAOT( formRun.hWnd() ) ) ) ;
    }
}
За это сообщение автора поблагодарили: Logger (1), player (1).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как получить мультиселект стандартными средствами!? 3oppo DAX: Программирование 11 29.12.2010 12:50
Как получить указатель на отчёт когда пользователь выбрал Печать на принтер в просмотрщике, в форму SysPrintForm? rkorchagin DAX: Программирование 10 17.04.2008 11:59
Получить значение поля таблицы по номеру (Id) поля Anais DAX: Программирование 2 15.04.2004 13:00
Как получить значение поля Datasource на динамически созданной форме? storer DAX: Программирование 2 14.11.2003 16:41
как получить ссылку на экземпляр времменой таблицы отчета r25 DAX: Программирование 4 14.04.2003 16:34
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

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

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

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