2010-12-05 56 views
1

我想以編程方式使用帶參數ABM_SETPOS的win32函數SHAppBarMessage()來移動我的任務欄。使用SHAppBarMessage移動任務欄

我知道&遵循口頭禪「始終讓用戶控制」&我知道有些人會說,應用程序沒有理由這樣做。我正在學習win32 &這個問題已經得到了我最好的一段時間&總是讓我想要解決更多的這個問題!如果有一個函數SHAppBarMessage,那麼窗口必須允許你移動任務欄。

您能否提供關於如何讓SHAppBarMessage將任務欄移動到右側的建議?

我的代碼如下使用兩種方法來嘗試將任務欄移動到我的屏幕的右邊框。兩種方法都失敗&我開始認爲,雖然我已經搜索了MSDN &,但Windows 7不允許您移動任務欄,但是沒有任何文檔表明它已折舊。

在嘗試使用ABM_SETPOS之前,第1種方法遵循使用ABM_QUERYPOS的第1種禮貌標準,但這不會移動任務欄。

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); 

} 
+0

SHAppBarMessage用於移動您自己的應用程序欄,而不用於移動任務欄。 – 2010-12-05 11:33:12

回答

2

有沒有辦法做到這一點,用戶擁有一個設置,而不是你的程序(我知道你可能是你自己的程序的用戶,但是這就是爲什麼)。