Llamadas al sistema de Windows desde C#

Como escribir un programa C# que hace llamadas al Sistema de Windows y sus apis

Para este ejemplo he decido usar el API GetTickCount() que devuelve un valor entero y no lleva datos entrada.

Su prototipo es:

Int GetTickCount(void) y se encuentra almacenada en Kernel32.dll, Esta api nos regresa un entero con los milisegundo que ha estado encendida nuestra PC.

La importación de la api se hace en una sola línea, el resto de código es simple programación objetos.

Declararemos una Clase, crearemos sus métodos para explotar el api, hacemos una instancia de la clase (un objeto) y lo usamos para acceder a los métodos y solo como practica usamos el constructor y destructor para advertir que el objeto ha iniciado y cuando ha sido destruido.

Para incluir el API requerimos saber en que DLL esta y luego importar su prototipo, requerimos declarar en el using System.Runtime.InteropServices;

Y lo importamos de esta manera.

[DllImport (“Kernel32.dll”)] public static extern int GetTickCount();

Y con eso hemos incluido el api como un método estático de nuestra clase y esta listo para usarse.

[DllImport (“archivo.dll?)] sirve para indicar en donde se encuentra el api que usaremos

Extern sirve para indicar a C# que el código del método esta externo a la clase, de hecho en kernel32.dll

La importación de código es útil para explotar recursos en el sistema operativo, sin embargo al hacer uso de este tipo de recursos hemos amarrado el programa a la plataforma que provee el recurso, así que nuestro programa ha perdido portabilidad pero ha ganado capacidades en el entorno Windows de Microsoft.

El código es el siguiente:

using System;
using System.Runtime.InteropServices;

namespace CSCallback
{
class MainClass
{
[DllImport (“Kernel32.dll”)] public static extern int GetTickCount();

public MainClass ()
{
Console.WriteLine (“\nObjeto de la clase (” + this.ToString () + “) Construido.”);
Console.WriteLine (“\nEste programa accesa al Kernel.Dll y usa la API GetTickCount\n\nTiempo con la computadora en linea:\n”);
}

public int segundos ()
{
return GetTickCount() / 1000;
}

public int minutos ()
{
return GetTickCount() / 60000;
}

public int horas()
{
return (GetTickCount() / 60000) / 60;
}

public int dias()
{
return (GetTickCount() / 60000) / 60 /24;
}

~MainClass()
{
Console.WriteLine (“\nObjeto Destruido\n”);
}

public static void Main(string[] args)
{
MainClass cpuenlinea = new MainClass ();

Console.WriteLine (“Segundos: {0}\nMinutos: {1}\nHoras: {2}\nDias: {3}\n”,cpuenlinea.segundos() ,cpuenlinea.minutos(),cpuenlinea.horas(),cpuenlinea.dias());

Console.WriteLine (“Preciona Enter para terminar”);
Console.ReadLine ();

}
}
}

Reescribí el mismo programa usando Windows.Form por si alguno lo desea usar como un programa de colección o “Cosas curiosas?, el programa incluye en si mismo su código en C#

Version Windows.Form del programa

Descargar los programas compilados y su codigo fuente – > AQUI

One Response

Add a Comment

Comment spam protected by SpamBam