In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

Ejecutar exe externo y que quede delante de todo lo que este abierto?

Foro público de Xailer en español
Responder
Avatar de Usuario
Carlos Ortiz
Mensajes: 872
Registrado: Mié Jul 01, 2009 5:44 pm
Ubicación: Argentina - Córdoba
Contactar:

Ejecutar exe externo y que quede delante de todo lo que este abierto?

Mensaje por Carlos Ortiz »

Estoy llamando a un ejecutable externo y no siempre queda delante de todas las ventanas que el usuario puede llegar a tener abiertas, la llamada es la siguiente
ShellExecute( 0, "open", "ActualizaVersion.exe", "dbfarma", "", SW_SHOWNORMAL )

Muchas gracias
Avatar de Usuario
XeviCOMAS
Mensajes: 582
Registrado: Sab Mar 12, 2011 8:16 pm

Re: Ejecutar exe externo y que quede delante de todo lo que este abierto?

Mensaje por XeviCOMAS »

Carlos... lo mismo que me ocurría en mi post,
viewtopic.php?t=14169

que por cierto, ninguna respuesta por el foro...

Para solucionarlo, busqué una funcioncilla (creo que de Bingen) para buscar las tareas y poner a esa ventana como activa.

Código: Seleccionar todo

...
aTasks := ActiveTasks()
If (n := AScan( aTasks, {|x| x[2] = "título de la ventana a traer delante" } )) > 0
   ShowWindow( aTasks[n,1], SW_MAXIMIZE )
EndIf
...

//------------------------------------------------------------------------------

#define  GHW_HWNDFIRST 0
#define  GHW_HWNDNEXT  2
#define  GWW_HINSTANCE -6

Function ActiveTasks( nH )
   Local hWnd   := If( nH = Nil, GetWindow( GetActiveWindow(), GHW_HWNDFIRST ), nH )
   Local nTask:=0, cTask, aTasks:={}
   Local nHandle

    while hWnd != 0
      cTask = GetWindowText( hWnd )
      If ! Empty(cTask)
*        If AScan( aTasks, {|x| x[2] == cTask } ) == 0
            Aadd(aTasks,{hWnd,cTask})
*        EndIf
      EndIf
      hWnd = GetWindow( hWnd, GHW_HWNDNEXT )
    end

Return aTasks
Un Saludo,
Xevi.
Avatar de Usuario
Carlos Ortiz
Mensajes: 872
Registrado: Mié Jul 01, 2009 5:44 pm
Ubicación: Argentina - Córdoba
Contactar:

Re: Ejecutar exe externo y que quede delante de todo lo que este abierto?

Mensaje por Carlos Ortiz »

Gracias lo probaré ;)
Avatar de Usuario
bingen
Mensajes: 565
Registrado: Lun Jul 07, 2014 8:17 pm
Ubicación: Bilbao
Contactar:

Re: Ejecutar exe externo y que quede delante de todo lo que este abierto?

Mensaje por bingen »

Otra manera es utilizar una de las joyitas escondidas de Windows PowerToys llamada allways_on_top

https://docs.microsoft.com/en-us/window ... ays-on-top
BiSoft Desarrollo de software profesional
http://www.bisoft.es
Responder