vanara

Cómo usar el API de Windows con C# Vanara

Vanar es una biblioteca de C# que permite a los desarrolladores de .NET acceder fácilmente a las funciones disponibles en el API de Windows.

Acceder al API de Windows nos permite realizar una gran cantidad de opciones que no podríamos realizar de otra forma. Pero en general, su uso es complejo y propenso a errores.

Vanara está diseñada para facilitarnos esta labor de interop, proporcionando una forma segura y fácil, sin necesidad de usar código no seguro.

Por ejemplo, Vanara proporciona funciones para trabajar con la lista de procesos del sistema, para manejar archivos y directorios, para trabajar con la red, entre otras. También proporciona una serie de clases de seguridad para trabajar con certificados digitales, criptografía y autenticación.

Si miramos la cantidad de ensamblajes y funciones que proporciona Vanara, simplemente es una locura. Afortunadamente la documentación del proyecto es muy buena. Y, aún así, difícil hacerse idea de la cantidad de funciones que hay ahí.

Cómo usar Vanara

La cantidad de funciones existentes en Vanara es tan grande que, según la propia documentación de la librería, la forma recomendada de usarla es la siguiente,

  1. Primero buscamos la función que necesitamos en la documentación de Microsoft, y apuntamos en que biblioteca o DLL en la que se encuentra.
  2. Comprobamos que el equivalente de esta biblioteca existe en Vanara, y tiene la función que necesitamos. Para ello revisamos la tabla de bibliotecas de la página web del proyecto.
  3. Con eso obtendríamos el nombre el Nuget que necesitamos. Lo descargamos y lo añadimos a la solución
  4. Ya podemos usar la función con Vanara.

Por ejemplo si necesitamos la función GetComputerName, buscamos en la documentación de Microsoft y, al final, de la página, nos indica que forma parte de Kernel32.

Ahora vamos a la documentación de Vanara.Kernel32 y comprobamos que la función existe.

Añadimos el paquete Nuget correspondiente,

Install-Package Vanara.PInvoke.Kernel32

Y ya podemos usar la función en nuestro código.

using static Vanara.PInvoke.Kernel32;

var sbSz = 0;
var sb = new StringBuilder(sbSz);

// Obtener el nombre del equipo y mostrarlo en la consola
if (Kernel32.GetComputerName(sb, ref sbSz))
{
    Console.WriteLine($"Nombre del equipo: {sb}");
}
else
{
    Console.WriteLine($"Error al obtener el nombre del equipo: {Win32Error.GetLastError()}");
}

Si por ejemplo necesitamos la función FindWindowA vamos a la documentación de de Microsoft y vemos que forma parte de User32.dll.

Añadimos el paquete Nuget correspondiente,

Install-Package Vanara.PInvoke.User32

Y ya podemos usar la función en nuestro código.

string windowTitle = "Mi Ventana"; // El título de la ventana que queremos encontrar

var hWnd = FindWindow(null, windowTitle);
if (hWnd != default)
{
	Console.WriteLine($"La ventana '{windowTitle}' fue encontrada con el handle: {hWnd}");
}
else
{
	Console.WriteLine($"La ventana '{windowTitle}' no fue encontrada.");
}

Evidentemente, no es la librería más sencilla de usar. Pero, es que las acciones Interop, y más con el API de Windows, nunca son del todo fáciles.

Con Vanara tenemos casi todas las funciones del API de Windows en funciones C#. Esto nos permite hacer muchas funciones que no son posibles de otra forma, y es mucho más fácil y seguro que usar las DLL directamente.