![]() |
#7 |
Участник
|
DAX 4.0
Цитата:
![]() В этой теме приводил пример 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 ) : '' ; } 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). |
|
|