~ Edito ~
12/03/2006 @ 13:39
Depuis la dernière mise à jour (qui remonte à... oulala plusieurs mois), un petit ménage de printemps s'impose. Ca tombe bien, c'est presque la période. Au menu, et progressivement sur les jours à venir, rafraîchissement de plusieurs fonctions et procédures, nouvelles APIs et nouveaux programmes.
~ Rechercher ~
~ Annuaire VB ~
~ Partenaires ~
|
Fonction CloseHandle
Declare Function CloseHandle Lib "kernel32" Alias "CloseHandle" ( _ ByVal hObject As Long) As Long
Versions : . Windows 95/98 : Oui . Windows NT : A partir de 3.1 . Windows 2000/XP : OuiDescription : Cet fonction sert à fermer un Handle ouvert.
Elle est utilisée dans de nombreux cas, pour les fichiers, pour les processus, pour les threads, ...
Si la fonction échoue elle retourne 0.
Exemple d'utilisation :
' Exemple de Phil (plancon@onetelnet.fr)
Option Explicit
' ---Les API concernant le contrôle des processus et des tâches sous Windows---
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, _
lpExitCode As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, _
ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
' Ferme une application extérieure
Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, _
ByVal uExitCode As Long) As Long
' Ferme notre application
Private Declare Sub ExitProcess Lib "kernel32" (ByVal uExitCode As Long)
' ---Autres API---
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Declare Function GetLastError Lib "kernel32" () As Long
' ---Ici les constantes---
Const STILL_ACTIVE = &H103
Const PROCESS_QUERY_INFORMATION = &H400
Sub Shell(ByVal Tache As String)
' ---Cette fonction crée une tache puis regarde si elle est active---
' Tache est un nom de fichier
' ---Déclaration des variables---
Dim hProcess As Long
Dim RetVal As Long
' ---Ouvre un programme et récupère son handle (hProcess)---
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, Shell(Tache, 6))
' ---Regarde si le processus est actif---
Do
' Retourne le status du processus en cours
GetExitCodeProcess hProcess, RetVal
' Les 2 lignes suivantes sont recommandées pour éviter de faire
' travailler le système avec GetExitCodeProcess
DoEvents
Sleep 100
Loop While RetVal = STILL_ACTIVE
CloseHandle (hProcess)
End Sub
Private Sub Form_Load()
TesMort ("c:\winnt\notepad.exe")
End Sub
Sub TesMort(ByVal Tache As String)
' ---Tue une application en cours---
' Cette fonction force l'arrêt d'une tâche.
' ---Déclaration des variables---
Dim hProcess As Long
Dim RetVal As Long
' ---Ouvre un programme et récupère son handle (hProcess)---
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, Shell(Tache, 6))
' ---Regarde si le processus est actif---
If (hProcess <= 0) Then
MsgBox "OpenProcess() a échoué : " & GetLastError()
Else
' Sinon le tue
If TerminateProcess(hProcess, 1) Then
MsgBox "TerminateProcess() a échoué " & GetLastError()
Else
MsgBox "Tu es mort"
CloseHandle (hProcess)
End If
End If
End Sub
Retour à la liste des API |