XL 2016 Comment détecter la position de la barre des tâches

Roland_M

XLDnaute Barbatruc
Bonsoir tout le monde,

je ne trouve rien sur le net à ce sujet !?
code ou astuce pour détecter la position de la barre des tâches H/B/G/D !?
Merci d'avance.

j'ai mis version 2016 mais aussi pour 2007

EDIT: avec API probablement !?
mais si c'est une astuce sans api ce n'est pas plus mal !
 
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour Roland_M,

Détecter je ne sais pas mais avec de bonnes lunettes aucun problème :
VB:
Sub Barre_des_taches()
Dim position$
While IsError(Application.Match(position, Array("H", "B", "G", "D"), 0))
    position = UCase(InputBox("Elle est où cette barre ?" & vbLf & vbLf & "Entrez H B G ou D :", "Barre des tâches", position))
    If position = "" Then Exit Sub
Wend
'---
End Sub
A+
 

Roland_M

XLDnaute Barbatruc
Bonsoir,

Salut Job et merci pour ton intervention !

pour l'instant je pratique de la sorte, exemple avec ceci:
1571162599687.png


mais j'espérais pouvoir le faire automatiquement par code, sans boite de dialogue ou autre.
tout comme on détecte une résolution écran, on ne demande pas quelle résolution avez vous ?

donc, vu le nombre de réponses, j'en conclue que ce n'est pas réalisable !? tant pis !
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, Roland_M, re job75

Moi, je sais pas faire dire à Excel où elle se trouve, mais d'autres s'amusent à dire ce qu'elle contient. ;)
Je publie au cas ou cela puisse servir
Private Declare PtrSafe Function apiGetClassName Lib "user32" Alias _
"GetClassNameA" (ByVal hwnd As Long, _
ByVal lpClassname As String, _
ByVal nMaxCount As Long) As Long
Private Declare PtrSafe Function apiGetDesktopWindow Lib "user32" Alias _
"GetDesktopWindow" () As Long
Private Declare PtrSafe Function apiGetWindow Lib "user32" Alias _
"GetWindow" (ByVal hwnd As Long, _
ByVal wCmd As Long) As Long
Private Declare PtrSafe Function apiGetWindowLong Lib "user32" Alias _
"GetWindowLongA" (ByVal hwnd As Long, ByVal _
nIndex As Long) As Long
Private Declare PtrSafe Function apiGetWindowText Lib "user32" Alias _
"GetWindowTextA" (ByVal hwnd As Long, ByVal _
lpString As String, ByVal aint As Long) As Long
Private Const mcGWCHILD = 5
Private Const mcGWHWNDNEXT = 2
Private Const mcGWLSTYLE = (-16)
Private Const mcWSVISIBLE = &H10000000
Private Const mconMAXLEN = 255

Function fEnumWindows()
Dim lngx As Long, lngLen As Long
Dim lngStyle As Long, strCaption As String

lngx = apiGetDesktopWindow()
'Return the first child to Desktop
lngx = apiGetWindow(lngx, mcGWCHILD)

Do While Not lngx = 0
strCaption = fGetCaption(lngx)
If Len(strCaption) > 0 Then
lngStyle = apiGetWindowLong(lngx, mcGWLSTYLE)
'enum visible windows only
If lngStyle And mcWSVISIBLE Then
ActiveCell.Value = fGetCaption(lngx)
ActiveCell.Offset(1, 0).Activate
End If
End If
lngx = apiGetWindow(lngx, mcGWHWNDNEXT)
Loop
End Function


Private Function fGetCaption(hwnd As Long) As String
Dim strBuffer As String
Dim intCount As Integer

strBuffer = String$(mconMAXLEN - 1, 0)
intCount = apiGetWindowText(hwnd, strBuffer, mconMAXLEN)
If intCount > 0 Then
fGetCaption = Left$(strBuffer, intCount)
End If
End Function


Sub test()
Range("A1").Activate
Call fEnumWindows
End Sub
[/code]
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re

Roland_M
Glané sur le web anglophone
Est-ce qu'on se rapproche de ce que tu souhaites faire?
VB:
Option Explicit
Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type
 
Private Type APPBARDATA
    cbSize As Long
    hwnd As Long
    uCallbackMessage As Long
    uEdge As Long
    rc As RECT
    lParam As Long
End Type

Const ABS_ALWAYSONTOP = &H2
Const ABS_AUTOHIDE = &H1
Const ABS_BOTH = &H3
Const ABM_GETSTATE = &H4
Const ABM_GETAUTOHIDEBAR = &H7
Const ABM_GETTASKBARPOS = &H5

Const ABE_LEFT = 0
Const ABE_TOP = 1
Const ABE_RIGHT = 2
Const ABE_BOTTOM = 3
 
Private Declare Function SHAppBarMessage Lib "shell32.dll" (ByVal dwMessage As Long, pData As APPBARDATA) As Long
Public Function GetTaskBarMetrics() As String
    Dim ABD As APPBARDATA
    ABD.cbSize = Len(ABD)
    SHAppBarMessage ABM_GETTASKBARPOS, ABD
    GetTaskBarMetrics = "TaskBarMetrics In Pixels (not twips)" & vbCrLf & _
        "Left: " & ABD.rc.Left & ", Right: " & ABD.rc.Right & ", Bottom: " & ABD.rc.Bottom & ", Top: " & ABD.rc.Top & vbCrLf & _
        "Width:" & ABD.rc.Right - ABD.rc.Left & vbCrLf & _
        "Height:" & ABD.rc.Bottom - ABD.rc.Top & vbCrLf & _
        "Location: " & ABD.uEdge & " (0-left, 1-top, 2-right, 3-bottom)"
End Function

Public Function TaskBarState() As String
    Dim ABD As APPBARDATA, res&
    ABD.cbSize = Len(ABD)
    res = SHAppBarMessage(ABM_GETSTATE, ABD)
    If res = 0 Then
        TaskBarState = "TaskBar not in auto-hide or always-on-top mode"
    ElseIf res = ABS_ALWAYSONTOP Then TaskBarState = "TaskBar always-on-top mode"
    ElseIf res = ABS_AUTOHIDE Then TaskBarState = "TaskBar is in auto-hide mode"
    ElseIf res = ABS_BOTH Then TaskBarState = "TaskBar is always-on-top and auto-hide modes"
    Else
        TaskBarState = "Unknown"
    End If
End Function

Sub Test()
MsgBox GetTaskBarMetrics
MsgBox TaskBarState
End Sub
 

Roland_M

XLDnaute Barbatruc
re

Conclusion hative me semble-t-il, je dirais plutôt que tout le monde s'en fout de savoir où est cette fichue barre...

tout le monde peut être mais pas moi car j'en ai besoin !
j'ai plusieurs logiciels qui tournent à mon ancienne entreprise et la plupart en plein écran !
avec des msgbox de saisies perso qui se placent à certains endroits précis selon les besoins
ceci afin de laisser un maximun de visibilité sur les feuilles
par exemple en bas à droite ou à gauche idem en haut
et certain pc on la barre des tâches à des endroits différents, pas toujours en bas !
et là le placement de ces userforms se retrouve derrière la barre des tâches !
si j'ai demandé ça ce n'est pas par caprices, j'ai passé l'âge !

EDIT: Merci Staple, je vais voir ça !
en espérant qu'il n'y a pas une floppé d'API !
 

Roland_M

XLDnaute Barbatruc
re

effectivement ça fonctionne !
ça fonctionne avec Win 7 64bits et Excel 2007 ainsi que Excel 2016

mais je vais voir pour les fonctions #VBA7

encore merci.

EDIT: je ne connais pas l'anglais, je n'aurais jamais trouvé !
 
Dernière édition:

Roland_M

XLDnaute Barbatruc
re

j'ai simplement essayé la macro !
pour le reste aucun souci j'ai les données nécessaire pour adapter ça ne sera pas un problème !

en faite il n'y a qu'une seule fonction ! Function SHAppBarMessage
c'est sympa !
encore merci car ce n'était pas évident, en français j'ai rien vu !
 

Discussions similaires