Forum - Questions sur Access - ouvrir 2 fenêtres windows explorer côte à côte
bonjour 3Stone,
à force de recherches j'ai trouvé ce code qui fonctionne très bien mais il me reste un problème à régler ce code permet de redimensionner les fenêtres suivant leur titre...que je ne connais pas
les 2 fenêtres s'ouvrent suivant un chemin prédéfini
comment je peux, avec comme seule valeur le chemin (C:UsersNicoDownloads), retrouver le titre de la fenêtre en question? ou bien comment je peux appliquer le redimensionnement des fenêtres non pas suivant leur titre mais le chemin appliqué?
S'il vous plaît
'test fait via Excel mais fonctionne aussi avec Access
Option Explicit
Declare PtrSafe Function MoveWindow Lib "user32" (ByVal hwnd As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal bRepaint As Long) As Long
Declare PtrSafe Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Declare PtrSafe Function GetDesktopWindow Lib "user32" () As Long
Declare PtrSafe Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Declare PtrSafe Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
Declare PtrSafe Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal aint As Long) As Long
Const mcGWCHILD = 5
Const mcGWHWNDNEXT = 2
Const mcGWLSTYLE = (-16)
Const mcWSVISIBLE = &H10000000
Const mconMAXLEN = 255
Public NomFenetre As String
Public NomFenetre1, NomFenetre2 As String
Dim A As Long
Sub Départ()
Dim Ouvert As Boolean
Dim T As Double
Dim Var1, VarFen1, VarTitr1 As String
Dim Var2, VarFen2, VarTitr2 As String
VarFen1 = Feuil1.Range("D8").Value
VarFen2 = Feuil1.Range("D9").Value
'ouverture des 2 fenêtres de l'explorateur windows
Var1 = Shell("Explorer.exe " & VarFen1 & "", vbNormalFocus)
T = Timer + 1: Do While T >= Timer: DoEvents: Loop
Var2 = Shell("explorer.exe " & VarFen2 & "", vbNormalFocus)
T = Timer + 1: Do While T >= Timer: DoEvents: Loop
'appel de la procédure qui positionne les fenêtres
Call fEnumWindows(True)
End Sub
Function fEnumWindows(Ouvert As Boolean)
Dim lngx As Long, lngLen As Long
Dim lngStyle As Long, strCaption As String
Dim caption As Variant
Dim Buffer As String
Dim NbFileOuverts As Integer
lngx = GetDesktopWindow()
lngx = GetWindow(lngx, mcGWCHILD)
Do While Not lngx = 0
strCaption = fGetCaption(lngx)
If Len(strCaption) > 0 Then
lngStyle = GetWindowLong(lngx, mcGWLSTYLE)
If lngStyle And mcWSVISIBLE Then
If fGetClassName(lngx) = "XLMAIN" Then
caption = fGetCaption(lngx)
If caption Like "* - *" Or Buffer = "- *" Or Buffer = "* -" Then
NbFileOuverts = NbFileOuverts + 1
End If
End If
End If
End If
lngx = GetWindow(lngx, mcGWHWNDNEXT)
Loop
End Function
Private Function fGetClassName(hwnd As Long) As String
Dim strBuffer As String
Dim intCount As Integer
strBuffer = String$(mconMAXLEN - 1, 0)
intCount = GetClassName(hwnd, strBuffer, mconMAXLEN)
If intCount > 0 Then
fGetClassName = Left$(strBuffer, intCount)
End If
End Function
Private Function fGetCaption(hwnd As Long) As String
Dim strBuffer As String
Dim intCount As Integer
strBuffer = String$(mconMAXLEN - 1, 0)
intCount = GetWindowText(hwnd, strBuffer, mconMAXLEN)
If intCount > 0 Then
fGetCaption = Left$(strBuffer, intCount)
If UCase(fGetCaption) = UCase("Images") Then MoveWindow hwnd, 950, 0, 950, 1000, 1
If UCase(fGetCaption) = UCase("Téléchargements") Then MoveWindow hwnd, 0, 0, 950, 1000, 1
End If
End FunctionBonjour,
Habituellement, on cherche à redimensionner une fenêtre pour l'adapter à son contenu... mais suivant leur titre 
De plus, les fenêtres de l'explorer ne me semble pas vraiment manipulables.
Ceci dit, au lieu de t'embarquer dans des fonctions... tu pourrais tenter la solution simple :
Lorsque tu récupères le titre, tu récupères aussi sa longueur... que tu multiplie par une valeur X (définie par approximation successive), auquel tu ajoutes une valeur fixe pour le reste.
Cela te permet de supprimer un paquet de code qui créera des problème tôt ou tard.
Cordialement,
Pierre (3Stone)