Skip to content

Instantly share code, notes, and snippets.

@VerchenkoAG
Last active August 29, 2015 14:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save VerchenkoAG/40c50f644459caa7ce3c to your computer and use it in GitHub Desktop.
Save VerchenkoAG/40c50f644459caa7ce3c to your computer and use it in GitHub Desktop.
Harbour and MiniGui - Getting text from another window
/*
* MINIGUI - Harbour Win32 GUI library Demo
*
* Прочитать текст с другой программы / Read text from another program
* Получение текста из чужого окна / Getting text from another window
* Copyright 2015 Verchenko Andrey <verchenkoag@gmail.com>
* Copyright 2015 Sidorov Aleksandr <aksidorov@mail.ru>
*
* Copyright 2006-2015 Grigory Filatov <gfilatov@inbox.ru>
*/
#include "minigui.ch"
#define WM_CLOSE 0x0010
#define WM_GETTEXT 0x000D // winuser.h
#define WM_GETTEXTLENGTH 0x000E
Static cAppTitle, cAppExe
FUNCTION Main()
cAppTitle := "Ammyy Admin v3.5 - Free"
cAppExe := "AA_v3.5.exe"
DEFINE WINDOW Form_Main ;
AT 0,0 ;
WIDTH 600 HEIGHT 220 ;
TITLE "Read the text of the program: " + cAppTitle ;
MAIN ;
ON INIT StartIt() ;
ON RELEASE CloseIt()
DEFINE BUTTON Button_1
ROW 20
COL 20
WIDTH 250
CAPTION 'Read the text box "Edit"'
ACTION ReadGetIt()
DEFAULT .T.
END BUTTON
DEFINE BUTTON Button_3
ROW 20
COL 310
WIDTH 250
CAPTION 'Cancel'
ACTION ThisWindow.Release
END BUTTON
@ 60, 20 EDITBOX Edit_Result ;
WIDTH 540 HEIGHT 100 ;
VALUE '' ;
MAXLENGTH 200 NOHSCROLL
END WINDOW
CENTER WINDOW Form_Main
ACTIVATE WINDOW Form_Main
RETURN Nil
/////////////////////////////////////////////////////////////////
FUNCTION StartIt()
Local hWnd
hWnd := FindWindowEx(,,, cAppTitle )
IF hWnd == 0
_Execute ( 0, , cAppExe, , , 5 )
ENDIF
RETURN Nil
///////////////////////////////////////////////////////////////
FUNCTION CloseIt()
Local hWnd, n
hWnd := FindWindowEx(,,, cAppTitle )
IF hWnd # 0
PostMessage ( hWnd, WM_CLOSE, 0, 0 ) // close programm
ENDIF
RETURN Nil
/////////////////////////////////////////////////////////////////
FUNCTION ReadGetIt()
Local hWnd, aClass, cText, Res
hWnd := FindWindowEx(,,, cAppTitle )
IF hWnd == 0
MsgStop("Not windows: "+cAppTitle)
ELSE
aClass := {}
xVal := EnumChildWindows( hWnd,;
{ | hChild, nLParam | AADD( aClass, { hChild, GetClassName( hChild ), MyStrGetEdit(hChild) } ) , .T. },; // .T. means continue
0 ) // optional supplied value
//MsgDebug("hWnd(",cAppTitle,")",hWnd, "DIM:", aClass, xVal )
cText := ""
FOR nI := 1 TO LEN(aClass)
IF aClass[nI,2] == "Edit"
cText += STR(nI,2)+": " + aClass[nI,3] + CRLF
ENDIF
NEXT
Form_Main.Edit_Result.Value := cText
ENDIF
RETURN Nil
//////////////////////////////////////////////////////////////
FUNCTION MyStrGetEdit(hChild)
LOCAL cRet := "", cString, nLength, cText
IF GetClassName( hChild ) == "Edit"
nLength := SendMessage(hChild, WM_GETTEXTLENGTH, 0, 0) + 1
cText := SPACE(nLength)+" "
cString := SendMessageSTRING(hChild, WM_GETTEXT, nLength, @cText)
cText:= substr(cText,1,cString)
cRet := cText
//MsgDebug(hChild,GetClassName( hChild ),cRet,cString)
ENDIF
RETURN cRet
//////////////////////////////////////////////////////////////
// http://forums.fivetechsupport.com/viewtopic.php?p=57503
#pragma BEGINDUMP
#include <hbapi.h>
#include <hbapiitm.h>
#include <windows.h>
void hb_evalBlock( PHB_ITEM pCodeBlock, ... );
static PHB_ITEM pCodeBlock = NULL;
BOOL CALLBACK static EnumChildProc( HWND hWnd, LPARAM lParam )
{
PHB_ITEM pHWnd = hb_itemPutNL( NULL, ( LONG ) hWnd );
PHB_ITEM pParam = hb_itemPutNL( NULL, ( LONG ) lParam );
if( pCodeBlock )
hb_evalBlock( pCodeBlock, pHWnd, pParam, 0 );
hb_itemRelease( pHWnd );
hb_itemRelease( pParam );
return hb_parl( -1 );
}
HB_FUNC( ENUMCHILDWINDOWS )
{
HWND hWnd = ( HWND ) hb_parnl( 1 );
LPARAM lParam = ( LPARAM ) hb_parnl( 3 );
pCodeBlock = hb_param( 2, HB_IT_BLOCK );
hb_retl( EnumChildWindows( hWnd, EnumChildProc, lParam ) );
pCodeBlock = NULL;
}
#pragma ENDDUMP
//////////////////////////////////////////////////////////////
// MiniGUI\SAMPLES\Advanced\MoveDialogBox
#pragma BEGINDUMP
#include <windows.h>
#include "hbapi.h"
HB_FUNC ( GETCLASSNAME )
{
HWND hWnd = (HWND) hb_parnl( 1 );
TCHAR ClassName[ 255 ];
GetClassName( hWnd, ClassName, sizeof (ClassName) / sizeof (TCHAR) );
hb_retc( ClassName );
}
HB_FUNC ( GETPARENT )
{
hb_retnl( (LONG) GetParent( (HWND) hb_parnl( 1 ) ) );
}
#pragma ENDDUMP
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment