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