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


 2 membres
Connectés : ( personne )

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

  
Réponse n° 1
--------
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 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)

  
sujet actif   sujet clos   Important!   Nouveau  
Rectifier message   Clôturer sujet   Remonter sujet