Visual Basic.NET - ventana por encima de todo

 
Vista:

ventana por encima de todo

Publicado por Fany (25 intervenciones) el 22/08/2007 10:56:21
Hola, aqui estoy de nuevo.
Me gustaria saber como hago para que cuando se cumpla una condicion mi programa, que estaría minimizado, se abra por encima de cualquier otra aplicacion que estuviese en ese momento ejecutándose.
¿Alguien me puede ayudar?
Muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:ventana por encima de todo

Publicado por Fany (25 intervenciones) el 22/08/2007 12:53:10
Estoy intentando hacerlo con el siguiente codigo:

Private Declare Function GetForegroundWindow Lib "user32" () As Long
Private Declare Function GetActiveWindow Lib "user32" () As Long
Declare Function SetActiveWindow Lib "user32.dll" (ByVal hwnd As Long) As Long
Declare Function SetForegroundWindow Lib "user32" Alias "SetForegroundWindow" (ByVal hwnd As Long) As Long

SetActiveWindow(Me.Handle)
result = SetForegroundWindow(THandle)

Pero me da un error en Pinvoke ¿me podeis ayudar? gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ventana por encima de todo

Publicado por Harold V. (411 intervenciones) el 22/08/2007 21:53:46
El PInvoke lo solucionas utilizando IntPtr en vez del long para el hWnd...fijate ademas como termina tu declaracion cambia el AS Long por As Integer

Declare Auto Function MoveWindow Lib "user32" (ByVal hWnd As IntPtr, ByVal x As Integer, ByVal y As Integer, ByVal nWidth As Integer, ByVal nHeight As Integer, ByVal bRepaint As Integer) As Integer

y lo llamo de esta manera:

MoveWindow(Me.Handle, 20, 20, Me.Height, Me.Width, True)

Este ejemplo mueve una ventana, solo es usado para que te guies......

Espero te ayude en algo...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ventana por encima de todo

Publicado por Fany (25 intervenciones) el 22/08/2007 22:40:39
Probe todo lo que me dijisteis, pero nada de eso me funciona, to quiero que me salte la aplicacion por encima de todo lo que se este ejecutando en ese momento.
Pero con nada de eso me sale. No es el formulario el que tiene que ponerse por encima, sino toda a aplicacion.
Timer1.Enabled = False
Dim result As IntPtr
THandle = Me.Handle
SetActiveWindow(THandle)
result = SetForegroundWindow(THandle)
Me.WindowState = FormWindowState.Maximized
Me.MdiParent.TopLevel = True
'MoveWindow(Me.Handle, 20, 20, Me.Height, Me.Width, True)

Timer1.Enabled = True
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ventana por encima de todo

Publicado por Harold V. (411 intervenciones) el 22/08/2007 22:46:05
Ok, veamos para captar bien la idea y ayudarte mejor....

En que momento deseas que salte tu aplicacion al frente de todo, q parametros hacen que s eejcute ese codigo (en que momento traes a lfrente toda la plicacion)?????.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ventana por encima de todo

Publicado por Fany (25 intervenciones) el 23/08/2007 11:15:40
Yo tengo la aplicacion minimizada, y en un timer voy evaluando una condicion. cuando esa condicion se cumpla a la aplicacion debera aparecer por encima de todo lo que haya en ese momento abierto.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ventana por encima de todo

Publicado por Harold V. (411 intervenciones) el 23/08/2007 17:04:14
Esto te ayudara.....

Si cambias de ventana, despues de 10 seg se mostrara tu aplicacion, tanto si su Windows state = Normal o Maximized, lo que hago es comparar la hora en q salgo de mi aplicacion y guardo mi ultimo estado, luego de transcurridos los 10 seg (para este ejemplo) me activa mi aplicacion nuevamente..........

El timer lo tengo asi:

Timer,Interval=1000 '1Segundo
Timer.Enabled=True

El Codigo:

Dim StartMe As DateTime = Nothing
Dim stopMe As DateTime = Nothing
Dim MiEstado As Int32 = 0

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
stopMe = Now
'Si han transcurrido 10 segundos tu aplicacion se mostrara....
If stopMe.Subtract(StartMe).Seconds = 10 Then
Select Case MiEstado
Case 0
Me.WindowState = FormWindowState.Normal
Case 2
Me.WindowState = FormWindowState.Maximized
End Select
Me.Activate()
Me.Timer1.Enabled = False
End If
End Sub

Private Sub Form1_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.LostFocus

Me.Timer1.Enabled = True
'cuando minimices el form guardara el WindosState
MiEstado = Me.WindowState

Me.StartMe = Now
Me.Timer1.Start()

End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ventana por encima de todo

Publicado por Fany (25 intervenciones) el 24/08/2007 11:49:39
Es lo que te comentaba, si funciona si lo tienes abierto y abre mas ventanas y las pones por encima, cuando pasa cierto tiempo si que se muestra. pero lo malo es cuando minimizas la aplicacion, entonces no se muestra.
Tengo una aplicacion minimizada y quiero que me aparezca en pantalla, ese es ahora el problema.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ventana por encima de todo

Publicado por Fany (25 intervenciones) el 24/08/2007 13:50:18
Oye gracias. ya me funciona. es que tengo un formulario MDI y le estaba usando las propiedades del formulario hijo y no del form MDI.
Ahora ya me funciona. Muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Salio ?

Publicado por P. J. (706 intervenciones) el 22/08/2007 23:21:58
Pero, pero, probaste lo que te dije?, en el timer pon solo esto:

Me.WindowState = FormWindowState.Normal
Me.TopLevel = True
Me.Timer1.Enabled = False

Con eso tu aplicacion se mostrara delante de todo, Yo probe con varias ventnas maximizadas y lo hizo.

AHORA, si quieres que tu aplicacion se quede como siempre ACTIVA(o sea siempre se mostrara sin importar des click fuera), agregale

Me.TopMost = true

Ojala te sea util. Suerte!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Salio ?

Publicado por Fany (25 intervenciones) el 23/08/2007 11:14:19
Ya, pero si la minimizo ya no lo hace. Y lo tiene que hacer cuando la aplicacion esta minimizada tambien.
Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:ventana por encima de todo

Publicado por P. J. (706 intervenciones) el 22/08/2007 16:20:23
Uhmmm.

Yo en un timer con intervalo de 5 seg. puse esto

Me.WindowState = FormWindowState.Normal
Me.TopLevel = True
Me.Timer1.Enabled = False

Y abri varias ventanas, despues de los 5 seg. la aplicacion aparecio por encima de todo.

Ojala te sea util. Suerte!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar