Présentation PowerPoint

Transcription

Présentation PowerPoint
Les API Windows Sous Excel
Et programmation Windows
L’interface de programmation Windows API (application programming interface)
offre des fonctions qui permettent de contrôler les aspects les plus infimes du
système d’exploitation
Une api est une série de fonction que l’on peut utiliser pour travailler avec un
composant, une application ou un système d’exploitation. Elle se compose de une
ou plusieurs DLL(Dynamic link Library).
L’api la plus couramment utilisé est l’api Windows qui inclut les DLL du système
d’exploitation.
Les DLL les plus couramment utilisées sont :
Kerne32.dll
Gestion mémoire et des ressources
User32.dll Traitement des messages, horloges, communication
GDI32.dll Blibliothéque graphique de windows.
Pour obtenir des informations sur les fonctions de l’API windows, deux sources
possible :
- La visionneuse d’API (APILoad.exe) permet d’afficher les constantes,
déclarations et les types d’API. Les éléments sélectionnés peuvent être copiés de la
visionneuse vers les applications VBA.
- La plate-forme Microsoft SDK, contient une documentation compléte
de l’API windows et est disponible gratuitement sur le site Microsoft.
Appel d’une fonction de l’API Windows
Pour appeler une fonction de l’api windows, utilisez la déclaration suivante :
Nb : le respect des majuscules et minuscules est obligatoire pour les noms de fonctions et procédures des DLL.
[Public|Private] Declare sub <nom_proc> lib «<nom_DLL>»[Alias« <nom_alias>»][([liste_arguments])]
[Public|Private] Declare Function <nom_fonc> lib «<nom_DLL >»[Alias«<nom_alias>»][([liste_arguments])]
Nom_proc, nom_fonc Nom de la procédure ou de la fonction tel qu’utilisé dans VBA
Nom_DLL Nom de la DLL
Nom_alias Nom de la procédure ou de la fonction dans la DLL
Liste_arguments [Optional|][Byval|ByRef][ParamArray]nomvariable()[As Type]
Nb : Certaines DLL ne procurent pas de nom pour leurs procédures ou fonctions, mais plutôt un nombre
ordinal. La déclaration de tel procédures ou fonctions utilise la même syntaxe, mais il faut définir le nombre
ordinal au niveau de l’alias sous la forme d’un diése (#) suivi du nombre « #45 ».
Passage des arguments
Les fonctions et les procédures des DLL sont écrites pour la plupart en C et font donc
référence à sa syntaxe.
Au niveau des DLL utilisant la syntaxe du C, tous les arguments sont passés par valeurs,
sauf les tableaux.
Les chaînes sont considéré comme des tableaux de caractères.
Certains arguments de procédures de DLL peuvent accepter différents types de données(un
peut comme les variants), ils doivent être déclarés avec le type Any. VBA pour ce type de
données considérer que celui ci est passé systématiquement par référence. S’il y a lieu de la
passer par valeur, il faut l’expliciter au niveau de l’appel (et non de la déclaration) e la
procédure ou de la fonction avec la mention ByVal.
Par défaut VBA passe les arguments par référence.
Exemple, lancement de la calculatrice
Public declare function FindWindow Lib « user32 » Alias « FindWindowA » (byval
lpClassName as String, ByVal lpWindowName as String) as Long
Public Declare Function FindExecutable Lib « Shell32.dll » Alias « FindExecutableA » (Byval
lpFile as String, ByVal lpDirectory as String, ByVal lpResult as String) As Long
Private function Calculatrice() As Boolean
Dim strClassName as String
Dim strWindowName as String
Dim Hwnd As Long
Dim blnExe As Boolean
Dim strRepCalc as String
Dim strResult as Long
Calculatrice=False
strClassName=vbNullString
strWindowName=« Calculatrice »
Hwnd=FindWindow(strClassName, strWindowName)
If Hwnd=0 Then
StrRepCalc=String$(255,0)
strResult=FindExecutable(« Calc.exe », »C:\ », strRepCalc)
If strResult =0 then
MsgBox « Application Calculatrice non trouvé »
Exit Function
End if
blnExe=Shell(strRepCalc,vbNormalFocus)
If Not blnExe Then
MsgBox « Le lancement de l’application à échoué »
Exit Function
End if
Else
MsgBox « L’application calculatrice est déjà active »
Exit function
End if
Calculatrice= True
MsgBox « L’application calculatrice à été lancée »
End Function
L’objet FileSearch
Cet objet permet de rechercher des fichiers en fonction d’un ensemble de critères et d’obtenir des
informations sur ces fichiers
Propriétés :
FileName : Renvoie le nom du fichier à rechercher
FileType : Renvoie ou définit le type de fichier à rechercher
LastModified : Renvoie une constante qui indique le temps qui s’est écoulé depuis la dernière
modification du fichier
Lookin : Renvoie ou définit le dossier sur lequel portera la recherche spécifique.
MatchTextExactly : les mots doivent être exact.
SearchSubFolders : Indique si la recherche inclut tous les sous-dossiers du dossier spécifique.
FoundFiles : Renvoie la collection d’objets FoundFile qui représente les fichiers trouvés au cours
d’une recherche.
SearchFolders : Renvoie une collection d’objets SearchFolder qui représente l’ensemble des
dossiers de recherche
Méthodes :
Execute : Lance la recherche du fichier spécifié
NewSearch : Rétablit les valeurs par éfaut de tous les critéres de recherche
RefreshScopes : Actualise la liste des objets ScopeFolder actuellement disponible.
Exemple
Dim i As Integer
With Application.FileSearch
.NewSearch
.lookIn=« c:\Devis »
.searchSubFolders=True
.FileName=« xls »
MatchTextExactly=True
.Execute msoSortByFileName
For i=1 to .FoundFiles.count
Cells(i,1)=.FoundFiles(i)
Next i
End With
L’objet FileSystemObject
Méthodes relatives aux fichiers
CopyFile : copie un ou plusieurs fichiers
CreateTextFile : Crée un nom de fichier spécifié et renvoie un objet TextStream
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.
OpenTextFile : Ouvre un fichier et renvoie un objet TextStream
Méthodes relatives aux dossiers
CopyFolder : Copie un répertoire
CreateFolder : Crée un dossier
DeleteFolder : Supprime un dossier spécifié et son contenu
FolderExists : Renvoie un booleen indiquant si le dossier existe.
MoveFolder : Déplace un ou plusieurs dossiers
Méthodes relatives aux lecteurs
DriveExists : Renvoie un booleen si le lecteur existe.
GetDrive : Renvoie un objet Drive correspondant au lecteur
GetDriveName : Renvoie une chaine contenant le nom du lecteur
Sub CopieFichiers()
Dim fso as object
Dim strFile as String
Dim i As Integer
Set fso=CreateObject(« Scripting.FileSystemObject »)
If Not fso.folderExists(« C:\Fichiers Excel ») Then
Fso.createFolder(« C:\Fichiers Excel »)
End If
With Application.FileSearch
.Lookin=« C:\ »
.SearchSubFolders = true
.FileType = msoFileTypeExcelWorkBooks
.Execute
For i=1 to .FoundFiles.count
fso.copyFile .FoundFiles(i), « C:\Fichiers Execel\ »
Next i
End With
End Sub