Programmation Windows
Présentation des API
L’interface de programmation Windows API (Application Programming Interface) offre des fonctions qui vous permettent de contrôler les aspects les plus infimes du système d’exploitation. Vous pouvez étendre et personnaliser vos applications Excel en appelant des fonctions Windows API à partir de VBA. Bien qu’Excel continue à évoluer et que son langage de programmation natif (VBA) intègre de plus en plus de fonctions système, il est nécessaire pour certaines tâches d’utiliser des fonctions de l’API.
Une API est une série de fonctions que vous pouvez utiliser pour travailler avec un composant, une application ou un système d’exploitation. Elle se compose généralement d’une ou plusieurs DLL (Dynamic Link Library ou bibliothèque de liaisons dynamiques).
L’API la plus couramment utilisée est l’API Windows qui inclut les DLL constituant le système d’exploitation Windows. Chaque application Windows réagit directement ou indirectement avec l’API Windows. Celle-ci garantit un comportement cohérent à toutes les applications fonctionnant sous Windows.
Les DLL de l’application Windows les plus couramment utilisées sont les suivantes :
Kerne32.dll |
Fonctions de bas niveau du système d’exploitation, telles que la gestion de la mémoire et la gestion des ressources. |
User32.dll |
Fonctions de gestion Windows, telles que le traitement des messages, horloges, menus et communication. |
GDI32.dll |
Bibliothèque GDI (Graphics Device Interface) qui contient des fonctions de sortie vers les périphériques (graphisme, contexte d’affichage et gestion des polices). |
D’autres API sont également disponibles comme par exemple l’interface MAPI (Mail Application Programming...
Appel d’une fonction de l’API Windows
Pour appeler une fonction de l’API Windows, vous devez la déclarer en utilisant l’instruction Declare dans la section Déclarations d’un module de votre projet (généralement un module spécifique aux procédures générales à l’application).
1. Syntaxe de l’instruction Declare
Le respect des minuscules et majuscules est obligatoire pour les noms de fonctions et procédures des DLL.
Déclaration d’une procédure API :
[Public|Private] [PtrSafe] Declare Sub <nom_proc> Lib <nom_DLL>" _
[Alias <nom_alias>] [<liste_arguments>]
Déclaration d’une function API :
[Public|Private] [PtrSafe] Declare Function <nom_fonc> Lib "<nom_DLL>" _
[Alias "<nom_alias>"] [([liste_arguments])] [As <type>]
PtrSafe |
Mot-clé à utiliser dans les versions 64 bits d’Excel. |
nom_proc, nom_fonc |
Nom de la procédure ou de la fonction tel qu’utilisé dans Visual Basic. |
nom_DLL |
Nom de la DLL. |
nom_alias |
Nom de la procédure ou de la fonction dans la DLL. |
liste_arguments |
Liste des paramètres de l’API. |
type |
Type de la valeur retournée par la fonction. |
2. Passage des arguments
Les fonctions et procédures des DLL sont écrites pour la plupart en langage C et font donc référence à sa syntaxe. Aussi, le passage d’arguments à une procédure ou une fonction d’une DLL en VBA n’est pas toujours simple. Au niveau des DLL utilisant la syntaxe du C, tous les arguments sont passés par valeurs, sauf les tableaux.
Les chaînes en langage C sont considérées comme des tableaux de caractères.
Certains arguments des procédures de DLL peuvent accepter différents types de données...
Liste de fonctions API Windows
Cette liste comporte les fonctions de l’API Windows couramment utilisées. Des exemples d’utilisation de certaines de ces fonctions sont décrits dans la section suivante.
GetWindowsDirectory
Renvoie le chemin complet du répertoire de Windows.
GetSystemDirectory
Renvoie le chemin complet du répertoire système de Windows.
GetSystemInfo
Renvoie toute une série d’informations sur le système. Ces données sont stockées dans une structure de type SYSTEM_INFO.
GetActiveWindow
Renvoie le handle de la fenêtre active.
FindExecutable
La fonction retourne le nom et le chemin de l’application associée à un fichier (application associée à l’extension du fichier).
FindWindow
Renvoie le handle de la fenêtre en fonction de son nom et de la classe à partir de laquelle elle a été définie.
GetPrivateProfileString
Renvoie une option d’un fichier Ini à partir d’un nom de section et de clé.
GetTempPath
Renvoie le chemin vers le dossier temporaire du système.
GetUserName
Renvoie le nom de l’utilisateur.
WNetGetUser
Renvoie le nom du login réseau.
SetFocus
Attribue le focus d’entrée à la fenêtre référencée par son handle.
Exemples d’utilisation de fonctions API Windows
1. Récupération du répertoire Windows
Déclaration de la fonction API :
' Cette fonction API renvoie le répertoire Windows
Private Declare Function GetWindowsDirectory _
Lib "kernel32" Alias "GetWindowsDirectoryA" _
(ByVal lpWindowsDir As String, _
ByVal lpWindowsHeight As Long) _
As Long
Appel de la fonction API :
Function GetWinPath() As String
' Cette fonction VBA renvoie le répertoire Windows
Dim StrResult As String
Dim StrProfile As String
StrResult = String(255, " ")
StrProfile = GetWindowsDirectory(StrResult, 255)
' Tronque la chaîne au premier caractère nul
If StrProfile <> "" Then
StrResult = Trim(StrResult)
GetWinPath = Left(StrResult, InStr(1, StrResult, vbNullChar) - 1)
Else
GetWinPath = ""
End If
End Function
2. Lancement de la calculatrice Windows
Cet exemple permet de tester si la calculatrice Windows est déjà active, et de lancer son exécution sinon.
Deux fonctions API sont ici utilisées : la première, FindWindow, permet de rechercher la fenêtre "Calculatrice" ; la deuxième, FindExecutable, permet de rechercher l’emplacement du fichier Calc.exe.
Déclaration de la fonction API :
' Cette fonction API recherche une fenêtre
Public Declare Function FindWindow Lib "user32" Alias _ "FindWindowA"
(ByVal lpClassName As String, ByVal _
lpWindowName As String) As Long
' Cette fonction API recherche...
L’objet FileSystemObject
L’objet FileSystemObject donne accès au système de fichiers d’un ordinateur. Il permet notamment de rechercher, créer, supprimer, déplacer des fichiers ou des dossiers.
1. Méthodes
Méthodes relatives aux fichiers
CopyFile
Copie un ou plusieurs fichiers d’un emplacement vers un autre.
CreateTextFile
Crée un nom de fichier spécifié et renvoie un objet TextStream pouvant être utilisé pour lire ou écrire dans le fichier.
DeleteFile
Supprime un fichier spécifié.
FileExists
Renvoie un booléen indiquant si le fichier spécifié existe.
MoveFile
Déplace un ou plusieurs fichiers d’un emplacement vers un autre.
OpenTextFile
Ouvre un fichier spécifié et renvoie un objet TextStream pouvant être utilisé pour lire un fichier ou y effectuer un ajout.
Méthodes relatives aux dossiers
CopyFolder
Copie un dossier d’un emplacement vers un autre.
CreateFolder
Crée un dossier.
DeleteFolder
Supprime un dossier spécifié et son contenu.
FolderExists
Renvoie un booléen indiquant si le dossier spécifié existe.
MoveFolder
Déplace un ou plusieurs dossiers d’un emplacement vers un autre.
Méthodes relatives aux lecteurs
DriveExists
Renvoie un booléen indiquant si le lecteur spécifié existe.
GetDrive
Renvoie un objet Drive correspondant au lecteur pour un chemin spécifié.
GetDriveName
Renvoie une chaîne contenant le nom du lecteur pour un chemin spécifié.
2. Propriété
Drives
Renvoie une collection constituée de tous les objets Drive disponibles sur la machine locale.
3. Exemple : copie de fichiers Excel
L’exemple suivant recherche tous les fichiers Excel situés dans le même dossier que le classeur actif et les copie...