Exemples de fonctions Api en Visual Basic

Retour page d'accueil


Voici 3 exemples simples d'utilisation et d'appel de fonctions Api Win32 :
     - GetComputerName et GetUserName pour trouver le nom du PC et de l'utilisateur
     - GetDriveType pour savoir le type d'un lecteur (disque) spécifié
     - SetWindowPos pour mettre une feuille toujours au 1er plan

1.- télécharger cet exemple
Les fonctions GetComputerName et GetUserName servent à déterminer le nom de l'ordinateur et celui de l'utilisateur enregistré.
Declare Function GetComputerName Lib "Kernel32" Alias "GetComputerNameA" _
     (
ByVal lpBuffer As String, _
     nSize
As Long) As Long
Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" _
     (
ByVal lpBuffer As String, _
     nSize
As Long) As Long
Avant d'appeler les fonctions, il faudra préparer des variables chaînes de caractères pour mémoriser leurs résultats. Les paramètres communiqués aux fonctions sont les chaînes de caractères de réception et leurs longueurs.

La routine personnalisée NomPC prend en charge l'appel de GetComputerName et renvoie comme résultat le nom de l'ordinateur. Notez que le paramètre qui donne la longueur de la chaîne mémorisée est transmis par référence. La valeur de lngLongueur est en effet modifiée pour restituer la longueur de la chaîne du résultat. Associée à la fonction De Visual Basic Left$, cette variable permet de lire correctement le nom de l'ordinateur.
Public Function NomPC() As String
Dim lngLongueur As Long
Dim strTampon   As String
Dim intR               As Integer
    strTampon = Space(255)
    lngLongueur = Len(strTampon)
    intR = GetComputerName(strTampon, lngLongueur)
    NomPC = Left(strTampon, lngLongueur)
End Function

La fonction NomUtilisateur est faites sur le même modèle que NomPC. Elle recherche le nom de l'utilisateur en appelant la fonction Api GetUserName et le renvoie comme résultat. Seule différence : la longueur de la chaîne de caractères qui contient le résultat est égale au nombre lngLongueur diminué de 1.
Public Function NomUtilisateur () As String
Dim lngLongueur As Long
Dim strTampon   As String
Dim intR               As Integer
    strTampon = Space(256)
    lngLongueur = Len(strTampon)
    intR = GetUserName(strTampon, lngLongueur)
    NomUtilisateur = Left(strTampon, lngLongueur - 1)
End Function

Pour tester les 2 fonction et afficher leurs résultats, nous utiliserons une fonction Sub Main pour démarrer le programme.
Sub Main()
Dim strMessage As String
    strMessage = "Nom de l'ordinateur : " + NomPC + Chr(13) + Chr(10)
    strMessage = strMessage + "Nom de l'utilisateur : " + NomUtilisateur
    MsgBox strMessage, vbInformation, "Infos système"Haut de page
End Sub


2.- Télécharger cet exemple
La fonction GetDriveType permet de déterminer le type d'un lecteur spécifié sous forme de chaîne de caractère. L'exemple qui suit montre comment exploiter cette fonction.
Avant de faire appel à la routine Api, il faut la déclarer. Ici, la déclaration est locale et se limite à la feuille avec le mot clé Private.
Private Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" _
     (
ByVal nDrive As String) As Long

Les types de lecteurs sont identifiés dans la partie générale de la feuille par des constantes privées :
Private Const DRIVE_REMOVABLE = 2
Private Const DRIVE_FIXED = 3
Private Const DRIVE_REMOTE = 4
Private Const DRIVE_CDROM = 5
Private Const DRIVE_RAMDISK = 6

Chaque fois qu'on sélectionne un autre lecteur, l'application déclenche l'évènement Change de la listes de lecteur (DriveListBox). La procédure drvLecteur_Change est exploitée pour déterminer le type du lecteur. La fonction Api reçoit comme argument le répertoire racine du lecteur sélectionné. Il faut donc compléter la lettre qui désigne le lecteur par deux-points et un backslash (:\).Le résultat obtenu est un code numérique mémorisé dans la variable intTypeDisque.
Private Sub drvLecteur_Change()
Dim strLettre As String
Dim intTypeDisque As Integer
Dim strReponse As String
   
' lettre désignant le lecteur
    strLettre = Left(drvLecteur.Drive, 1)
   
' lecture du type
    intTypeDisque = GetDriveType(strLettre + ":\")
  
' description du type
  
Select Case intTypeDisque
       
Case 1
            strReponse = "Non disponible"
       
Case 2
            strReponse = "Lecteur de disquette"
       
Case 3
            strReponse = "Disque dur"
       
Case 4
            strReponse = " Lecteur réseau"
       
Case 5
            strReponse = " CD Rom"
       
Case 6
            strReponse = "Disque virtuel"
       
Case Else
            strReponse = "inconnu"
   
End Select
   
' affichage de l'info
    lblType.Caption = strReponse
End Sub

Il reste à appeler la procédure drvLecteur_Change depuis la procédure de chargement de la feuille frmFeuille_Load, pour afficher le type de lecteur au démarrage de l'application.
Private Sub frmFeuille_Load()
    drvLecteur_Change
Haut de page
End Sub


3.- Télécharger cet exemple
On utilise la fonction SetWindowPos pour garder une feuille toujours au 1er plan, même lorsqu'elle n'est pas active. Cette fonction reçoit en paramètres un handle de la feuille concernée, la constante SWP_TOPMOST et les indicateurs appropriés.
Private Declare Function SetWindowPos Lib "user32" _
    (
ByVal hwnd As Long, _  ' fenêtre à placer
   
ByVal hWndInsertAfter As Long, _ ' handle de la fenêtre
   
ByVal x As Long, _  ' nouvelle coordonnée x de la fenêtre
   
ByVal Y As Long, _  ' nouvelle coordonnée Y de la fenêtre
   
ByVal cx As Long, _  ' nouvelle largeur de la fenêtre
   
ByVal cy As Long, _  ' nouvelle hauteur de la fenêtre
   
ByVal wFlags As Long) As Long  ' peut contenir plusieurs Flags débutant par SWP

Const SWP_NOMOVE = &H2
Const SWP_NOSIZE = &H1 
Const SWP_SHOWWINDOW = &H40
Const SWP_NOACTIVATE = &H10
Const SWP_TOPMOST = -1
Const SWP_NOTOPMOST = -2

La routine suivante rend la feuille, dont on passe le handle, toujours visible.
Private Sub FeuilleEnHaut(Handle As Integer)
Dim wFlags As Long
Dim PosFlag As Long
    wFlags = SWP_NOMOVE
Or SWP_NOSIZE Or _
      SWP_SHOWWINDOW
Or SWP_NOACTIVATE
    PosFlag = -1
    SetWindowPos Handle, PosFlag, 0, 0, 0, 0, wFlags
End Sub

Vous pouvez appeler FeuilleEnHaut à partir de l'évènement Paint d'une feuille pour vous assurer que la feuille sera toujours au-dessus des autres.
Private Sub Form_Paint()
    FeuilleEnHaut Me.hwnd
Haut de page
End Sub

Mise à jour le 27.12.98
webmaster : mstoll