1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
| Option Compare Database
Option Explicit
Declare Function EnumWindows Lib "User32.dll" _
(ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Declare Function GetClassName Lib "User32.dll" Alias "GetClassNameA" _
(ByVal Hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Integer) As Integer
Declare Function GetWindowThreadProcessId Lib "User32.dll" _
(ByVal Hwnd As Long, ByRef lpdwProcessId As Long) As Long
Declare Function IsWindowVisible Lib "User32.dll" (ByVal Hwnd As Long) As Boolean
Type strucFindWndByPIDClass
lngPID As Long
strClass As String
lngFoundHWnd As Long
End Type
Dim paramFindWndByPIDClass As strucFindWndByPIDClass
' EnumWindowsProc call-back function for FindWindowByPIDandClass
' Enumère toutes les fenêtres
Private Function FindWndByPIDClassEnum(ByVal Hwnd As Long, ByVal lParam As Long) As Long
Dim strSrchClass As String, lngSrchPID As Long
Dim lngThread As Long, lngPID As Long
Dim strBuff As String, strClass As String
Dim RetVal As Long
' PID et Classe recherchés
lngSrchPID = paramFindWndByPIDClass.lngPID
strSrchClass = paramFindWndByPIDClass.strClass
' Par défaut on contunie l'énumération
FindWndByPIDClassEnum = 1
' On ne s'interesse qu'aux fenêtres visibles
If IsWindowVisible(Hwnd) Then
lngThread = GetWindowThreadProcessId(Hwnd, lngPID)
strClass = String(256, vbNullChar)
RetVal = GetClassName(Hwnd, strClass, 255)
strClass = Left(strClass, RetVal)
' Si fenêtre est de la classe recherchée
' et a été créée par le PID recherché, on la ferme
If lngPID = lngSrchPID And strClass = strSrchClass Then
' on arrête l'énumération
FindWndByPIDClassEnum = 0
paramFindWndByPIDClass.lngFoundHWnd = Hwnd
End If
End If
End Function
'____________________________________________
Private Sub FindWndByPIDClass(lngCreatorPID As Long, strWndClass As String)
paramFindWndByPIDClass.lngPID = lngCreatorPID
paramFindWndByPIDClass.strClass = strWndClass
paramFindWndByPIDClass.lngFoundHWnd = 0
EnumWindows AddressOf FindWndByPIDClassEnum, 0
End Sub
'____________________________________________
Sub ClosePropWind()
Dim lngAccessPID As Long
' Récupère le PID de cette instance d'Access
GetWindowThreadProcessId Application.hWndAccessApp, lngAccessPID
' Cherche fenêtre propriétés
FindWndByPIDClass lngAccessPID, "OArgDlg"
' Ferme la fenêtre
If paramFindWndByPIDClass.lngFoundHWnd <> 0 Then DoCmd.RunCommand acCmdProperties
End Sub |
Partager