Developer's Diary

10 marzo, 2012

Introducción y API FindWindow

Filed under: .net, API, Curso C#, Etiqueta en el codigo, Programación — Etiquetas: , , , — jnavero @ 2:30 PM

—- Nos mudamos: http://devthisblog.namocode.es
—————————————————————–

Introducción

Antes de comenzar a ver las APIs del sistema, una breve introducción

En esta introducción no voy a ver que es una API no para que sirven, es algo que lo doy por sabido. Después de buscar información por internet, en diferentes foros de programación, páginas web etc…

Siempre vemos las Apis de esta forma:

HWND WINAPI FindWindow(

__in_opt  LPCTSTR lpClassName,

__in_opt  LPCTSTR lpWindowName

);

Aquí es donde podemos preguntarnos qué significan la mitad de las cosas que estamos viendo, tenemos claro que FindWindow es la función que queremos llamar pero, el resto…

A medida que vayamos mostrando funciones iremos viendo los tipos de datos que se emplean en cada una de las fichas creadas, así como los ejemplos necesarios para la utilización de la api con código real en .NET

Hay muchos tipos de datos como para ponernos a explicar uno a uno, y considero que es una tarea tediosa tanto el redactarla como para leerla y/o entenderla.

Con esto comienzo con la primera ficha. Api FindWidows.

API: FindWindow

Tipo de Función: Información sobre ventanas.

Descripción: Función que recorre todas las ventanas y recupera el manejador de la ventana (Solamente recorre ventanas primarias, las secundarias no las recorre)

Función: La definición de la función es la siguiente:

HWND WINAPI FindWindow(

__in_opt  LPCTSTR lpClassName,

__in_opt  LPCTSTR lpWindowName

);

 

Parámetros:

lpClassName: Puntero a cadena de caracteres (Distingue entre mayúsculas y minúsculas). Indica el nombre de la clase a la que hace referencia la ventana.

lpWindowName: Puntero a cadena de caracteres (Distingue entre mayúsculas y minúsculas). Indica el nombre de la ventana propiamente dicho.

Retorna el manejador de la ventana (Handle) con el nombre de la ventana y el nombre de la clase de la ventana específica.

Ejemplo: Ejemplo de utilización de la API.

Para este ejemplo he creado un formulario Windows con dos botones.

VB.

Imports System.Runtime.InteropServices

Public Class Form1

Declare Auto Function FindWindow Lib “USER32.DLL” (ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr

Private Sub btnNombre_Click(sender As System.Object, e As System.EventArgs) Handles btnNombre.Click

Dim ptr As IntPtr = FindWindow(Nothing, “Formulario”)

If ptr <> IntPtr.Zero Then MessageBox.Show(“Encontrado handle: ” + ptr.ToString)

End Sub

Private Sub btnSalir_Click(sender As System.Object, e As System.EventArgs) Handles btnSalir.Click

Me.Close()

End Sub

End Class

C#

using System;

using System.Runtime.InteropServices;

using System.Windows.Forms;

namespace FindWindow

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

[DllImport(“USER32.DLL”)]

public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

private void BtnNombre_Click(object sender, EventArgs e)

{

IntPtr pr = FindWindow(null, “Formulario”);

if ( pr != IntPtr.Zero)

MessageBox.Show(“Encontrado Handle: ” + pr.ToString());

}

private void btnSalir_Click(object sender, EventArgs e)

{

this.Close();

}

}

}

Breve explicación:

Para poder utilizar llamadas a librerías con DllImport, debemos agregar la instrucción imports / using System.Runtime.InteropServices.

La apli FindWindow se encuentra en user32.dll por lo que usamos DllImport(“user32.dll”) para a continuación hacer referencia a la función concreta. Una vez declarada la función que vamos a utilizar, programamos el evento click de uno de los botones del formulario. Cuando usamos la api, nos retorna un número, este número es el handle (en manejador) de la ventana. Lo normal es buscar la ventana por su nombre ya que no siempre disponemos del nombre de la clase. Existen programas para poder ver esos datos como el spy++ o My spy, pero no voy en profundizar más en ello.

Con este post, adjunto la ficha en PDF que podemos descargar aqui ApiFindWindow.

Además el código fuente de ejemplo aqui (Incluye C# y VB para Visual Studio 2010)

Anuncios

Dejar un comentario »

Aún no hay comentarios.

RSS feed for comments on this post. TrackBack URI

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: