Как скрыть/показать панель задач

Следующая функция позволяет не только скрыть/показать панель задач, но и установить рабочую область десктопа (при помощи SystemParametersInfo), чтобы при скрытии панель задач внизу не оставалось пустого места:

void gShowHideTaskBar(BOOL bHide /*=FALSE*/)
{
CRect rectWorkArea = CRect(0,0,0,0);
CRect rectTaskBar = CRect(0,0,0,0);

CWnd* pWnd = CWnd::FindWindow("Shell_TrayWnd", "");

if( bHide )
{
// Скрываем панель задач
SystemParametersInfo(SPI_GETWORKAREA,
0,
LPVOID)&rectWorkArea,
0);

if( pWnd )
{
pWnd->GetWindowRect(rectTaskBar);
rectWorkArea.bottom += rectTaskBar.Height();
SystemParametersInfo(SPI_SETWORKAREA,
0,
LPVOID)&rectWorkArea,
0);

pWnd->ShowWindow(SW_HIDE);
}
}
else
{
// Показываем панель задач
SystemParametersInfo(SPI_GETWORKAREA,
0,
(LPVOID)&rectWorkArea,
0);
if( pWnd )
{
pWnd->GetWindowRect(rectTaskBar);
rectWorkArea.bottom -= rectTaskBar.Height();
SystemParametersInfo(SPI_SETWORKAREA,
0,
(LPVOID)&rectWorkArea,
0);

pWnd->ShowWindow(SW_SHOW);
}
}