Ventana siempre visible

Iniciado por TheJucas21, 14 Mayo 2014, 20:28 PM

0 Miembros y 1 Visitante están viendo este tema.

TheJucas21

Como veran en el titulo.
Lo que busco que es lo siguiente:

Yo programo X programas, y quiero lograr que esten SIEMPRE visibles osea, que aunque abras el navegador ese .exe este delante de el y no que uses otro el otro tambien lo pase...
Se entiende?

Eso me serviria MUCHO y lo vi en varios programas.

Cj2009z

Necesitas dos commandbutton en el proyecto y pega este código:


'Constantes para pasarle a la función Api SetWindowPos
Const SWP_NOMOVE = 2
Const SWP_NOSIZE = 1
Const HWND_TOPMOST = -1
Const HWND_NOTOPMOST = -2 '
 
' Función Api SetWindowPos
Private 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
 
'En el primer parámetro se le pasa el Hwnd de la ventana
'El segundo es la constante que permite hacer el OnTop
'Los parámetros que están en 0 son las coordenadas, o sea la _
pocición, obviamente opcionales
'El último parámetro es para que al establecer el OnTop la ventana _
no se mueva de lugar y no se redimensione
 
Private Sub Command1_Click()
    SetWindowPos Me.hWnd, HWND_TOPMOST, 0, 0, 0, 0, _
                            SWP_NOMOVE Or SWP_NOSIZE
End Sub
 
'Colocamos la ventana en su posicion original:
Private Sub Command2_Click()
'Hacemos lo mismo que en el evento anterior, pero pasandole la otra constante
'para que deje de estar siempre encima de las demás, estado normal
SetWindowPos Me.hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE
End Sub
 
Private Sub Form_Load()
    Command1.Caption = "Siempre visible (Always Ontop)"
    Command2.Caption = "Ventana Normal"
End Sub


espero que te sirva.

TheJucas21

Me manda error en esta parte:

' Función Api SetWindowPos
Private 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

Cj2009z

#3
verifica que estes llamando correctamente la función: verifica esto:


SetWindowPos Me.hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE

Aqui estas indicando que la ventana este siempre visible(sobre todas).


SetWindowPos Me.hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE

y esta es para que la ventana quede normal.

y por último las constantes:

Const SWP_NOMOVE = 2
Const SWP_NOSIZE = 1
Const HWND_TOPMOST = -1
Const HWND_NOTOPMOST = -2


el código funciona corretamente, solo es que verifiques que lo hayas copiado bien.

TheJucas21

Muchas Gracias! Este seria todo mi codigo del proyect asi para ver si funcionaba.
Const SWP_NOMOVE = 2
Const SWP_NOSIZE = 1
Const HWND_TOPMOST = -1
Const HWND_NOTOPMOST = -2 '
Private 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
Private Sub Command1_Click()
    SetWindowPos Me.hWnd, HWND_TOPMOST, 0, 0, 0, 0, _
                            SWP_NOMOVE Or SWP_NOSIZE
End Sub

Private Sub Command2_Click()
'Hacemos lo mismo que en el evento anterior, pero pasandole la otra constante
'para que deje de estar siempre encima de las demás, estado normal
SetWindowPos Me.hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE
End Sub

Private Sub Form_Load()
    Command1.Caption = "Siempre visible"
    Command2.Caption = "Ventana Normal"
End Sub

No se si es asi como quisiste decirmelo pero lo puse asi y funciono XD
Gracias!
Suerte!