Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Barre de tâche

15 réponses
Avatar
bahn po
Hello repetita

La barre de tâche étant amovible et de hauteur variable, comment savoir
si elle est visible ou pas ? Je voudrais placer une barre au dessus de
celle-ci, mais comme sa taille est variable... voir sa position.

Merci.

10 réponses

1 2
Avatar
Eric
"bahn po" wrote in message
news:
Hello repetita

La barre de tâche étant amovible et de hauteur variable, comment savoir si
elle est visible ou pas ? Je voudrais placer une barre au dessus de
celle-ci, mais comme sa taille est variable... voir sa position.

Merci.



Comme pour tout, avec les apis win32.
Avatar
Steph
Jacques93 wrote:

Euh, à droite, à gauche ou au dessus ?
A tout hasard, un petit code qui énumère certaines caractéristiques de
la barre de taches (Class = "Shell_TrayWnd") et de ses sous-fenêtres
(Quick Launch, Notify Icons, Clock, etc...)



Ca n'a rien à voir et c'est faux, vu que les classes changent d'un OS à
l'autre.
Il faut utiliser les apis APBR pour placer automatiquement une fenêtre
au-dessus ou ailleurs
Avatar
Jacques93
Bonjour bahn po,
bahn po a écrit :
Hello repetita

La barre de tâche étant amovible et de hauteur variable, comment savoir
si elle est visible ou pas ? Je voudrais placer une barre au dessus de
celle-ci, mais comme sa taille est variable... voir sa position.

Merci.




Euh, à droite, à gauche ou au dessus ?
A tout hasard, un petit code qui énumère certaines caractéristiques de
la barre de taches (Class = "Shell_TrayWnd") et de ses sous-fenêtres
(Quick Launch, Notify Icons, Clock, etc...)

Il est important, même indispensable, que la fonction d'énumération des
sous fenêtre soit dans un module, sous peine d'une erreur de compilation
sur l'opérateur 'AddressOf'. Concernant la visibilité de la barre, il
vaut mieux se baser sur sa position, elle a toujours le flag WS_VISIBLE.

'-------------------
' Dans une feuille :
'-------------------
Option Explicit

Private Sub Command1_Click()
Dim hWndTray As Long

' Récupère le handle de la barre de tâche
hWndTray = FindWindow("Shell_TrayWnd", "")
If hWndTray <> 0 Then
DisplayWndInfos hWndTray
EnumChildWindows hWndTray, AddressOf EnumTaskbarWindows, 0
End If
End Sub

'-----------------
' Dans un module :
'-----------------
Option Explicit

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

Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long

Public Declare Function EnumChildWindows Lib "user32" _
(ByVal hWndParent As Long, _
ByVal lpEnumFunc As Long, _
ByVal lParam As Long) As Long

Public Declare Function GetWindowRect Lib "user32" _
(ByVal hwnd As Long, lpRect As RECT) As Long

Public Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" _
(ByVal hwnd As Long, ByVal lpString As String, _
ByVal cch As Long) As Long

Public Declare Function GetClassName Lib "user32" Alias "GetClassNameA" _
(ByVal hwnd As Long, ByVal lpClassName As String, _
ByVal nMaxCount As Long) As Long

Public Declare Function IsWindowVisible Lib "user32" _
(ByVal hwnd As Long) As Long


Public Function EnumTaskbarWindows(ByVal hwnd As Long, _
ByVal lParam As Long) As Long
DisplayWndInfos hwnd
EnumTaskbarWindows = 1
End Function

Public Sub DisplayWndInfos(ByVal hwnd As Long)
Dim Caption As String, ClassName As String
Dim rc As RECT
Dim lResult As Long

Caption = String(256, Chr$(0))
lResult = GetWindowText(hwnd, Caption, 256)
Caption = Left(Caption, lResult)

ClassName = String(256, Chr$(0))
lResult = GetClassName(hwnd, ClassName, 256)
ClassName = Left(ClassName, lResult)

lResult = GetWindowRect(hwnd, rc)

Debug.Print "Handle : " & Hex(hwnd) & ", " & _
Chr$(34) & ClassName & Chr$(34) & ", " & _
Chr$(34) & Caption & Chr$(34) & ", " & _
"(" & rc.Left & "," & rc.Top & ")-(" & _
rc.Right & "," & rc.Bottom & ") " & _
rc.Right - rc.Left & "x" & rc.Bottom - rc.Top & ", " & _
IIf(IsWindowVisible(hwnd), "Visible", "Invisible")
End Sub

' ---------------------------------------------------------------------
' Voici un exemple de ce que l'on obtient dans la fenêtre d'exécution :
' ---------------------------------------------------------------------
Handle : 10084, "Shell_TrayWnd", "", (0,770)-(1280,800) 1280x30, Visible
Handle : 10092, "TrayNotifyWnd", "", (953,770)-(1280,800) 327x30, Visible
Handle : 10094, "TrayClockWClass", "16:04", (1234,770)-(1273,800) 39x30,
Visible
Handle : 10096, "SysPager", "", (972,774)-(1170,800) 198x26, Visible
Handle : 1009A, "ToolbarWindow32", "Zone de notification",
(972,774)-(1170,800) 198x26, Visible
Handle : 10098, "SysPager", "", (1180,774)-(1234,800) 54x26, Visible
Handle : 1009C, "ToolbarWindow32", "Zone de contrôle système",
(1180,774)-(1234,800) 54x26, Visible
Handle : 1009E, "Button", "", (953,775)-(953,795) 0x20, Visible
Handle : 100AA, "ReBarWindow32", "", (60,770)-(953,800) 893x30, Visible
Handle : 300CC, "CiceroUIWndFrame", "TF_FloatingLangBar_WndTitle",
(925,770)-(953,800) 28x30, Visible
Handle : 200B6, "ToolbarWindow32", "Quick Launch", (78,770)-(400,800)
322x30, Visible
Handle : 100B8, "MSTaskSwWClass", "Applications en cours d'exécution",
(439,770)-(903,800) 464x30, Visible
Handle : 100BC, "ToolbarWindow32", "Applications en cours d'exécution",
(439,770)-(903,800) 464x30, Visible
Handle : 100CA, "WMP9DeskBand", "WMP9DeskBand", (60,770)-(60,770) 0x0,
Invisible
' ------------------------------------------------------------------------

A noter que ce sont les mêmes informations que renvoient Spy++
(SpyXX.exe), livré avec les outils Visual Studio.

Les API's utilisées sont assez triviales, sauf peut être
'EnumChildWindows' qui utilise le système de 'CallBack' :

<http://msdn.microsoft.com/en-us/library/ms633494(VS.85).aspx>

--

Cordialement,

Jacques.
Avatar
bahn po
Le 14/03/2009, Jacques93 a supposé :
Bonjour bahn po,
bahn po a écrit :
Hello repetita

La barre de tâche étant amovible et de hauteur variable, comment savoir si
elle est visible ou pas ? Je voudrais placer une barre au dessus de
celle-ci, mais comme sa taille est variable... voir sa position.

Merci.




Euh, à droite, à gauche ou au dessus ?
A tout hasard, un petit code qui énumère certaines caractéristiques de la
barre de taches (Class = "Shell_TrayWnd") et de ses sous-fenêtres (Quick
Launch, Notify Icons, Clock, etc...)

Il est important, même indispensable, que la fonction d'énumération des sous
fenêtre soit dans un module, sous peine d'une erreur de compilation sur
l'opérateur 'AddressOf'. Concernant la visibilité de la barre, il vaut mieux
se baser sur sa position, elle a toujours le flag WS_VISIBLE.





Ok merci, je vais etudier ce code.
Avatar
Alexis
Steph wrote:

Ca n'a rien à voir et c'est faux, vu que les classes changent d'un OS à
l'autre.
Il faut utiliser les apis APBR pour placer automatiquement une fenêtre
au-dessus ou ailleurs



Exact.
Certaines réponses à côté de la plaque font peur à voir....
Avatar
antoine
"Jacques93" wrote in message
news:uz4JN$

Tout d'abord, la classe "Shell-TrayWnd" est opérationnelle sur W2K, XP,
Vista, Seven (je viens de vérifier pour Seven)...



Non, la hiérarchie est modulable.

On peux aussi utiliser d'autres APIs, comme :
SystemParametersInfos
GetSystemMetrics



Aucun rapport avec l'APBR cité.
Ah ces jeunes qui découvent Windows...
Avatar
Alexis
Jean-marc wrote:

Comme il ne faut pas perdre une occasion de donner une
info utile, voici comment on fait (avec les API, s'il vous
plait!!):



Achète l'Appleman et le Petzold, car il y a effectivement du boulot....
Avatar
Jean-marc
Steph wrote:
Jacques93 wrote:

Euh, à droite, à gauche ou au dessus ?
A tout hasard, un petit code qui énumère certaines caractéristiques
de la barre de taches (Class = "Shell_TrayWnd") et de ses
sous-fenêtres (Quick Launch, Notify Icons, Clock, etc...)



Ca n'a rien à voir et c'est faux, vu que les classes changent d'un OS
à l'autre.
Il faut utiliser les apis APBR pour placer automatiquement une fenêtre
au-dessus ou ailleurs



L'APBR, c'est l'American Pit Bull Registry:
http://www.pitbullregistry.com/

Du coup, on comprend mieux.

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Avatar
Jacques93
Bonjour Jean-Marc,
Jean-marc a écrit :
Steph wrote:
Jacques93 wrote:

Euh, à droite, à gauche ou au dessus ?
A tout hasard, un petit code qui énumère certaines caractéristiques
de la barre de taches (Class = "Shell_TrayWnd") et de ses
sous-fenêtres (Quick Launch, Notify Icons, Clock, etc...)


Ca n'a rien à voir et c'est faux, vu que les classes changent d'un OS
à l'autre.
Il faut utiliser les apis APBR pour placer automatiquement une fenêtre
au-dessus ou ailleurs



L'APBR, c'est l'American Pit Bull Registry:
http://www.pitbullregistry.com/

Du coup, on comprend mieux.




T'es sûr ? Un Pit Bull, comme Steph ou Eric au hasard, saurait donc
répondre un jour avant la question ? Ou tout simplement ne connaissent
ils pas la fonction 'Mise à jour' d'une horloge. Un doute m'assaille :-D

--

Cordialement,

Jacques.
Avatar
Jean-marc
Jacques93 wrote:


T'es sûr ? Un Pit Bull, comme Steph ou Eric au hasard, saurait donc
répondre un jour avant la question ? Ou tout simplement ne connaissent
ils pas la fonction 'Mise à jour' d'une horloge. Un doute m'assaille
:-D



Mise à jour de l'horloge ?

<mode pitbull="on">
Pff, tas de gros nuls, on fait ça avec les API !
</mode>

Comme il ne faut pas perdre une occasion de donner une
info utile, voici comment on fait (avec les API, s'il vous
plait!!):

Option Explicit

Private Type SYSTEMTIME
wYear As Integer
wMonth As Integer
wDayOfWeek As Integer
wDay As Integer
wHour As Integer
wMinute As Integer
wSecond As Integer
wMilliseconds As Integer
End Type

Private Declare Function SetSystemTime Lib "kernel32" (lpSystemTime As
SYSTEMTIME) As Long

Private Sub Form_Load()
Dim st As SYSTEMTIME

st.wYear = 2009
st.wMonth = 3
st.wDayOfWeek = 6
st.wDay = 14
st.wHour = 23
st.wMinute = 47
st.wSecond = 0
st.wMilliseconds = 0

SetSystemTime st
End Sub

Eric pourra mettre son horloge à jour :0)


--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
1 2