Page 1 of 1
Traer al frente - primer plano
Posted: Fri Aug 09, 2024 2:55 pm
by FiveWiDi
Hola a todos,
Estoy intentando que un programa FWH sólo se pueda 'arrancar' una vez. Y lo consigo.
En las siguientes usos, consigo detectar que está funcionando.
Y buscando entre las ventanas de windows por su título consigo su Hwnd.
Cómo puedo traer al frente esa ventana de la que tengo su Hwnd ?
He buscado en el foro 'traer al fente' 'primer plano' y no encuentro la solución.
He probado con:
-SetFocus( oWnd:hWnd )
-BringWindowToTop( oWnd:hWnd )
-SetWindowPos(oWnd:hWnd,-1,,,,,8)
Pero no funciona.
Muchas gracias,
Re: Traer al frente - primer plano
Posted: Fri Aug 09, 2024 3:17 pm
by paquitohm
Hola,
Quizás SetForegroundWindow() sea la funcion más adecuada
https://forums.fivetechsupport.com/view ... e63#p42310
Salu2
Re: Traer al frente - primer plano
Posted: Fri Aug 09, 2024 3:19 pm
by karinha
Code: Select all | Expand
IF ISEXERUNNING( CFILENAME( HB_ARGV( 0 ) ) )
MsgInfo( "WinOrcam.exe Já Está Rodando Nesta Máquina","TuPrograma.exe")
SHOWWINDOW( FINDWINDOW( 0, "TUPROGRAMA" ), 9 )
SETFOREGROUNDWINDOW( FINDWINDOW( 0, "TUPROGRAMA" ) )
__QUIT()
RETURN NIL
ENDIF
Regards, saludos.
Re: Traer al frente - primer plano
Posted: Fri Aug 09, 2024 3:31 pm
by cmsoft
Puedes probar con
Code: Select all | Expand
function WndOnTop( lState, hWnd )
local nRet := 0
DEFAULT hWnd := GetActiveWindow()
if !lState
nRet = AcpOnTop( hWnd, -2, 0, 0, 0, 0, 3 )
else
nRet = AcpOnTop( hWnd, -1, 0, 0, 0, 0, 3 )
endif
return nRet
dll32 static function AcpOnTop( hWnd AS LONG, hWndInsertAfter AS LONG, x AS LONG, y AS LONG, cx AS LONG, cy AS LONG, wFlags AS LONG ) ;
AS LONG PASCAL FROM "SetWindowPos" LIB "User32.dll"
Re: Traer al frente - primer plano
Posted: Fri Aug 09, 2024 4:22 pm
by FiveWiDi
PERFECTO!!!!!!
Ha funcionado con SetForegroundWindow().
Muchas gracias,
Re: Traer al frente - primer plano
Posted: Sat Aug 10, 2024 12:53 pm
by JoseAlvarez
Saludos...
Para evitar que mi aplicación se ejecute más de una vez yo uso esto:
Code: Select all | Expand
if IsExeRunning( ("nombre.exe") )
MsgInfo( "No puedes abrir dos veces el programa",'Error...')
release all
quit
endif
Re: Traer al frente - primer plano
Posted: Sat Aug 10, 2024 4:47 pm
by FiveWiDi
JoseAlvarez wrote:Saludos...
Para evitar que mi aplicación se ejecute más de una vez yo uso esto:
Code: Select all | Expand
if IsExeRunning( ("nombre.exe") )
MsgInfo( "No puedes abrir dos veces el programa",'Error...')
release all
quit
endif
Si, yo también uso esta manera.
Pero incluso evito que modifiquen el fichero .EXE así:
If IsExeRunning(cFileName(GetModuleFileName(GetInstance()))) // cFileName(HB_ARGV(0))
...
Muchas gracias,
Re: Traer al frente - primer plano
Posted: Sun Aug 11, 2024 8:15 pm
by JoseAlvarez
Excelente! Esa no me la sabía
Gracias!