是否有WinAPI函數來檢索任務欄的句柄?獲取句柄到任務欄
目的是確定任務欄停靠設置(ABE_LEFT,ABE_RIGHT,ABE_BOTTOM,ABE_TOP)。函數SHAppBarMessage
要求任務欄句柄檢索停靠信息。除非有另一種方法來確定任務欄停靠設置而不需要處理?
我知道這個方法,工作正常,但我不知道它適用於所有的Windows版本:
HWND taskBar = FindWindow("Shell_TrayWnd", NULL);
是否有WinAPI函數來檢索任務欄的句柄?獲取句柄到任務欄
目的是確定任務欄停靠設置(ABE_LEFT,ABE_RIGHT,ABE_BOTTOM,ABE_TOP)。函數SHAppBarMessage
要求任務欄句柄檢索停靠信息。除非有另一種方法來確定任務欄停靠設置而不需要處理?
我知道這個方法,工作正常,但我不知道它適用於所有的Windows版本:
HWND taskBar = FindWindow("Shell_TrayWnd", NULL);
這似乎是一個文檔錯誤。當撥打SHAppBarMessage1)時,您不需要在結構中爲ABM_GETTASKBARPOS提供窗口句柄。
下面的代碼正確返回任務欄的位置(在Windows 10的x64測試):
#include <shellapi.h>
#pragma comment(lib, "Shell32.lib")
#include <stdexcept>
RECT GetTaskbarPos() {
APPBARDATA abd = { 0 };
abd.cbSize = sizeof(abd);
if (!::SHAppBarMessage(ABM_GETTASKBARPOS, &abd)) {
throw std::runtime_error("SHAppBarMessage failed.");
}
return abd.rc;
}
更新:這個問題是真的要求對接枚舉值。即返回以及:
#include <shellapi.h>
#pragma comment(lib, "Shell32.lib")
#include <stdexcept>
UINT GetTaskbarDockingEdge() {
APPBARDATA abd = { 0 };
abd.cbSize = sizeof(abd);
if (!::SHAppBarMessage(ABM_GETTASKBARPOS, &abd)) {
throw std::runtime_error("SHAppBarMessage failed.");
}
return abd.uEdge;
}
我想知道當任務欄在多個監視器上時它是如何處理的。 –
@JonathanPotter:這隻會檢索主顯示的任務欄位置。要在其他顯示器上獲取任務欄位置,請改爲調用[GetMonitorInfo](https://msdn.microsoft.com/en-us/library/dd144901.aspx)。 – IInspectable
@JonathanPotter:當調用'GetMonitorInfo'時,你必須自己完成對接。它不是[MONITORINFO](https://msdn.microsoft.com/en-us/library/dd145065.aspx)結構的一部分。 – IInspectable
到Windows 7(含),應該可以工作。 Windows 8及更高版本,其改變。請參閱[此問題](http://stackoverflow.com/questions/9569620/how-do-i-get-a-handle-to-the-start-button-in-windows-7)以獲取更多信息。 – t0mm13b