Last active
August 29, 2015 14:17
-
-
Save VerchenkoAG/40c50f644459caa7ce3c to your computer and use it in GitHub Desktop.
Harbour and MiniGui - Getting text from another window
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* 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