Page 1 of 1
Sobre IsExeRunning ....
Posted: Sat Oct 23, 2021 12:09 am
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.
Re: Sobre IsExeRunning ....
Posted: Sat Oct 23, 2021 3:36 pm
by edk
Maybe somethink like that
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
*******************************
Re: Sobre IsExeRunning ....
Posted: Wed Oct 27, 2021 4:32 pm
by mjaviergutierrez
Gracias ! Saludos.