Visual Basic Screen & System Metrics
SHAppBarMessage: Determine TaskBar Position
     
Posted:   Monday May 19, 1997
Updated:   Monday December 26, 2011
     
Applies to:   VB4-32, VB5, VB6
Developed with:   VB4-32, Windows 95
OS restrictions:   None
Author:   VBnet - Randy Birch
     

Related:  

SystemParametersInfo: Determine Available Screen Real Estate
     
 Prerequisites
None.

Using the SHAppBarMessage API, the current location(s) of all user taskbars can be determined.

Each taskbar registers itself with the system; the SHAppBarMessage can return individual taskbar information for its state (visible but behind, auto hide, always on top), and its position (left, top, right or bottom).

The SHAppBarMessage API can also be used to create and register a user-created taskbar, though this is not covered here.

Start a new project and to the form add a command button (Command1) and a textbox (Text1). Set the textbox to multiline, and the scrollbars to 2 - Vertical.
 BAS Module Code
Place the following code into the general declarations area of a bas module:

Option Explicit
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Copyright 1996-2011 VBnet/Randy Birch, All Rights Reserved.
' Some pages may also contain other copyrights by the author.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Distribution: You can freely use this code in your own
'               applications, but you may not reproduce 
'               or publish this code on any web site,
'               online service, or distribute as source 
'               on any media without express permission.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Public Const ABM_NEW = &H0
Public Const ABM_REMOVE = &H1
Public Const ABM_QUERYPOS = &H2
Public Const ABM_SETPOS = &H3
Public Const ABM_GETSTATE = &H4
Public Const ABM_GETTASKBARPOS = &H5
Public Const ABM_ACTIVATE = &H6
Public Const ABM_GETAUTOHIDEBAR = &H7
Public Const ABM_SETAUTOHIDEBAR = &H8
Public Const ABM_WINDOWPOSCHANGED = &H9

Public Const ABN_STATECHANGE = &H0
Public Const ABN_POSCHANGED = &H1
Public Const ABN_FULLSCREENAPP = &H2
Public Const ABN_WINDOWARRANGE = &H3

Public Const ABS_AUTOHIDE = &H1
Public Const ABS_ALWAYSONTOP = &H2

Public Const ABE_LEFT = 0
Public Const ABE_TOP = 1
Public Const ABE_RIGHT = 2
Public Const ABE_BOTTOM = 3

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

Public Type APPBARDATA
  cbSize As Long
  hwnd As Long
  uCallbackMessage As Long
  uEdge As Long
  rc As RECT
  lParam As Long      'message specific
End Type

Public Declare Function SHAppBarMessage Lib "shell32" _
    (ByVal dwMessage As Long, _
     pData As APPBARDATA) As Long 
 Form Code
To a form containing a command button (Command1) and a text box (Text1). Set the textbox to multiline and the scrollbars to 2 - Vertical, and add the following code:

Option Explicit

Private Sub Command1_Click()

  Dim rc As RECT
  Dim ABD As APPBARDATA
  Dim state As Long
  Dim position As Integer
  Dim hWndAppBar As Long
  Dim msg As String
    
 'initialize the APPBARDATA structure
  ABD.cbSize = Len(ABD)
      
 'get the appbar state  
  state = SHAppBarMessage(ABM_GETSTATE, ABD)
    
 'prepare the appropriate message based on the returned state
  msg = "SHAppBarMessage ABM_GETSTATE return value is " & state & ":" & vbCrLf & vbCrLf
  
  Select Case state
      Case False
            msg = msg & "  - Auto Hide= False, Always on Top = False." & vbCrLf
            msg = msg & "  - User allows apps cover the taskbar." & vbCrLf
            msg = msg & "  - The taskbar must be manually invoked with maximized apps."
      
      Case ABS_ALWAYSONTOP
            msg = msg & "  - Always on Top = True." & vbCrLf
            msg = msg & "  - User wants the taskbar on-screen at all times." & vbCrLf
            msg = msg & "  - The available screen is reduced by the taskbar size."
      
      Case Else
            msg = msg & "  - Auto Hide = True." & vbCrLf
            msg = msg & "  - The taskbar appears on a mousemove." & vbCrLf
            msg = msg & "  - There are taskbar(s) positioned on the "
           
           'see which edge has a taskbar
            For position = ABE_LEFT To ABE_BOTTOM
              
               ABD.uEdge = position
               hWndAppBar = SHAppBarMessage(ABM_GETAUTOHIDEBAR, ABD)
              
               If hWndAppBar > 0 Then
              
                 Select Case position
                    Case ABE_LEFT:   msg = msg & "LEFT "
                    Case ABE_TOP:    msg = msg & "TOP "
                    Case ABE_RIGHT:  msg = msg & "RIGHT "
                    Case ABE_BOTTOM: msg = msg & "BOTTOM "
                 End Select
                
               End If
            
            Next 
        
    End Select
    
   'display the results
    Text1.Text = msg
      
End Sub
 Comments
After clicking the command button, the positions and state of the taskbar will be returned.

 
 

PayPal Link
Make payments with PayPal - it's fast, free and secure!

 
 
 
 

Copyright 1996-2011 VBnet and Randy Birch. All Rights Reserved.
Terms of Use  |  Your Privacy

 

Hit Counter