Sobre IsExeRunning ....

General Help regarding HMG, Compilation, Linking, Samples

Moderator: Rathinagiri

Post Reply
User avatar
mjaviergutierrez
Posts: 167
Joined: Fri Nov 30, 2012 7:51 pm
DBs Used: DBF, MySQL
Location: San Lorenzo, Santa Fe, Argentina

Sobre IsExeRunning ....

Post by mjaviergutierrez »

Hola Colegas :
Necesito llamar desde una aplicación modo consola , a una aplicación de Windows Form, no tengo problema hasta acá, el tema es que necesito controlar si la aplicación Win Form ya esta abierta, restaure la ventana y si no, la abra.
Por supuesto, estuve buscando, pero no encuentro un hilo continuo , ni que yo entienda , me parece que se hace con IsExeRunning , baje unos ejemplos, no me funcionan. Me imagino que a esta altura alguien ya debe haber hecho esto, llamar desde un prog en DOS, a uno en Windows. Bueno, si alguien me puede tirar una idea , se los agradezco, Muchos Saludos.
...
edk
Posts: 999
Joined: Thu Oct 16, 2014 11:35 am
Location: Poland

Re: Sobre IsExeRunning ....

Post by edk »

Maybe somethink like that :?: :idea: :arrow:

Code: Select all

#include "hmg.ch"
#include "hblang.ch"
#include "inkey.ch"

REQUEST HB_GT_WIN_DEFAULT
REQUEST HB_LANG_EN
REQUEST HB_CODEPAGE_EN

PROCEDURE Main()
Local aFunc :=  {{"F1", "excel.exe", K_F1}, ;
		{"F2", "winword.exe", K_F2}, ;
		{"F3", "notepad.exe", K_F3}, ;
		{"F4", "wordpad.exe", K_F4}, ;
		{"F5", "control.exe", K_F5}, ;
		{"F6", "cmd.exe", K_F6}, ;
		{"F7", "mspaint.exe", K_F7}}
Local i

set( _SET_CODEPAGE, 'EN' )
hb_LangSelect( 'EN' )

SetMode( 25, 80 )
SetColor( "N/W" )
CLS
DO WHILE .T.
	@2,2 Say "Press key to open:"
	FOR i:=1 TO Len( aFunc )
		@ROW() + 1, 2 Say aFunc[i][1] + " - " + aFunc[i][2]
	Next i
	@ROW() + 2, 2 Say "(ESC-Abort)"

	INKEY (0)
	IF LastKey() = K_ESC
		EXIT
	ENDIF

	FOR i:=1 TO HMG_Len( aFunc )
		IF LastKey() = aFunc[i][3]
			TryToOpen ( aFunc[i][2] )
		ENDIF 
	Next i 	

ENDDO

@ROW() + 2 ,2 Say "Bye, bye ..... " + CHR(1)

WAIT

RETURN 
*******************************
Function TryToOpen ( cFileToRun )
Local hWndFileToRun := GethWndOfRunningExe ( cFileToRun )
	
IF hWndFileToRun = 0	//is not running
	EXECUTE FILE cFileToRun
ELSE
	/*
	MsgDebug ( "GetWindowText", GetWindowText ( hWndFileToRun ), ;
		   "IsWindowVisible", IsWindowVisible ( hWndFileToRun ), ;
		   "IsValidWindowHandle", IsValidWindowHandle ( hWndFileToRun ), ;
		   "IsMinimized", IsMinimized ( hWndFileToRun ), ;
		   "IsMaximized", IsMaximized ( hWndFileToRun ) )
	*/
	ShowWindow( hWndFileToRun )
	IF IsMinimized ( hWndFileToRun ) 
		Restore( hWndFileToRun )
	ENDIF
	SetForegroundWindow( hWndFileToRun )
ENDIF
RETURN
*******************************
FUNCTION GethWndOfRunningExe ( cFileExe )
LOCAL i, nProcessID, aWindows := EnumWindows (), hWnd := 0
FOR i := 1 TO HMG_LEN ( aWindows )
	GetWindowThreadProcessId (aWindows[i], NIL, @nProcessID)
	IF HMG_UPPER ( cFileExe ) == Right ( HMG_UPPER ( GetProcessImageFileName( nProcessID ) ), HMG_LEN ( cFileExe ) ) .AND. IsWindowVisible ( aWindows[i] )
		hWnd := aWindows[i]
		EXIT
	ENDIF
NEXT i
RETURN hWnd
*******************************
User avatar
mjaviergutierrez
Posts: 167
Joined: Fri Nov 30, 2012 7:51 pm
DBs Used: DBF, MySQL
Location: San Lorenzo, Santa Fe, Argentina

Re: Sobre IsExeRunning ....

Post by mjaviergutierrez »

Gracias ! Saludos.
...
Post Reply