Используйте SHAppBarMessage для перемещения панели задач - PullRequest
2 голосов
/ 05 декабря 2010

Я пытаюсь программно переместить МОЮ панель задач с помощью функции win32 SHAppBarMessage () с параметром ABM_SETPOS.

Я знаю и следую мантре «Всегда держите пользователя под контролем», и я знаю, что некоторые скажут, что у приложения нет причин делать это.Я изучаю win32, и эта проблема на какое-то время побеждала меня, и это всегда заставляет меня хотеть решить эту проблему еще больше!Если есть функция SHAppBarMessage, то окна должны позволять вам перемещать панель задач.

Не могли бы вы дать совет о том, как я могу заставить SHAppBarMessage перемещать панель задач вправо?

Мой код ниже используетдва метода, чтобы попытаться переместить панель задач к правой границе моего экрана.Оба метода терпят неудачу, и я начинаю думать, что, возможно, Windows 7 не позволит вам переместить панель задач, хотя я искал MSDN, и ни одна из документации не предполагает, что она устарела.

1-й метод следует вежливому стандартуСначала используйте ABM_QUERYPOS, прежде чем я попытаюсь ABM_SETPOS, но это не перемещает панель задач.

BOOL moveTaskBar( UINT pos, bool a )
{
// Post:

APPBARDATA barData;
RECT       barRect;
HWND       hTaskbar = FindWindow( "Shell_TrayWnd", NULL );

SetRect( &barRect, 1310, 10, 1350, 740 ); // These dimensions & coords are within my screens bounds so thats not a problem

barData.cbSize           =  sizeof(APPBARDATA);
barData.hWnd             =  hTaskbar;
barData.uCallbackMessage =  0;
barData.uEdge            =  pos;
barData.rc               =  barRect;
barData.lParam           = (LPARAM) FALSE;

BOOL fResult = (BOOL) SHAppBarMessage( ABM_QUERYPOS, &barData ); // Get system to verify & suggest position
fResult = (BOOL) SHAppBarMessage( ABM_SETPOS, &barData );        // Set position
fResult = (BOOL) SHAppBarMessage( ABM_WINDOWPOSCHANGED, &barData ); // Inform ??? that the taskbar pos has been changed

// Debugging
// fResult = (BOOL) SHAppBarMessage( ABM_ACTIVATE, &barData );
// fResult = (BOOL) SHAppBarMessage( ABM_GETTASKBARPOS, &barData );


return ( fResult == 0 );
}

Мой второй метод пытается заставить HWND панели задач переместиться в положение x, y, это то, что я не хотел бы делать, но я пытаюсь найти метод для перемещенияпанель задач, но в любом случае этот метод также не работает.Что заставляет меня думать, что вы не можете переместить панель задач в Windows 7?

BOOL moveTaskBar( UINT pos )
{
// Post:

HWND       hTaskbar = FindWindow( "Shell_TrayWnd", NULL );

SetWindowPos(hTaskbar, NULL, barData.rc.left, barData.rc.top, barData.rc.right, barData.rc.bottom, SWP_NOSENDCHANGING);
ShowWindow(hTaskbar, SW_SHOW);

UpdateWindow(hTaskbar);

HWND hDesktopWindow = GetDesktopWindow();

RedrawWindow( hDesktopWindow, NULL, NULL, RDW_FRAME|RDW_INVALIDATE|RDW_UPDATENOW|RDW_ALLCHILDREN );

SystemParametersInfo(SPI_SETWORKAREA, 0, NULL, SPIF_SENDCHANGE);

UpdateWindow(hDesktopWindow);

}

1 Ответ

2 голосов
/ 05 декабря 2010

Нет способа сделать это, пользователь владеет этим параметром, а не ваша программа (я знаю, что вы можете быть пользователем своей собственной программы, но вот почему).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...