Winapi 获得托盘区域时钟视觉主题的最佳方法是什么?

Winapi 获得托盘区域时钟视觉主题的最佳方法是什么?,winapi,themes,system-tray,Winapi,Themes,System Tray,系统的托盘区域时钟视觉主题在MSDN中,所以我想微软希望我们能够使用它。我想用它来画我的任务栏带的背景,以便更好地融入托盘区域。当我试图 (空,L“时钟”) 它总是失败。我发现获取该主题的唯一方法是找到实际的时钟窗口,并请求其主题: 使用FindWindowEx查找具有Shell\u TrayWnd类的窗口,然后使用classTrayNotifyWnd查找其子窗口,然后使用TrayClockWClass类查找此窗口的子窗口 调用OpenThemeData并传递实际时钟的窗口句柄 显然,内部W

系统的托盘区域时钟视觉主题在MSDN中,所以我想微软希望我们能够使用它。我想用它来画我的任务栏带的背景,以便更好地融入托盘区域。当我试图

(空,L“时钟”)

它总是失败。我发现获取该主题的唯一方法是找到实际的时钟窗口,并请求其主题:

  • 使用
    FindWindowEx
    查找具有
    Shell\u TrayWnd
    类的窗口,然后使用class
    TrayNotifyWnd
    查找其子窗口,然后使用
    TrayClockWClass
    类查找此窗口的子窗口

  • 调用OpenThemeData并传递实际时钟的窗口句柄

显然,内部Windows窗口类名是未记录的。虽然上面的方法似乎有效,但我宁愿使用不那么易碎的东西


问题:是否有任何合理的方法来获取托盘区域的时钟视觉主题?

显然,您不能总是将OpenThemeData与NULL一起使用

吉姆·巴里6年前

您需要有一个可以调用SetWindowTheme的HWND。设置 pszSubAppName到“TrayNotifyHoriz”或“TrayNotifyVert”并离开 pszSubIdList为空。然后,您可以使用 pszClassList设置为“TrayNotify”

我完全搞不懂怎么会有人知道这件事。 坦率地说,视觉样式文档非常糟糕,是一个绝对错误 耻辱。
--Jim Barry,MVP(Windows SDK)