Mostrando entradas con la etiqueta C#. Mostrar todas las entradas
Mostrando entradas con la etiqueta C#. Mostrar todas las entradas

Minimizar una aplicacion cuando otra es minimizada

Lo que necesito hacer es minimizar una aplicación escrita en C# cuando otra aplicación es minimizada.
Buscando información me topé con los HOOKS (ganchos). Con un hook se pueden procesar los mensajes que envían otras aplicaciones antes de que dichas aplicaciones respondan al mensaje. Es un rutina que se instala en el sistema y supervisa el tráfico de mensajes del sistema.
Hay 3 tipos de hook:
System hook: Intercepta mensajes del sistema.
Local system hook: Intercepta mensajes de un thread.
Global system hook: Intercepta mensajes de cualquier aplicación del sistema.

Con C# no es posible crear los gobal hooks. Se pueden crear, pero se necesita una dll en C++ que tendrá la función para procesar los mensajes.

Enlaces interesantes:
http://www.codeproject.com/csharp/globalsystemhook.asp
http://msdn.microsoft.com/msdnmag/issues/02/10/cuttingedge/
http://www.dotnetinterop.com/samples.aspx

InvokeRequired

Ya se que cuando queremos actualizar un formulario o control desde un thread distinto al que creo el control hay que usar el método Invoke o BeginInvoke pasandole un delegado a ejecutar.

Para no tener que definir el delegado podemos usar los metodos anónimos.


if( this.InvokeRequired )
{
this.Invoke( (System.Threading.ParameterizedThreadStart)delegate( object o )
{ UpdateProgressBar( current ); } , current );
}


o este si no necesitamos pasar parámetros


if( InvokeRequired )
{
this.Invoke( (MethodInvoker)delegate() { StopTest(); } );
}

C# Generics y Find

Para buscar en una lista genérica en C# un elemento que cumpla una determinada condición existe la función:
public T Find Predicate match

Para realizar una búsqueda usando Find en una sola línea de código podemos usar los Métodos Anónimos incluidos en .NET 2.0. Los métodos anónimos permiten asociar código a los objetos delegados directamente.

Así, para buscar un valor dentro de una lista con Find podremos hacer por ejemplo:

int result = CgPointCollection.Find(
delegate( XmlCgPoint point ) { return point.Name == nameToFind; } );