Ocultar/mostrar formulario

23/10/2004 - 19:53 por Jsink | Informe spam
Hola,

¿Hay alguna forma de saber si el form principal de mi programa esta por
encima o por detras de otro form de otra aplicacion que se este ejecutando
en el pc?

¿Es posible hacer que el form principal salga ya oculto nada mas ejecutar
la aplicacion? (oculto, no minimizado), el form no se muestra en la barra
de tareas, se oculta y se muestra mediante un notifyicon.


No consiguo encontrar ninguna funcion ni variable que me ayude en ambas
cuestiones.

Gracias.

Preguntas similare

Leer las respuestas

#1 A.Poblacion
23/10/2004 - 22:34 | Informe spam
"Jsink" wrote in message
news:
¿Hay alguna forma de saber si el form principal de mi programa esta por
encima o por detras de otro form de otra aplicacion que se este ejecutando
en el pc?



Podrias usar P/Invoke para hacer una llamada a la API de Windows. La
función GetForegroundWindow te da el handle de la ventana que está por
delante de todas. Si resulta que no es la tuya, significa que alguna otra
aplicación te la está tapando.

¿Es posible hacer que el form principal salga ya oculto nada mas ejecutar
la aplicacion? (oculto, no minimizado), el form no se muestra en la barra
de tareas, se oculta y se muestra mediante un notifyicon.



Tu aplicación arranca desde la rutina Main(). Si modificas el Main y
pones solo
MiFormulario formulario = new MiFormulario()
y no haces MiFormulario.Show(), pues entonces el form solamente se crea pero
no se muestra.
Respuesta Responder a este mensaje
#2 Jsink
24/10/2004 - 00:02 | Informe spam
A.Poblacion wrote in news:#1L9I$:

"Jsink" wrote in message
news:
¿Hay alguna forma de saber si el form principal de mi programa esta
por encima o por detras de otro form de otra aplicacion que se este
ejecutando en el pc?



Podrias usar P/Invoke para hacer una llamada a la API de Windows.
La
función GetForegroundWindow te da el handle de la ventana que está por
delante de todas. Si resulta que no es la tuya, significa que alguna
otra aplicación te la está tapando.




Esto tiene buena pinta, lo mirare. Que pena que no tenga mucha idea de la
API de windows :( .
Aqui hay una pregunta y respuesta sobre esa funcion.
http://msdn.microsoft.com/msdnmag/i...fault.aspx


¿Es posible hacer que el form principal salga ya oculto nada mas
ejecutar la aplicacion? (oculto, no minimizado), el form no se
muestra en la barra de tareas, se oculta y se muestra mediante un
notifyicon.



Tu aplicación arranca desde la rutina Main(). Si modificas el
Main y
pones solo
MiFormulario formulario = new MiFormulario()
y no haces MiFormulario.Show(), pues entonces el form solamente se
crea pero no se muestra.




La funcion Main de toda aplicacion es del tipo:

static void Main()
{
Application.Run(new Formulario());
}

Aqui no se puede tocar nada, si no se crea el formulario y se lo pasas a
Run la aplicacion se ejecuta y termina inmediatamente.

Una cosa que queria puntualizar es que quiero que la aplicacion salga
minimizada al inicio, la cual sera una opcion a alegir en dicha aplicacion,
con lo que tambien debo de poder hacer lo contrario (ejecutarla mostrarlo
el form por defecto).



Gracias por tu ayuda.
Respuesta Responder a este mensaje
#3 pablo crosio
25/10/2004 - 06:23 | Informe spam
hola!

si utilizas esta forma

static void Main()
{
Application.Run(new Formulario());
}

lo que sucede es que automaticamente se muestra el formulario

una opcion seria:

static void Main()
{
new Formulario()
Application.Run();
}

de esta forma se crea el formulario pero no se muestra; el problema aca es
como terminar el thread que se lanza en Application.Run(); con la forma
anterior, se termina automaticamente al cerrar el formulario; pero aca
deberas manejarlo vos...

podrias trabajar de la misma forma que se hace automaticamente el la primera
opcion: asociar un manejador al evento Closed del formulario el cual termine
el thread de ejecucion

salu2!!

pablo





"Jsink" escribió:

A.Poblacion wrote in news:#1L9I$:

> "Jsink" wrote in message
> news:
>> ¿Hay alguna forma de saber si el form principal de mi programa esta
>> por encima o por detras de otro form de otra aplicacion que se este
>> ejecutando en el pc?
>
> Podrias usar P/Invoke para hacer una llamada a la API de Windows.
> La
> función GetForegroundWindow te da el handle de la ventana que está por
> delante de todas. Si resulta que no es la tuya, significa que alguna
> otra aplicación te la está tapando.
>

Esto tiene buena pinta, lo mirare. Que pena que no tenga mucha idea de la
API de windows :( .
Aqui hay una pregunta y respuesta sobre esa funcion.
http://msdn.microsoft.com/msdnmag/i...fault.aspx


>> ¿Es posible hacer que el form principal salga ya oculto nada mas
>> ejecutar la aplicacion? (oculto, no minimizado), el form no se
>> muestra en la barra de tareas, se oculta y se muestra mediante un
>> notifyicon.
>
> Tu aplicación arranca desde la rutina Main(). Si modificas el
> Main y
> pones solo
> MiFormulario formulario = new MiFormulario()
> y no haces MiFormulario.Show(), pues entonces el form solamente se
> crea pero no se muestra.
>

La funcion Main de toda aplicacion es del tipo:

static void Main()
{
Application.Run(new Formulario());
}

Aqui no se puede tocar nada, si no se crea el formulario y se lo pasas a
Run la aplicacion se ejecuta y termina inmediatamente.

Una cosa que queria puntualizar es que quiero que la aplicacion salga
minimizada al inicio, la cual sera una opcion a alegir en dicha aplicacion,
con lo que tambien debo de poder hacer lo contrario (ejecutarla mostrarlo
el form por defecto).



Gracias por tu ayuda.

Respuesta Responder a este mensaje
#4 Jsink
25/10/2004 - 12:06 | Informe spam
news::


hola!

si utilizas esta forma

static void Main()
{
Application.Run(new Formulario());
}

lo que sucede es que automaticamente se muestra el formulario

una opcion seria:

static void Main()
{
new Formulario()
Application.Run();
}

de esta forma se crea el formulario pero no se muestra; el problema
aca es como terminar el thread que se lanza en Application.Run(); con
la forma anterior, se termina automaticamente al cerrar el formulario;
pero aca deberas manejarlo vos...

podrias trabajar de la misma forma que se hace automaticamente el la
primera opcion: asociar un manejador al evento Closed del formulario
el cual termine el thread de ejecucion

salu2!!

pablo





"Jsink" escribió:

A.Poblacion wrote in news:#1L9I$:

> "Jsink" wrote in message
> news:
>> ¿Hay alguna forma de saber si el form principal de mi programa
>> esta por encima o por detras de otro form de otra aplicacion que
>> se este ejecutando en el pc?
>
> Podrias usar P/Invoke para hacer una llamada a la API de
> Windows. La
> función GetForegroundWindow te da el handle de la ventana que
> està¡ por delante de todas. Si resulta que no es la tuya, significa
> que alguna otra aplicación te la està¡ tapando.
>

Esto tiene buena pinta, lo mirare. Que pena que no tenga mucha idea
de la API de windows :( .
Aqui hay una pregunta y respuesta sobre esa funcion.
http://msdn.microsoft.com/msdnmag/i...fault.aspx


>> ¿Es posible hacer que el form principal salga ya oculto nada mas
>> ejecutar la aplicacion? (oculto, no minimizado), el form no se
>> muestra en la barra de tareas, se oculta y se muestra mediante un
>> notifyicon.
>
> Tu aplicación arranca desde la rutina Main(). Si modificas el
> Main y
> pones solo
> MiFormulario formulario = new MiFormulario()
> y no haces MiFormulario.Show(), pues entonces el form solamente se
> crea pero no se muestra.
>

La funcion Main de toda aplicacion es del tipo:

static void Main()
{
Application.Run(new Formulario());
}

Aqui no se puede tocar nada, si no se crea el formulario y se lo
pasas a Run la aplicacion se ejecuta y termina inmediatamente.

Una cosa que queria puntualizar es que quiero que la aplicacion salga
minimizada al inicio, la cual sera una opcion a alegir en dicha
aplicacion, con lo que tambien debo de poder hacer lo contrario
(ejecutarla mostrarlo el form por defecto).



Gracias por tu ayuda.








Gracias, me has sido de gran ayuda.

Al final me ha quedado asi el main del form:

static void Main()
{
if (new ClaseOpciones().InicioMinimizado == false)
{
Application.Run(new FormPrincipal());
}
else
{
new FormPrincipal();
Application.Run();
}
}

Con respecto a lo que comentas de crear un manejador al evento Closed. Creo
que en mi aplicacion no hace falta, ya que la propiedad FormBorderStyle de
mi form es "None" con lo que la X no aparece. La unica forma de cerrar el
formulario principal y por consiguiente la aplicacion es mediante un menu
contextual el cual ejecuta el comando Application.Exit(). Si me equivoco me
corrigues.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida