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.
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.-
Gracias, voy a ver si encuentro ejemplos de cómo usar eso.
Lo que busco es SetActiveWindow. Pero no encuentro ejemplos entendibles de como usarlo.
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.
'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
'Form1.frm
Private Sub Form_Load()
SetWindowPos hWnd, -1, Screen.Height, Screen.Width, 0, 0, SWP_FLAGS
End Sub
No, yo me refiero a una ventana de otra aplicación. No de la mia.
Sigo sin encontrarlo así que he optado por una chapuzilla.
Te entendí mal, ahí tienes por si todavía te vale...
'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
'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
Bien, así quedará más profesional. Pero no me hace nada (no me ha dado errores). No pasa nada cuando lo abres.
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 ;) .
Funciona con el block de notas, pero no con otras aplicaciones (aún poniendo el título entero.
El titulo tiene que ser EXACTO. Si pones Titulo en ves de Título no va a funcionar.-
¡QUE NO SOY TONTO!
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.-