Windows中多显示器设置的每个屏幕的不同壁纸

我在用着:

ctypes.windll.user32.SystemParametersInfoA(SPI_SETDESKWALLPAPER, 0, "picturefile", 0) 

要更改壁纸。

但我想知道是否有任何简单的方法来在每个屏幕上放置不同的壁纸。

虽然这个function在Windows中不是标准的,但是有像Ultramon这样的外部应用程序。 任何人都知道如何工作?

我认为这可能会工作,如果我一起join到一个两个图像,然后制作壁纸,但是我仍然需要一种跨越两个屏幕上的一个图像的方式。

另外,我怎样才能获得关于显示器设置,每个屏幕的分辨率和他们的位置的一些信息? 就像你在GUI中看到的gui显示设置一样,但是在数字上。

Solutions Collecting From Web of "Windows中多显示器设置的每个屏幕的不同壁纸"

  1. 将图像连接成大图像后,必须将壁纸模式设置为平铺,以使图像跨越桌面(否则将在每个显示器上重新启动)。

    几个方法来做到这一点:

    a)使用IActiveDesktop (不需要使用Active Desktop,不用担心)。 这是最好的,因为在Win7的新壁纸将淡入。

    您创建一个IActiveDesktop / CLSID_ActiveDesktop COM对象,然后调用SetWallpaper,SetWallpaperOptions和最后ApplyChanges。 (因为我不是一个Python开发人员,我不确定你是如何访问COM对象的,对不起。)

    要么:

    b)通过注册表。 这不是很好,但工作得很好。

    HKEY_CURRENT_USER\Control Panel\Desktop集下:

    • TileWallpaper到(REG_SZ) 1 (即字符串“1”不是数字1)
    • WallpaperStyle到(REG_SZ) 0 (即字符串“0”不是数字0)
    • 然后像你那样调用SystemParameterInfo(SPI_SETDESKTOPWALLPAPER …)。

    顺便说一句,我正在查看的代码,使用IActiveDesktop,如果失败,回落到注册表,通过SPIF_UPDATEINIFILE | SPIF_SENDCHANGE 作为SystemParameterInfo的最后一个参数SPIF_UPDATEINIFILE | SPIF_SENDCHANGE ; 你正在传递0,这可能是错误的。

  2. EnumDisplayMonitors是用于获取监视器上的细节的Win32 API,包括它们的屏幕大小和相对于彼此的位置。

    该API通过您必须提供的回调函数返回结果。 (它为每个监视器调用一次。)我不是Python开发人员,所以我不确定如何从Python调用这样的函数。

    对于“Python EnumWindows”(EnumWindows是一个常用的API,它以相同的方式返回结果)来说,一个快速的Google发现人们正在讨论这个问题,并且使用一个Lambda函数来进行回调,所以看起来好像是可能的,但是我会离开它给了解更多关于Python的人。

    注意:请记住处理不相邻的显示器或不相互对齐的显示器。 您的编译图像可能需要有空白区域才能在所有显示器上排列好。 如果你移动一台显示器并做一个整个桌面的PrtScn截图,你会看到我的意思是在结果。