![]()
INTRODUCTION AUX API
Introduction
Structure de la fonction API
Paramètres ByVal ou ByRef
La Visionneuse d'API
Quelle API Utiliser ?
Conclusion
Vous avez peut-être déjà remarqué que les fonctions internes de Visual Basic ne vous permettaient pas un accès total au fonctionnalités du système d'exploitation tel que le changement de papier paint du bureau, l'insértion d'icônes dans les menus... Pourtant Windows est livré avec un ensemble de fonctions destinées au programmeur permettant d'executer chacune de ces tâches : cet ensemble de fonctions permettant de controler le système d'exploitation est appelé API (Application Programming Interface, je crois :-).
A travers les API, Windows ouvre grandement ses portes au programmeur. Ces fonctions API sont en fait stockées dans des librairies dlls tels que "kernel32.dll", "user32.dll"... dont la plus part se situent dans le répertoire Windows/System.
Les fonctions API sont assez proches des fonctions Visual Basic, au fait elles s'utilisent de la même façon que les fonctions Visual Basic aux seules différences que :
Déclaration de la fonction API
Prenons un exemple simple: La fonction SetCursorPos qui position le pointeur de la souris à un endroit précis (ce qui est impossible avec Visual Basic d'ailleurs)
| Public Declare Function SetCursorPos Lib "user32" Alias "SetCursorPos" (ByVal x As Long, ByVal y As Long) As Long |
Public définit la portée de la fonction SetCursorPos. Dans ce cas (Public), la fonction peut être appelée n'importe où dans le projet. Si vous remplacez Public par Private la fonction ne sera disponible que dans le module où elle a été déclarée. Notez qu'en même que Public ne peut pas être utilisé dans des modules de Feuille.
Declare Function est utilisé pour indiquer à Visual Basic qu'il s'agit de la déclaration d'une fonction (et non d'une définition/création de fonction).
SetCursorPos spécifie le nom de fonction qui sera utilisé pour appeler cette dernière dans le projet. Vous pouvez spécifier n'importe quel nom pour la fonction (et bien sûr utiliser le même nom pour l'appeler) à condition que ce-dernier respecte les normes d'attribution de nom.
Lib "user32" désigne la librairie (dll) d'où est tirée la fonction. Notez qu'on aurait bien pu mettre Lib "user32.dll" ou Lib "C:\Windows\System\user32.dll", mais on n'a pas besoin ici de spécifier l'extension .dll parce que c'est une librairie Windows. Par contre si la librairie est une dll crée par un programmeur indépendant et qu'elle se trouve par exemple dans le répertoire C:\MesDllAdorées, on devra UNIQUEMENT écrire Lib "C:\MesDllAdorées\MaDLL.dll".
Alias "SetCursorPos" indique le nom de la fonction dans la dll. Et puisque cette dll a été écrite en C++, le nom de cette fonction est case-sensitive c-à-d que Alias "setcurSorPos" est différent de Alias "SetCursorPos": je vous aurai prevenu, faites donc attention.
(ByVal x As Long, ByVal y As Long) spécifie les paramètres nécessaires à la fonction. La manipulation de ces paramètres est la même que celle de fonctions simples. Nous verrons plus loin brièvement l'utilisation de ByVal et de ByRef.
As Long spécifie le type de données renvoyé par la fonction.
Utilisation de la fonction API
L'Utilisation d'une fonction API est la même que celle
d'une simple fonction Visual Basic.
Exemple: on utilise l'API déclarée précédement (NOTE: l'API Public
a été déclarée dans un module standare) pour bouger le pointeur de la souris.
| Private Sub Form_Load() ' Fait bouger la souris dans tous les ' sens pendant 4 secondes Dim CurTime, Diff As Long CurTime = Timer Do SetCursorPos Rnd * 600, Rnd * 400 Diff = Timer - CurTime DoEvents Loop While Diff <= 4 End Sub |
C'est simple.
La plupart des fonctions API que vous rencontrerez auront devant leurs paramètres soit un ByVal ou un ByRef... Il est important de savoir quelle est leur signification.
Lorsque vous passez une variable par Valeur (ByVal), comme ici:
| Dir VarX, VarY As Long VarX = 200 : VarY = 100 SetCursorPos ByVal VarX, ByVal VarY |
la fonction se contente de prendre le contenu des variables pour effectuer ses traitements, il ne peut pas modifier les variables VarX et VarY.
Lorsque vous passez une variable par Réference (ByRef), comme ici (Qui prend le rectangle de la fenêtre Form1):
| Dir rRect As RECT GetWindowRect ByVal Form1.hwnd, ByRef rRect |
la fonction fait le traitement en étant capable de modifier la variable rRect, elle possède une référence de l'allocation mémoire où est stockée rRect donc peut y accéder.
En C++, quand c'est ByVal on parle de contenu de Variable et quand c'est ByRef on parle de pointeur de variable... ne nous éloignons pas trop, le C++ est beaucoup plus complexe que Visual Basic.
Vous comprenez donc rapidement qu'il faut mettre l'oeil sur les fonctions avec des variables passées par référence car la fonction utilise souvent ce type de variable pour renvoyer des données (de type autre que Long en l'occurence) à l'application. Ici, GetWindowRect prend le rectangle de la fenêtre Form1 et le met dans rRect, on peut ensuite utiliser rRect pour continuer dans le programme.
L'environnement de Visual Basic 6 Entreprisel (je sais pas pour les autres versions) intègre une visionneuse d'API qui permet de lister toutes les API de Windows.
Pour la charger allez sur "Compléments/Gestionnaire de complément", puis sélectionnez "Visionneuse D'API" et cocher "Charger" puis cliquez sur OK. Allez de nouveau sur "Compléments/Visionneuse d'API". La visionneuse se charge, cliquez sur "Fichier/Charger le fichier texte" puis sélectionnez le fichier Win32Api.txt ou Mapi.txt.

Il vous suffit maintenant de cliquer sur l'API qui vous interesse et vous obtenez se déclaration. Vous pouvez ainsi insérer automatiquement la déclaration dans votre module standare.
Il existe des API qui prennent en paramètres des constantes prédéfinies. Si vous connaissez par exemple le nom de la constante demandée par une API mais que vous ne connaissez pas sa valeur, vous pouvez trouver cette dernière grâce à la Visionneuse d'API. Il suffit de sélectionner "Constantes" dans la liste "Type d'API" et ensuite de sélectionner le nom de la constante. La visionneuse ajoute cette constante avec sa valeur au projet.
Bon, vous avez la liste des API, mais vous n'avez aucune description, aucune explication de chacune d'elle: c'est là que résulte la véritable difficulté dans l'utilisation des API. Et Malheuresement, l'aide en ligne de Visual Basic ne possède pas de liste explicative de ces API.
Et il y a un autre problème: même si on connaît l'utilité d'une API, il reste encore à savoir quel type de paramètres il faut passer, comment interpreter le résultat obtenu...
Je vous propose quatre solutions qui sont tous liées au C++:
Je vous ai dis plus haut que les dll
systèmes étaient écrites en C++, et bien la plupart des compilateurs C++ possèdent une
documentation COMPLETE sur toutes les API Windows.
Il suffit donc de se procurer l'aide en ligne d'un compilateur C++ (je parle de
Borland C++ ou de Visual C++) et d'adapter le code C++ en code Visual Basic, ce qui est
d'ailleurs facile.
Vous pouvez vous connecter sur le site web de Mr. Microsoft, et aller dans le Microsoft Developer Network ( http://msdn.microsoft.com ) puis choisir la rubrique Win32 SDK Documentation. Ils proposent une liste complete et expliquée de toutes les API.
Vous pouvez télécharger le fichier Win32.hlp qui contient une doc sur toutes les API (7Mo): Télécharger.
En dernier recours, prenez la peine de sortir 300FF de poche pour vous offrir un bon livre qui traite spécialement des API pour Visual Basic.
FONCTIONNEMENT
Comme nous l'avons vu, les API sont simples d'utilisation mais c'est le manque
d'informations sur ces-dernières qui cause problème.
Soyez tout de même prudent lorsque vous travaillez avec les API, une mauvaise
opération peut faire planter le système ou détruire des fi
CE QU'ON PEUT FAIRE AVEC LES API
Avec les API vous pouvez changer les icônes de bureau, cacher la barre des
tâches, jouer des video .avi, jouer des sons .wav, créer des écrans de veille, ordonner
l'arrêt du système, cacher le pointeur de la souris, comander (réduire, agrandir,
fermer..) les fenêtres d'autres applications, changer le bouton Démarrer, bref devenir
maître du système... pensez à toutes les vilaines choses que vous pourriez faire (je
m'adresse aux hackers).
TOUJOURS PLUS...
Pour mieux manipuler les API, il convient de savoir ce que c'est qu'un Handle de Fenêtre
hWnd (la grande majorité d'API l'utilise), et aussi savoir ce que c'est qu'un Device
Context Handle hDC: C'est l'objet du prochain article.
[Home]
[Actualités]
[Trucs
& Astuces]
[Astuces Windows]
[ActiveX-Ocx/Dll]
[Articles]
[Codes Sources]
[VB
Games]
[Fichiers Sons]
[Fichiers Icônes]
[Programmes & Sources]
[Mailing-List]
[Divers]
[A Propos]