|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
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. |
|
|
|
|||||
|
|||||
|
|||||
Copyright ©1996-2011 VBnet and Randy Birch. All Rights Reserved. |