saludos
Hola,
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal
lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long,
lpRect As RECT) As Long
Private Sub Form_Load()
Dim wrect As RECT, tWind as Long
tWnd = FindWindow("Shell_traywnd", vbNullString)
GetWindowRect tWnd, wrect
Debug.Print wrect.Top, wrect.Left, wrect.Bottom, wrect.Right
End Sub
(tomado de la API Guide).
La barra de tareas es de la clase "Shell_traywnd". En el ejemplo sé de
antemano que la barra de tareas existe, pero en un programa de uso general
habría que contemplar la posibilidad de que el shell, que es el responsable
de presentar la IU no la utilice. Si no está definida, el valor de retorno
sería cero.
Luego uso el valor obtenido devuelto por FindWindow para pasarselo a
GetWindowRect, que me devuelve las coordenadas de los puntos superior
izquierdo e inferior derecho de la barra.
En mi monitor (1440 x 900 px), los valores devueltos varían según el caso:
Barra de tareas "normal" (abajo, alto simple), oculta, siempre visible =
TRUE:
898, -2, 928, 1442
Barra de tareas "normal", abierta:
872, -2, 902, 1442
Barra de tareas de doble altura, borde inferior, visible:
847, -2, 902, 1442
Barra de tareas de doble ancho, borde izquierdo de la panatalla:
-2, -2, 902, 96
Estas coordenadas están expresadas en pixeles. Normalmente VB usa Twips.
Para convertir de px a Twips multiplica por TwipsPerPixelX o TwipsPerPixelY
según sea el caso.
Las ventanas sin borde ni caption no se muestran en la barra de tareas.
Salud!