* VB-CODE (1)
Tip 143: Determining Whether the Windows 95 Taskbar Is Visible or Hidden
August 31, 1995
Abstract
The Microsoft=AE Windows=AE 95 taskbar allows you to easily launch
Windows-based
programs and to determine which applications are currently running. The
taskbar
can also display status information, such as the current time. This
article will
explain how you can determine, from within a Visual Basic=AE program,
whether the
taskbar is visible or hidden.
Customizing the Windows 95 Taskbar
The taskbar in Microsoft=AE Windows=AE 95 is an area of the screen that
contains
icons that let you easily switch from one application to another, launch new
applications, or display status information.
You can easily customize certain aspects of the taskbar. From the Start
menu,
choose Settings/Taskbar. Windows 95 will display the current settings
for the
taskbar. For example, if you set the autohide option, the taskbar is
always
hidden from view. To see the taskbar, move the mouse pointer over the
area of
the screen where the taskbar is located. The taskbar will immediately appear.
You can use the SHAppBarMessage function in Visual Basic=AE to determine
whether
the taskbar is visible or hidden. To use the SHAppBarMessage function
in your
program, you must include the following Declare statement in the
General
Declarations section of your program (note that this Declare statement
must be
typed as a single line of code):
Private Declare Function SHAppBarMessage Lib "shell32.dll"
(ByVal dwMessage As Long, pData As APPBARDATA) As Long
The SHAppBarMessage function requires two arguments. The first argument
identifies the appbar message you want to send. The dwMessage argument
may be
set to one of the following values:
ABM_ACTIVATE Notifies the system that an appbar has been
activated
ABM_GETAUTOHIDEBAR Retrieves the handle of the autohide appbar
associated
with a particular edge of the screen
ABM_GETSTATE Retrieves the autohide and always-on-top states
of the
window's taskbar
ABM_GETTASKBARPOS Retrieves the bounding rectangle of the window's
taskbar
ABM_NEW Registers a new appbar and specifies the message
identifier
that the system should use to send notification
messages to
the appbar.
ABM_QUERYPOS Requests a size and screen position for an appbar
ABM_REMOVE Unregisters an appbar, removing bar from the
system's
internal list
ABM_SETAUOTOHIDEBAR Registers or unregisters an autohide appbar for
an edge of
the screen
ABM_SETPOS Sets the size and screen position of an appbar
ABM_WINDOWPOSCHANGED Notifies the system when an appbar's position has
changed
The second argument required by the SHAppBarMessage function is a
pointer to an
APPBARDATA structure. The actual contents of this structure depend on
the message
you send to the system. Because we are retrieving the state of the
taskbar, we
don't need to set any of the fields in the APPBARDATA structure.
Instead, we must
set the dwMessage argument to the constant value ABM_GETSTATE to
retrieve the
current state of the taskbar.
After we have called the SHAppBarMessage function, a value is returned
indicating
the state of the taskbar. If this value is zero, we know the taskbar is
not in
autohide mode or always-on-top mode. If the value returned is &H1, the
taskbar
is in autohide mode; if the value returned is &H2, the taskbar is in
always-on-top mode.
Example Program
This program shows how to determine whether the taskbar in Windows 95
is visible
or hidden.
1. Create a new project in Visual Basic. Form1 is created by default.
2. Add the following Constant and Declare statements to the General
Declarations
section of Form1 (note that the Declare statement must be typed as
a single
line of code):
Private Declare Function SHAppBarMessage Lib "shell32.dll"
(ByVal dwMessage As Long, pData As APPBARDATA) As Long
Const ABS_ALWAYSONTOP =3D &H2
Const ABS_AUTOHIDE =3D &H1
Const ABM_GETSTATE =3D &H4
3. Add a Command Button control to Form1. Command1 is created by
default.
4. Add the following code to the Click event for Command1.
Private Sub Command1_Click()
Dim IsThere As Integer
IsThere =3D BarExists()
If IsThere =3D 0 Then
Text1.Text =3D "TaskBar not in auto-hide or always-on-top mode"
End If
If IsThere =3D ABS_ALWAYSONTOP Then
Text1.Text =3D "TaskBar always-on-top"
End If
If IsThere =3D ABS_AUTOHIDE Then
Text1.Text =3D "TaskBar in auto-hide"
End If
End Sub
5. Create a new function called BarExists. Add the following code to
this
function.
Function BarExists() As Integer
Dim Bardata As APPBARDATA
BarExists =3D SHAppBarMessage(ABM_GETSTATE, Bardata)
End Function
6. Add a Text Box control to Form1. Text1 is created by default. Set
its
MultiLine property to True.
7. Add a new module to the project. Module1.Bas is created by default.
8. Add the following TYPE structures to Module1.Bas:
Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Type APPBARDATA
cbSize As Long
hwnd As Long
uCallbackMessage As Long
uEdge As Long
rc As RECT
lParam As Long ' message specific
End Type
Run the example program by pressing F5. Click the command button. If
the Windows
95 taskbar is visible, a message to that effect is displayed in the
text box. If
the taskbar is hidden, however, the text box will display the text
"Taskbar in
auto-hide." If neither the Auto-Hide nor the Always-on-Top property of
the
taskbar is set, then the text box will display the message "Taskbar is
not in
auto-hide or always-on-top mode."
Additional References
"ABM_GETSTATE." (Product Documentation, SDKs, Win32 SDK,
Win32 Programmer's Reference, Reference, Messages,
ABM_ACTIVATE to CB_SETITEMHEIGHT)
"APPBARDATA." (Product Documentation, SDKs, Win32 SDK,
Win32 Programmer's Reference, Reference, Structures, ABC to
CWPRETSTRUCT)
"Programmer's Guide to Windows 95." (Product Documentation, SDKs, Win32
SDK,
Programming Guides and Tools)
Return