Atelier : Utiliser les fonctions API
de Windows.


Information sur... Les APIs.

  • API = Application Programming Interface ;

  • ce sont des fonctions mises à disposition par les systèmes d'exploitation (Windows, Linux, etc.), grâce à des fichiers .DLL ou .VXD ;

  • elles sont utilisables dans n'importe quel outil de développement (Visual Basic, C++, Delphi, etc.) ;

  • Exemples d'API : DirectX, nom de l'utilisateur, position du curseur de la souris, éteindre la machine, etc.

1
Votre première API :
afficher le nom de l'ordinateur (GetComputerName).

Votre première API va servir à récupérer le nom de l'ordinateur et l'afficher à l'écran. Pour cela, suivez les étapes suivantes :

Vous voyez alors apparaître des explications sur la fonction GetComputerName, et notamment la chaîne de déclaration de la fonction (Declare Function ...) qu'il faudra recopier tel quel en Visual Basic. Suivez les étapes suivantes :

Public Function NomPC() As String

NomPC est libre, c'est le nom que vous choisissez pour votre fonction.
On utilise Public dans l'optique de créer un module qui contient toutes les fonctions systèmes, qui seraient réutilisées à partir d'autres modules.

  Dim Resultat As String * 255

Déclaration d'une variable qui correspond au paramètre ByVal lpBuffer As String de l'API GetComputerName.
Cette chaîne doit être de taille fixe (et non pas de taille dynamique). Ici, elle contient 255 caractères.

  Dim TailleResultat As Long

Déclaration d'une variable qui correspond au paramètre nSize As Long de l'API GetComputerName.

  TailleResultat = Len(Resultat)

Avant l'appel à GetComputerName, TailleResultat doit contenir la place disponible dans la chaîne de caractère Résultat. GetComputerName ne renvoie rien si le paramètre nSize lui laisse croire qu'elle n'a pas la place d'écrire le nom de l'ordinateur dans le paramètre Resultat.
GetComputerName étant écrite en langage C, il lui est impossible de deviner toute seule qu'il y a 255 caractères disponibles dans la variable Visual Basic Resultat.

  GetComputerName Resultat, TailleResultat

Appel à l'API GetComputerName. Elle va écrire le nom de l'ordinateur dans Resultat, et la taille de ce nom dans TailleResultat.

  NomPC = Left(Resultat, TailleResultat)

Affectation du nom de l'ordinateur comme résultat de notre propre fonction. Pour ne pas renvoyer 255 caractères mais juste le nombre suffisant, on utilise la fonction Left.

End Function

Remarque sur... L'équivalent sous MS-DOS.

Pour afficher le nom de la machine sous MS-DOS, il suffit de taper dans une fenêtre MS-DOS :

    echo %computername%

Pour plus d'information sur les autres informations disponibles sous MS-DOS, tapez SET.


2
Afficher le nom de l'utilisateur (GetUserName).
3
Redémarrer ou éteindre l'ordinateur (ExitWindowsEx).
4
Obtenir la liste des lecteurs logiques (A:, B:, etc.)
disponibles sur la machine (GetLogicalDrives).

Explication sur... La valeur renvoyée par la fonction.

Si la fonction renvoie, par exemple, la valeur décimale 263999, cela correspond en binaire à 00000000 00000100 00000111 00111111. Chaque bit renvoyé indique la présence ou non d'un lecteur, selon le tableau suivant :

Lettre de lecteur  n/a n/a n/a n/a n/a n/a Z:\ Y:\ X:\ W:\ V:\ U:\ T:\ S:\ R:\ Q:\ P:\ O:\ N:\ M:\ L:\ K:\ J:\ I:\ H:\ G:\ F:\ E:\ D:\ C:\ B:\ A:\
Exemple de valeur
du bit renvoyé
0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 1 1 0 0 1 1 1 1 1 1
Position du bit
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
Valeur décimale
du bit renvoyé
0
0
0
0
0
0
0
0
0
0
0
0
0
218
0
0
0
0
0
0
0
210
29
256
128
64
32
16
8
4
2
1

Dans ce cas, pour la valeur 263999, cela nous indique que sont présents les lecteurs : A:, B:, C:, E:, F:, I:, J:, K:, S:.

Pour la fonction DriveExists : si on veut vérifier, par exemple, que le lecteur S:\ est présent, on effectue le test suivant :
  If GetLogicalDrives And 2^18 = 2^18 Then ...
Sachant que GetLocicalDrives And 2^18 renvoie soit 2^18, soit 0, on peut simplifier par :
  If GetLogicalDrives And 2^18 > 0 Then ...
Sachant qu'en Visual Basic, 0 est le seul entier assimilable à la valeur booléen false, on peut simplifier par :
  If GetLocicalDrives And 2^18 Then ...


Explication sur... Le lien entre la position du bit et la lettre de lecteur.

Le code ASCII de la lettre A est 65.

Si notre numéro de lecteur (iLecteur) est numéroté de 0 à 25, alors la lettre de lecteur correspondante est :
  Chr(65 + iLecteur)

Si notre numéro de lecteur (iLecteur) est numéroté de 1 à 26, alors la lettre de lecteur correspondante est :
  Chr(64 + iLecteur)

Pour retrouver le numéro de lecteur (de 0 à 25) à partir de la lettre de lecteur (par exemple si LettreLecteur = "A") :
  iLecteur = Asc(LettreLecteur) - 65


5
Obtenir le type des lecteurs logiques (disque amovible, disque fixe, CD-ROM, etc.)
grâce à GetDriveType.
6
Essayez d'autres API.

Essayez maintenant d'utiliser par vous-même certaines API au choix, par exemple :

5
Liens et ressources du cours.

Est DéveloppementLes APIs regroupées par thème.
VB Research CenterUne page recençant 238 API différentes, expliquées et avec des exemples de code qu'il ne demandent qu'à être récupérés.
developpez.comExplications sur l'API MySQL, permettant d'accéder à un serveur MySQL à partir de Visual Basic.

Sébastien PASTORE.