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 plan1.- 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"
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
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
End Sub |