Windows任务栏包含一个名为“通知区域”或“系统托盘”的区域,其中为希望在后台运行和/或显示系统通知的应用程序显示小图标。当任务栏位于屏幕的底部或顶部时,此区域将显示在右侧。
在多显示器设置中,即使任务栏设置为在所有显示器上显示,此“通知区域”也仅显示在其中一个任务栏上。您可以通过将任务栏拖动到您喜欢的任何显示来控制显示通知区域的显示。
我的问题是:
是否有任何简单的API可以找到任务栏“通知区域”的屏幕,位置和方向?
我找到了searches for the Shell_TrayWnd window handle的一个例子,然后对其位置进行数学运算并找出它的方向(即任务栏所在的屏幕边缘)。
但是,这非常脆弱,因为它取决于Windows任务栏的当前UI设计。
Windows 10引入了一个新的common toast notification system,包括一个时髦的通知弹出窗口。但是,即使您已将通知区域移动到其他监视器(包括打开和关闭系统通知弹出按钮的按钮),也可以flyout itself is still displayed on the "primary monitor"。
以上表明可能无法做到这一点,好像微软自己的通知不遵循通知区域,可能无法实际执行此操作。然而,微软documentation of the notification area提出了一个非常明智的想法,即吐司应该在它附近显示......我认为他们只是没有想到多监视器案例。
答案 0 :(得分:-1)
如果要显示某个窗口作为对托盘图标操作的响应,则无需手动搜索托盘位置,因为相应的托盘消息将包含光标坐标为wparam。即使事件是由键盘生成的,然后消息将包含图标左上角坐标。见NOTIFYICONDATA structure documentation