是否有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