检测暗窗任务栏

问题描述 投票:1回答:1

出于主题目的,我希望检测Windows任务栏的颜色(在我的情况下,为任务栏图标)。

我正在使用Java,但是欢迎使用任何解决方案,因为我很乐意根据需要对其进行转换。

  • 我的第一次尝试是读取注册表。
    • 这对于提供此值的台式机非常有用,但是在注册表中为falls short没有提供。
  • 我的第二次尝试是截取任务栏的屏幕截图,并尝试猜测它是深色还是浅色主题。

    • 即使打开自动隐藏,此功能也可以使用。不幸的是,无论我做什么,它都会返回黑色背景:

        WinDef.HWND tray = User32.INSTANCE.FindWindow("Shell_TrayWnd", null);
        BufferedImage bi = GDI32Util.getScreenshot(tray);
        SwingUtilities.invokeLater(() -> JOptionPane.showMessageDialog(null, new JLabel((new ImageIcon(bi)))));
      

      enter image description here

假设我想要依靠Windows徽标的白色/黑色,有没有办法检测到这一点?

相关:

java winapi jna taskbar
1个回答
0
投票

您应该可以通过User32.dll的GetSysColor()来获得它。

GetSysColor()

然后:

public interface MyUser32 extends User32 {
    MyUser32 INSTANCE = 
        (MyUser32) Native.load("user32", User32.class, W32APIOptions.DEFAULT_OPTIONS);

    int COLOR_WINDOW = 5;

    int GetSysColor(int nIndex);
}

32位返回值为int rgb = MyUser32.INSTANCE.GetSysColor(MyUser32.COLOR_WINDOW); (0x00bbggrr)

© www.soinside.com 2019 - 2024. All rights reserved.