Introducción:
El término Api significa "Plataforma de interface para el desarrollo de aplicaciones". Las Api son funciones que se encuentran compiladas y almacenadas en archivos con extención dll o exe , bajo el directorio de microsoft o bien de Windows
Estas funciones son utilizadas por los programadores para desarrollar aplicaciones y realizar acciones sobre el sistema operativo y nuestros programas que de otra manera no se podrían lograr. Por ejemplo imaginen que tienen que desarrollar una aplicación y que la misma tenga una opción para cerrar o apagar el sistema. Visual basic u otros lenguajes no incorporan ninguna función para dicha tarea. Windows nos brinda una función Api llamada ExitWindowEx para realizar este procedimiento y muchas otras tareas, que desde visual basic solamente, jamás podríamos realizar. En definitiva las funciones Api son funciones externas a un lenguaje de programación. También podemos agregar que teniendo suficientes conocimientos de programación, y con un lenguaje apropiado como c++, podemos crear dichas funciones.
Estas funciones Api se encuentran almacenadas dentro de archivos con extención dll o archivos ejecutables exe en el directorio de sistema de windows, puede ser system, system32 etc.. dependiendo de la versión de la plataforma
A continuación los 5 archivos que contienen algunas de dichas funciones:
* kernel32.exe: Este este archivo, que es el núcleo del sistema operativo , reciden funciones para obtener o ejecutar funciones diversas.
* user32.exe: Este archivo contiene funciones de uso general.
* gdi32.exe: en este archivo encontramos funciones para el manejo de gráficos y todo lo relacionado con la pantalla.
* winmm.dll: Este archivo,que es una abreviación de windows multimedia, encontramos funciones para el uso de todo lo relacionado con la multimedia, por ejemplo si queremos hacer sonar un mp3, sin utilizar un control de visual basic, podemos utilizar varias funciones incorporadas en este archivo
* advapi32.dll: Este archivo contiene funciones avanzadas.
Bueno ahora como diablos se utilizan?
Para acceder una función Api desde visual basic debemos declararla en el código, esto quiere decir que le tenemos que avisar que vamos a utilizar una función que es externa. para ello se utiliza la palabra reservada: "Declare function"
Veamos la sintaxis de una función api de ejemplo para analizarla:
Private Declare Function ExitWindowsEx Lib "User32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long
Esta función Api llamada ExitWindowsEx se utiliza para cerrar windows, reiniciar el sistema, cambiar de sesión etc...(molestar a personas etc.. jeje)
La palabra "Private" indica que la función Api es de tipo Privada, o sea que solo se podrá acceder desde el formulario o módulo de código donde esté declarada. Si quisiéramos acceder a una Api desde cualquier parte de un proyecto, lo haríamos declarando la función en un módulo de código con la palabra "Public". Como cualquier función que queremos que está visible a nivel global, o simplemente poniendo "Declare Function".
Después de esto le sigue el nombre de la función que vamos a utilizar, en este caso "ExitWindowsEx", seguido de la palabra reservada lib donde indicamos el archivo que contiene la función, es decir el archivo físico en el disco, en este caso es el archivo "user32.dll".
Por último la función lleva 2 parámetros de tipo "Long", que le debemos pasar a la misma, seguido del tipo de dato que devolverá o retornará la función Api, en este caso de tipo long.
# 1 - La ventaja principal es que podemos realizar tareas que de otro modo no se podrían lograr, sin utilizar controles Activex externos.
# 2 - Si bien es mas complicado programar utilizando estas funciones, otra ventaja es que a medida que las utilizamos, cada vez comprendemos mejor el funcionamiento interno de windows, ya que estamos llamando a funciones que el mismo sistema operativo utiliza para realizar sus tareas.
# 3 - Otra ventaja es que cuando compilamos un ejecutable, no tenemos que incorporar en el paquete de instalación, las librerías y archivos externos, ya que el programa cuando se ejecute, llamará a las funciones que se encuentran en los archivos del sistema de windows.
# 4 - El tema de la sintaxis en las api es fundamental, ya que cualquier función mal escrita, o un uso mal de la función, hará que no se ejecute lo que nosotros realmente esperamos.
# 5 - Por último cabe aclarar que en este resumido tutorial y en cualquier otro tutorial que encuentres, jamás podrás ver por completo todo esto relacionado a las funciones Api, ya que son miles de funciones y no alcanzarían ni 1000 manuales como para explicar todo. El sitio con mas información es sin duda la web de Microsoft, pero la mayoría de los ejemplos no están en Visual Basic por lo tanto se complica un poco buscar información.
Primer ejemplo usando una función Api - Apagar y reiniciar Windows
El programa que consistirá en un formulario mediante el cual, por medio de un botón podremos reiniciar o cerrar windows y/o apagar la pc, utilizando para ello la función ExitWindowsEx, que se encuentra en el archivo user32.dll del directorio system de windows en win98 y system32 en win NT
En el momento que escribí esto yo lo hice en Windows 98, en windows XP se han hecho un par de modificaciones en la función, por lo tanto no funciona pero no te preocupes ahorita lo explico primero Windows 98 y luego Xp.
Pasos a seguir:
1 -Abre Visual luego pon un form, en el form principal 2 controles Optionbutton y un commandbutton. El option1, en la propiedad caption ingresa: reiniciar windows. En el option2: apagar windows. En el caption del command1 Aceptar.
2 - ahora en la sección de declaraciones vamos a declarar la función Api y dos constantes :
'Declaración de la función ExitWindowsEx
Private Declare Function ExitWindowsEx Lib "User32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long
'Constanets para la función
Const cerrarWin = 1
Const reiniciarWin = 2
Como podemos ver la función lleva 2 parámetros de tipo numéricos long: uflags y dwreserved. A nosotros el parámetro que nos interesa es el primero, y es el cual, dependiendo del valor que le pasemos, reiniciará o cerrará windows.
Las constantes "cerrarwin y reiniciarwin" son las que le pasaremos a la función.
Nota: aunque nosotros utilicemos solo el primer parámetro, en el segundo, dwreserved, debemos pasarle el valor 0.
En las propiedades del Command1 ponen esto:
Dim retorno As Long
If Option1 Then retorno = ExitWindowsEx(reiniciar, 0)
If Option2 Then retorno = ExitWindowsEx(cerrar, 0)
La variable retorno, retornará el valor de la función Api y la ejecutará, mediante una estructura if evaluamos que botón de opción esta en estado verdadero, si es el option1, a la función le pasamos la constante reiniciarwin. Si es el option2 le pasamos la otra constante.
Bueno aquí esta todo el codigo:
'Declaración de la función Api
Private Declare Function ExitWindowsEx Lib "User32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long
'Constantes para pasarle a la función
Const cerrar = 1
Const reiniciar = 2
'Código del Botón
Private Sub Command1_Click()
'Variable para retornar un valor e indicarnos si handubo bien o falló la llamada
Dim retorno As Long
'Dependiendo el Option seleccionado reiniciamos o apagamos
If Option1 Then retorno = ExitWindowsEx(reiniciar, 0)
If Option2 Then retorno = ExitWindowsEx(cerrar, 0)
End Sub