Programación en Windows
Presentación de las API
La interfaz de programación de Windows API (Application Programming Interface) ofrece funciones que le permiten controlar los aspectos más ínfimos del sistema. Puede extender y personalizar sus aplicaciones de Excel llamando a funciones de Windows API desde VBA. Si bien Excel continúa evolucionando y su lenguaje de programación nativo (VBA) integra cada vez más funciones de sistema, para ciertas tareas se deben usar las funciones API.
Una API es una serie de funciones que se pueden usar para trabajar con un componente, una aplicación o un sistema operativo. Se compone generalmente de uno o más archivos DLL (Dynamic Link Library o biblioteca de vínculos dinámicos).
La API más usada es la API de Windows, que incluye las DLL que forman el sistema operativo Windows. Cada aplicación de Windows interactúa directa o indirectamente con la API de Windows. Esto garantiza un comportamiento coherente de todas las aplicaciones que funcionan bajo Windows.
Las DLL de la aplicación Windows más usadas son las siguientes:
Kernel32.dll |
Funciones de bajo nivel del sistema operativo, tales como la administración de memoria y de recursos. |
User32.dll |
Funciones de administración de Windows, tales como el tratamiento de mensajes, relojes, menús y comunicación. |
GDI32.dll |
Biblioteca GDI (Graphics Device Interface), que contiene las funciones... |
Llamar a una función de la API de Windows
Para llamar a una función de la API de Windows, se debe declarar con la instrucción Declare en la sección Declaraciones de un módulo del proyecto (generalmente un módulo específico de los procedimientos generales de la aplicación).
1. Sintaxis de la instrucción Declare
Se deben respetar las minúsculas y mayúsculas en los nombres de funciones y procedimientos de las DLL.
Declaración de un procedimiento API:
[Public|Private] [PtrSafe] Declare Sub <nom_proc> Lib "<nom_DLL>"_
[Alias <nom_alias>] [<lista_argumentos>]
Declaración de una función API:
[Public|Private] [PtrSafe] Declare Function <nom_fonc> Lib "<nom_DLL>"_
[Alias "<nom_alias>"] [([lista_argumentos])] [As <type>]
PtrSafe |
Palabra clave que se debe utilizar en las ver-siones de 64 bits de Excel. |
nom_proc, nom_fonc |
Nombre del procedimiento o de la función usada en Visual Basic. |
nom_DLL |
Nombre de la DLL. |
nom_alias |
Nombre del procedimiento o de la función en la DLL. |
lista_argumentos |
Lista de los parámetros de la API. |
type |
Tipo del valor que devuelve la función. |
2. Paso de argumentos
Las funciones y procedimientos de las DLL están escritos principalmente en lenguaje C y hacen, por lo tanto, referencia a su sintaxis. Por eso, el paso de argumentos a un procedimiento...
Lista de funciones API de Windows
Esta lista incluye las funciones de la API de Windows usadas habitualmente. Los ejemplos de uso de algunas de estas funciones se describen en la siguiente sección.
GetWindowsDirectory
Devuelve la ruta completa del directorio de Windows.
GetSystemDirectory
Devuelve la ruta completa del directorio de sistema de Windows.
GetSystemInfo
Devuelve una serie de datos sobre el sistema. Estos datos se almacenan en una estructura de tipo SYSTEM_INFO.
GetActiveWindow
Devuelve el identificador de la ventana activa.
FindExecutable
Retorna el nombre y la ruta de la aplicación asociados a un archivo (aplicación asociada a la extensión del archivo).
FindWindow
Devuelve el identificador de la ventana en función de su nombre y de la clase a partir de la cual se definió.
GetPrivateProfileString
Devuelve una opción de un archivo Ini a partir de un nombre de sección y de clave.
GetTempPath
Devuelve la ruta a la carpeta temporal del sistema.
GetUserName
Devuelve el nombre del usuario.
WNetGetUser
Devuelve el nombre de login de red.
SetFocus
Pone el foco de entrada en la ventana referenciada por su identificador.
Ejemplos de uso de funciones API de Windows
1. Recuperar el directorio Windows
Declaración de la función API:
' Esta función API devuelve el directorio Windows '
Private Declare Function GetWindowsDirectory _
Lib "kernel32" Alias "GetWindowsDirectoryA" _
(ByVal lpWindowsDir As String, _
ByVal lpWindowsHeight As Long) _
As Long
Llamada de la función API:
Function GetWinPath() As String
' Esta función VBA devuelve el directorio Windows
Dim StrResult As String
Dim StrProfile As String
StrResult = String(255, " ")
StrProfile = GetWindowsDirectory(StrResult, 255)
' Corta la cadena al primer carácter nulo
If StrProfile <> "" Then
StrResult = Trim(StrResult)
GetWinPath = Left(StrResult, InStr(1, StrResult, vbNullChar) - 1)
Else
GetWinPath = ""
End If
End Function
2. Abrir la calculadora de Windows
Este ejemplo prueba si la calculadora de Windows está activa, y la inicia si no lo está.
Aquí...
El objeto FileSystemObject
El objeto FileSystemObject proporciona acceso al sistema de archivos de un equipo. Permite especialmente buscar, crear, eliminar y mover archivos o carpetas.
1. Métodos
Métodos relativos a los archivos
CopyFile
Copia uno o más archivos de un lugar a otro.
CreateTextFile
Crea un nombre de archivo especificado y devuelve un objeto TextStream que se puede utilizar para leer o escribir en un archivo.
DeleteFile
Elimina un archivo especificado.
FileExists
Devuelve un valor booleano que indica si existe el archivo especificado.
MoveFile
Mueve uno o más archivos de un lugar a otro.
OpenTextFile
Abre el archivo especificado y devuelve un objeto TextStream que se puede utilizar para leer el archivo o agregar datos.
Métodos relativos a las carpetas
CopyFolder
Copia una carpeta de un lugar a otro.
CreateFolder
Crea una carpeta.
DeleteFolder
Elimina una carpeta especificada junto con su contenido.
FolderExists
Devuelve un valor booleano que indica si existe la carpeta especificada.
MoveFolder
Mueve una o más carpetas de un lugar a otro.
Métodos relativos a las unidades de disco
DriveExists
Devuelve un valor booleano que indica si existe la unidad especificada.
GetDrive
Devuelve un objeto Drive que corresponde a la unidad para la ruta especificada.
GetDriveName
Devuelve una cadena que contiene el nombre de la unidad para una ruta especificada.
2. Propiedades
Drives
Devuelve una colección formada...