Python:如何获取Windows桌面背景颜色



上下文:在我的办公电脑上,有一个应用的公司政策->桌面壁纸上的标准公司图片。画面太亮;我把它切换到更暗的背景色,每天手动运行脚本几次。

目标:使用Python 实现此操作的自动化

  1. 每隔一段时间一次
  2. 检查一些桌面背景像素
  3. 如果它的颜色不符合我的喜好
  4. 然后将此颜色应用于桌面背景

我对第2页有意见。我在桌面上发现了以下用于拾取像素颜色的代码:

def get_pixel_colour(i_x, i_y):
import win32gui     # pip install pywin32
#i_desktop_window_id = win32gui.GetDesktopWindow()
i_desktop_window_id = win32gui.FindWindow('SysListView32', None)
i_desktop_window_dc = win32gui.GetWindowDC(i_desktop_window_id)
long_colour = win32gui.GetPixel(i_desktop_window_dc, i_x, i_y)
i_colour = int(long_colour)
win32gui.ReleaseDC(i_desktop_window_id, i_desktop_window_dc)
return (i_colour & 0xff), ((i_colour >> 8) & 0xff), ((i_colour >> 16) & 0xff)
print(get_pixel_colour(100, 5))

它有效。同时,它从前景窗口拾取颜色:如果某个应用程序窗口超过像素(100,5(,则颜色将从该窗口获取,而不是从桌面背景获取。

有什么想法可以让桌面背景颜色即使有其他应用程序不是顶级的吗?

对于在后台运行的脚本来说,直接从屏幕上显示的内容中获取像素值将是一个有问题的解决方案。相反,我会尝试获得壁纸图像像素的实际值。您可以使用SystemParametersInfoA获取当前设置的壁纸的路径。

import ctypes
SPI_SETDESKWALLPAPER = 0x14
SPI_GETDESKWALLPAPER = 0x73
buf_size = 200
path = ctypes.create_string_buffer(buf_size)
ctypes.windll.user32.SystemParametersInfoA(SPI_GETDESKWALLPAPER, buf_size, path , buf_size)
print(path.value)

使用此路径,您可以加载实际图像,检查其亮度或您感兴趣的任何值,并根据您的意愿进行编辑。然后,您可以使用SPI_SETDESKWALLPAPER将背景设置为编辑后的图像或其他任何您想要的内容。

最新更新