Forum - Questions sur Access - ouvrir 2 fenêtres windows explorer côte à côte
le 31/07/2018 : 18:34
par nico
visiteur
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 Function
--------
le 20/08/2018 : 13:37
par 3Stone
Administrateur
Bonjour,
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)
Rectifier message Clôturer sujet Remonter