Forum - Questions sur Access - ouvrir 2 fenêtres windows explorer côte à côte

 


le 31/07/2018 : 18:34
par nico

Anonyme

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 pascry 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

sujet clos Haut  
Réponse n° 1
--------
le 20/08/2018 : 13:37
par 3Stone

3Stone

Administrateur


Bonjour,

Habituellement, on cherche à redimensionner une fenêtre pour l'adapter à son contenu... mais suivant leur titre rolleyes

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)

clos par 3Stone le 24/10/2018 : 14:34 Haut  
actif sujet actif   clos sujet clos   Important! Important!   Nouveau Nouveau message
Rectifier Rectifier message   Clôturer Clôturer sujet   Remonter Remonter  
Catégories de discussion  Forum