Barre de tâche

Le
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.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Eric
Le #18896061
"bahn po" 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.
Steph
Le #18902871
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
Jacques93
Le #18900421
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' :


--

Cordialement,

Jacques.
bahn po
Le #18900931
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.
Alexis
Le #18908481
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....
antoine
Le #18908471
"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...
Alexis
Le #18908461
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....
Jean-marc
Le #18903451
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_' ;
Jacques93
Le #18903681
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.
Jean-marc
Le #18903761
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_' ;
Publicité
Poster une réponse
Anonyme