Autres demo rect window pour dudu2

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
1733584200992.png


barre des taches en top
1733584292261.png


barre des tache a droite
1733584346874.png


barre des taches en bas
1733584395403.png
 
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

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
demo1.gif
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
23
Affichages
2 K
Retour