Sección de tutoriales y manuales vb

Tutorial Api de windows - parte 1

Parte 1 - Parte 2 - Parte 3



 

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 sistema 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 imaginá que tenés 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 las principales funciones api:

 

¿ Cómo se utilizan las funciones Api ?

 

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...

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.

Esta función es muy simple de usar y en el capítulo siguiente hay un ejemplo de como usarla para cerrar windows.

Para terminar con esta introducción, aclaremos algunas de las ventajas que tenemos y alguna otra sugerencia al usar estas funciones:

 

Primer ejemplo usando una función Api - Apagar y reiniciar Windows

 

Como mencionamos anteriormente, vamos a realizar un ejemplo para ir conociendo esto de las funciones Api.

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 correctamente, por lo menos yo no pude hacerlo. En la sección Api hay un ejemplo para hacerlo en Xp y la dirección es esta:

Apagar, reiniciar y logout en Windows NT

 

Primer ejemplo en el uso de las funciones Api - Reiniciar y apagar el sistema

 

Pasos a seguir:

1 - Abrí el visual e insertá 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.

3 - En el evento click del Command1 escribe la siguiente rutina:

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.

 

El código completo:

'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

 


 

Ejemplo 2 - Obtener información de las unidades de disco.


 

En este ejemplo vamos a utilizar una función Api llamada GetVolumeInformation. Esta función es muy simple de utilizar y la función que tiene es la de recuperar información de las unidades de nuestra pc.


Cuando hablamos de unidades estamos hablando de cualquier unidad accesible, ya sea las unidades fijas como la c o las particiones que pueda haber en el sistema, las unidades de disquetes o de cd-rom, unidades de red, etc...

La información que podemos recuperar con la función GetVolumeInformation:

El número de serie, el nombre del volumen , el sistema de archivos de la unidad a la cual le especifiquemos en la función.

 

Vista previa del ejemplo:

 

Vista previa del ejemplo GetVolumeInformation

 

La declaración completa de la función GetVolumeInformation es la siguiente:

'Declaración de GetVolumeInformation
Private Declare Function GetVolumeInformation Lib "Kernel32" Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long) As Long

 

Descripción de la función Api GetVolumeInformation:

 

Como podemos ver la función se encuentra en el archivo kernell32.exe y seguido el nombre del alias de la función dentro del archivo para que sea identificada.

En el primer parámetro llamado lpRootPathName de tipo String, nosotros debemos enviarle el nombre de la unidad que deseamos tener información, unidad a,c,d, etc...

El segundo parámetro llamado lpVolumeNameBuffer de tipo string, tenemos que pasarle una variable que almacenará el nombre del volumen de la unidad.

El tercer parámetro no nos interesa. El cuarto, lpVolumeSerialNumber hay que pasar una variable que almacenará el número de serie de la unidad

El quinto, sexto y octavo parámetro no nos interesa.

El séptimo, llamado lpFileSystemNameBuffer, nos devolverá el nombre del sistema de archivos de dicha unidad, por ejemplo Fat16, Fat32, NTFS,

 

Pasos a seguir:


1 - Crea un nuevo proyecto. En el form principal agrega los siguientes controles:

 

El código completo :

'Declaración de la función APi GetVolumeInformation
Private Declare Function GetVolumeInformation Lib "Kernel32" Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long) As Long


Private Sub Command1_Click()
'Para almacenar la unidad elegida del DriveListBox
Dim unidad As String
'Variable que retorna el Numero de serie del volumen
Dim Nserie As Long
'Para almacenar el sistema de archivos
Dim sistemaArchivos As String
'Para retornar el nombre del volumen
Dim volumen As String
'Para saber si funcionó o no la llamada a la función Api
Dim retorno As Long

volumen = String$(255, Chr$(0))

sistemaArchivos = String$(255, Chr$(0))

unidad = Drive1

unidad = Left(unidad, 2) & "\"
'Llamamos a la función, pasandole las variables
retorno = GetVolumeInformation(unidad, volumen, Len(volumen), Nserie, 0, 0, sistemaArchivos, Len(sistemaArchivos))

'Mostramos los valores retornados y los mostramos en los controles Label
LabelVol = Trim(volumen)
LabelSerie = Nserie
LabelSA = Trim(sistemaArchivos)
End Sub

Private Sub Command2_Click()
'Finalizamos el programa
End
End Sub

Private Sub Drive1_Change()
On Local Error Resume Next
End Sub

 

La variable unidad, que es de tipo string, y contendrá el valor de la unidad seleccionada en el drive1. Para poder pasarla a la función Api correctamente, debemos agregarle la barra invertida "\"

Después las variables Nserie, sistemaArchivos y volumen se la pasamos como parámetro a la función para almacenar y retornar los valores.

Por último mostramos el valor de las variables en los Labels

 


Api parte 1 - Api parte 2 - Api parte 3

 

 


Buscar en Recursos vb