May 6th, 2005

How to query properties of the taskbar

Occasionally, people want to query properties of the taskbar. I don’t quite understand why; you should just get on with your life and let the taskbar get on with its life. After all, there might not even be a taskbar, as we discussed last time.

But if you really want to know (perhaps you’re collecting usability data), here’s how:

#include <stdio.h>
#include <windows.h>
#include <shellapi.h>
int __cdecl main(int argc, const char* argv[])
{
 APPBARDATA abd = { sizeof(abd) };
 UINT uState = (UINT)SHAppBarMessage(ABM_GETSTATE, &abd);
 printf("Taskbar on top? %s\n",
        (uState & ABS_ALWAYSONTOP) ? "yes" : "no");
 printf("Taskbar autohide? %s\n",
        (uState & ABS_AUTOHIDE) ? "yes" : "no");
 return 0;
}

This little program uses the ABM_GETSTATE message of the SHAppBarMessage function to get the “Always on top” and “Auto-hide” properties of the taskbar.

Since you’re using the SHAppBarMessage function, if a future version of Windows changes the way it maintains the taskbar state (or perhaps even changes the name of the taskbar to something else), your program will still work because the SHAppBarMessage function will be kept in sync with whatever changes happen to the taskbar.

You can also use the ABM_SETSTATE message to change these states. Note that doing so from a program is discouraged; these state bits belong to the user’s preferences. A program shouldn’t be messing with the user’s preferences. (Well, unless the whole point of the program is to change the user’s preferences, of course. But the frequency with which I see this question makes me wonder whether there really are that many settings-tweaking programs out there. I suspect people are using this power for evil, not for good.)

And to stave off follow-up questions: These are the only two properties of the taskbar that are programmable. Exposing a programmable interface for something as highly visible as the taskbar is a very sensitive issue, because once you grant programmatic access to something, there is a very strong temptation for programs to start abusing it.

Topics
Code

Author

Raymond has been involved in the evolution of Windows for more than 30 years. In 2003, he began a Web site known as The Old New Thing which has grown in popularity far beyond his wildest imagination, a development which still gives him the heebie-jeebies. The Web site spawned a book, coincidentally also titled The Old New Thing (Addison Wesley 2007). He occasionally appears on the Windows Dev Docs Twitter account to tell stories which convey no useful information.

0 comments

Discussion are closed.