Traer al frente - primer plano

Post Reply
FiveWiDi
Posts: 1207
Joined: Mon Oct 10, 2005 2:38 pm

Traer al frente - primer plano

Post 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,
Un Saludo
Carlos G.

FiveWin 24.02 + Harbour 3.2.0dev (r2403071241), BCC 7.7 Windows 10
paquitohm
Posts: 284
Joined: Fri Jan 14, 2022 8:37 am

Re: Traer al frente - primer plano

Post by paquitohm »

Hola,

Quizás SetForegroundWindow() sea la funcion más adecuada

https://forums.fivetechsupport.com/view ... e63#p42310

Salu2
User avatar
karinha
Posts: 7885
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil
Contact:

Re: Traer al frente - primer plano

Post 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.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
cmsoft
Posts: 1293
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: Traer al frente - primer plano

Post 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"
 
FiveWiDi
Posts: 1207
Joined: Mon Oct 10, 2005 2:38 pm

Re: Traer al frente - primer plano

Post by FiveWiDi »

PERFECTO!!!!!!

Ha funcionado con SetForegroundWindow().

Muchas gracias,
Un Saludo
Carlos G.

FiveWin 24.02 + Harbour 3.2.0dev (r2403071241), BCC 7.7 Windows 10
User avatar
JoseAlvarez
Posts: 807
Joined: Sun Nov 09, 2014 5:01 pm

Re: Traer al frente - primer plano

Post 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
 
"Los errores en programación, siempre están entre la silla y el teclado..."

Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin

Carora, Estado Lara, Venezuela.
FiveWiDi
Posts: 1207
Joined: Mon Oct 10, 2005 2:38 pm

Re: Traer al frente - primer plano

Post 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,
Un Saludo
Carlos G.

FiveWin 24.02 + Harbour 3.2.0dev (r2403071241), BCC 7.7 Windows 10
User avatar
JoseAlvarez
Posts: 807
Joined: Sun Nov 09, 2014 5:01 pm

Re: Traer al frente - primer plano

Post by JoseAlvarez »

Excelente! Esa no me la sabía

Gracias!
"Los errores en programación, siempre están entre la silla y el teclado..."

Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin

Carora, Estado Lara, Venezuela.
Post Reply