Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: Scratz en 8 Septiembre 2006, 21:11 pm



Título: ¿Poner una ventana por delante de las demás?
Publicado por: Scratz en 8 Septiembre 2006, 21:11 pm
Creo que el título lo dice todo. No quiero que mi form esté siempre visible, sinó que una ventana esté activa (activa = la primera que tenemos). Ej: Apreto un botón de mi aplicación y la ventana de Internet Explorer (ya abierto) se pone la primera. Soy novato y no sé como hacer eso.


Título: Re: ¿Poner una ventana por delante de las demás?
Publicado por: NYlOn en 8 Septiembre 2006, 23:42 pm
Si sos novato, lo primero que Debes hacer es aprender a busar. Hay una APIs que te pueden ayudar: SetWindowPos Te permite cambiar algunas propiedades de las ventanas. Lo unico que necesitas es el handle de la ventana (si se trata de tu aplicacion podes usar la propiead Formulario.Hwnd).


Saludos.-


Título: Re: ¿Poner una ventana por delante de las demás?
Publicado por: Scratz en 9 Septiembre 2006, 00:15 am
Gracias, voy a ver si encuentro ejemplos de cómo usar eso.


Título: Re: ¿Poner una ventana por delante de las demás?
Publicado por: Scratz en 9 Septiembre 2006, 00:33 am
Lo que busco es SetActiveWindow. Pero no encuentro ejemplos entendibles de como usarlo.


Título: Re: ¿Poner una ventana por delante de las demás?
Publicado por: Scratz en 9 Septiembre 2006, 00:44 am
No, parece que el SetActiveWindow es para las ventanas de la misma aplicación. He encontrado un ejemplo de SetFocus pero lo q hace es ejecutar una aplicación mostrandola dentro del Form, cosa que no me sirve por que la aplicación ya tiene q estar ejecutada.


Título: Re: ¿Poner una ventana por delante de las demás?
Publicado por: yeikos en 9 Septiembre 2006, 01:17 am
Código:
'Module1.bas
Public Declare Function SetWindowPos Lib "User32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long

' SetWindowPos Flags
Public Const SWP_NOSIZE = &H1
Public Const SWP_NOMOVE = &H2
'Const SWP_NOZORDER = &H4
'Const SWP_NOREDRAW = &H8
Public Const SWP_NOACTIVATE = &H10
'Const SWP_DRAWFRAME = &H20
Public Const SWP_SHOWWINDOW = &H40
'Const SWP_HIDEWINDOW = &H80
'Const SWP_NOCOPYBITS = &H100
'Const SWP_NOREPOSITION = &H200
Public Const SWP_FLAGS = SWP_NOMOVE Or SWP_NOSIZE Or SWP_SHOWWINDOW Or SWP_NOACTIVATE

Código:
'Form1.frm
Private Sub Form_Load()
SetWindowPos hWnd, -1, Screen.Height, Screen.Width, 0, 0, SWP_FLAGS
End Sub



Título: Re: ¿Poner una ventana por delante de las demás?
Publicado por: Scratz en 9 Septiembre 2006, 01:23 am
No, yo me refiero a una ventana de otra aplicación. No de la mia.


Título: Re: ¿Poner una ventana por delante de las demás?
Publicado por: Scratz en 9 Septiembre 2006, 01:24 am
Sigo sin encontrarlo así que he optado por una chapuzilla.


Título: Re: ¿Poner una ventana por delante de las demás?
Publicado por: yeikos en 9 Septiembre 2006, 02:01 am
Te entendí mal, ahí tienes por si todavía te vale...

Código:
'Module1.bas
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare Function SetWindowPos Lib "User32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long

' SetWindowPos Flags
Public Const SWP_NOSIZE = &H1
Public Const SWP_NOMOVE = &H2
'Const SWP_NOZORDER = &H4
'Const SWP_NOREDRAW = &H8
Public Const SWP_NOACTIVATE = &H10
'Const SWP_DRAWFRAME = &H20
Public Const SWP_SHOWWINDOW = &H40
'Const SWP_HIDEWINDOW = &H80
'Const SWP_NOCOPYBITS = &H100
'Const SWP_NOREPOSITION = &H200
Public Const SWP_FLAGS = SWP_NOMOVE Or SWP_NOSIZE Or SWP_SHOWWINDOW Or SWP_NOACTIVATE

Código:
'Form1.frm
Private Sub Form_Load()
Ventana = FindWindow(vbNullString, "Nombre de la ventana")
SetWindowPos Ventana, -1, Screen.Height, Screen.Width, 0, 0, SWP_FLAGS
End Sub




Título: Re: ¿Poner una ventana por delante de las demás?
Publicado por: Scratz en 9 Septiembre 2006, 11:02 am
Bien, así quedará más profesional. Pero no me hace nada (no me ha dado errores). No pasa nada cuando lo abres.


Título: Re: ¿Poner una ventana por delante de las demás?
Publicado por: yeikos en 9 Septiembre 2006, 13:43 pm
El nombre de la ventana tiene que estar completo, por ejemplo, sustitutye Nombre de la ventana por Sin título - Bloc de notas, ahora abre el bloc de notas y ejecuta el programa, suerte  ;) .


Título: Re: ¿Poner una ventana por delante de las demás?
Publicado por: Scratz en 9 Septiembre 2006, 15:04 pm
Funciona con el block de notas, pero no con otras aplicaciones (aún poniendo el título entero.


Título: Re: ¿Poner una ventana por delante de las demás?
Publicado por: NYlOn en 9 Septiembre 2006, 20:27 pm
El titulo tiene que ser EXACTO. Si pones Titulo en ves de Título no va a funcionar.-


Título: Re: ¿Poner una ventana por delante de las demás?
Publicado por: Scratz en 11 Septiembre 2006, 13:02 pm
¡QUE NO SOY TONTO!


Título: Re: ¿Poner una ventana por delante de las demás?
Publicado por: NYlOn en 11 Septiembre 2006, 19:16 pm
Entonces demuestra lo contrario y busca un poco en internet. Todo el mundo sabe que aca no estamos para hacer codigos. Ensima que te dan el codigo ni siquiera te preocupas en entenderlo. Busca en google o donde quieras, que no es nada del otro mundo.-