是否有 Win32 API 来监视、定位和定位任务栏“通知区域”?

Dav*_*ske 8 winapi win32gui windows-10

Windows 任务栏包含一个称为“通知区域”或“系统托盘”的区域,其中为想要在后台运行和/或显示系统通知的应用程序显示小图标。当任务栏位于屏幕底部或顶部时,此区域出现在右侧。

在多显示器设置中,即使任务栏设置为在所有显示器上显示,此“通知区域”也只会出现在其中一个任务栏上。您可以通过将任务栏拖动到您喜欢的任何显示来控制通知区域出现在哪个显示上。

我的问题是:

有没有什么直接的 API 可以找到任务栏“通知区域”的屏幕、位置和方向?

我找到了一个搜索 Shell_TrayWnd 窗口句柄的示例,然后对其位置进行数学运算,尝试找出它所处的方向(即任务栏位于屏幕的哪个边缘)。

但是,这非常脆弱,因为它取决于 Windows 任务栏的当前 UI 设计。

Windows 10 引入了一个新的通用 Toast 通知系统,包括一个时髦的通知弹出窗口。但是,即使您已将通知区域移动到不同的监视器,包括打开和关闭系统通知浮出控件的按钮,浮出控件本身仍会显示在“主监视器”上

以上表明可能没有办法做到这一点,好像微软自己的通知没有遵循通知区域,实际上可能没有办法这样做。但是,通知区域的Microsoft文档提出了一个非常明智的想法,即 toast 应该显示在它附近......我认为他们只是没有考虑多显示器的情况。

微软吐司位置指南

use*_*670 1

如果您想显示某个窗口作为对托盘图标操作的响应,则无需手动搜索托盘位置,因为相应的托盘消息将包含光标坐标作为 wparam。即使事件是由键盘生成的,消息也会包含图标的左上角坐标。请参阅NOTIFYICONDATA 结构文档