Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Autres demo rect window pour dudu2

patricktoulon

XLDnaute Barbatruc
bonjour @Dudu2 j'ai testé le getwindowrect sans ta correction
avec la barre des taches de tout les cotés chez moi c'est constant

j'ai "- 8"
barre a droite


barre des taches en top


barre des tache a droite


barre des taches en bas
 

Dudu2

XLDnaute Barbatruc
Bonjour @particktoulon,

Merci pour ces screenshots.

En effet, en [Active]Window.WindowState = xlMaximized, je n'ai jamais compris pourquoi Excel retournait des valeur farfelues (négatives) pour [Active]Window.Left et [Active]Window.Top, et des valeurs exagérées pour [Active]Window.Width et [Active]Window.Height.

Tu remarqueras que, selon la position de la TaskBar, c'est:
- Soit le [Active]Window.Left qui est négatif
- Soit le [Active]Window.Top qui est négatif
- Soit les 2 (heureusement avec des valeurs égales: -8 chez toi, -9 chez moi en échelle 125%)

D'où cette fonction pour corriger qui utilise GetWindowRECT().
VB:
#If VBA7 Then
    Private Declare PtrSafe Function GetWindowRect Lib "user32" (ByVal hwnd As LongPtr, lpRect As RECT) As Long
#Else
    Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
#End If

Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type

'-----------------
'Window Exact RECT
'-----------------
Private Function GetWindowExactRECT(Window As Window) As RECT
    Dim R As RECT
    Dim MaximizedDelta As Long

    Call GetWindowRECT(Window.hwnd, R)

    With R
        If Window.WindowState = xlMaximized Then
            'Depending on the TaskBar position and presence
            If .Left < 0 Then
                MaximizedDelta = .Left
            ElseIf .Top < 0 Then
                MaximizedDelta = .Top
            End If

            .Left = .Left - MaximizedDelta
            .Top = .Top - MaximizedDelta
            .Right = .Right + MaximizedDelta
            .Bottom = .Bottom + MaximizedDelta
        End If
    End With
  
    'Return value
    GetWindowExactRECT = R
End Function

A noter que j'ai appliqué une autre fonction qui utilise GetWindowRECT(), GetClientRECT() -BUGUÉ- et SHAppBarMessage() -pour DÉBUGUER- qui est dans le fichier joint mais inutile puisque la fonction ci-dessus semble parfaitement fonctionner.
 

Pièces jointes

  • GetWindowExactRECT Test 2 Méthodes.xlsm
    33.7 KB · Affichages: 0

patricktoulon

XLDnaute Barbatruc
perso j'utilise la fonction api screentoclient qui me donne le même calcul que DWM

d'autant plus que on lui envoi le activewindow comme argument et non l'application
il existe une api qui te donne le window a partir de application
et je serait pas étonné que ce ne soit pas la bonne fenêtre
quand je regarde mon listeur de fenêtre composant excel en maximisé tout le onde est à zero
j'ai la conviction que tu utilise pas le bon handle
 

Dudu2

XLDnaute Barbatruc
Le screentoclient ne donne que le X, Y correspondant au .Left et .Top de la Window, et encore avec une différence de 1 pixel en mode réduit sans doute due au DWM. On n'a pas les dimensions de la Window.
 

Pièces jointes

  • GetWindowExactRECT Test 3 Méthodes.xlsm
    35.6 KB · Affichages: 0

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…