Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 针对Windows中的多显示器设置,每个屏幕使用不同的壁纸_Python_Windows_Winapi_Desktop Wallpaper - Fatal编程技术网

Python 针对Windows中的多显示器设置,每个屏幕使用不同的壁纸

Python 针对Windows中的多显示器设置,每个屏幕使用不同的壁纸,python,windows,winapi,desktop-wallpaper,Python,Windows,Winapi,Desktop Wallpaper,我正在使用: ctypes.windll.user32.SystemParametersInfoA(SPI_SETDESKWALLPAPER, 0, "picturefile", 0) 换墙纸 但是我想知道是否有简单的方法在每个屏幕上放置不同的壁纸 虽然此功能在windows中不是标准功能,但有一些外部应用程序(如ultramon)可以实现此功能。有人知道这是怎么回事吗 我认为如果我把两幅图像合并成一幅,然后

我正在使用:

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

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

虽然此功能在windows中不是标准功能,但有一些外部应用程序(如ultramon)可以实现此功能。有人知道这是怎么回事吗

我认为如果我把两幅图像合并成一幅,然后把它做成壁纸,可能会奏效,但我仍然需要一种方法来跨越两个屏幕上的一幅图像

另外,我如何获取有关显示器设置、每个屏幕的分辨率及其位置的信息?与您在windows的gui显示设置中看到的相同,但数量不同

  • 将图像合并成大图像后,必须将壁纸模式设置为“平铺”,以使图像跨越桌面(否则将在每个显示器上重新启动)

    有两种方法可以做到这一点:

    a) 使用(不需要使用Active Desktop,不用担心)。这是最好的,因为在Win7上,新墙纸会褪色

    创建一个IActiveDesktop/CLSID_ActiveDesktop COM对象,然后调用SetWallpaper、SetWallpaperOptions,最后调用ApplyChanges。(由于我不是Python开发人员,我不确定如何访问COM对象,抱歉。)

    或:

    b) 通过注册中心。这不是很好,但效果很好

    HKEY\u CURRENT\u USER\Control Panel\Desktop
    set下:

    • TileWallpaper
      to(REG_SZ)
      1
      (即字符串“1”不是数字1)
    • 壁纸风格
      至(REG_SZ)
      0
      (即字符串“0”不是数字0)
    • 然后调用SystemParameterInfo(SPI_SETDESKTOPWALLPAPER…),就像您已经做的那样

    顺便说一下,我正在查看的代码使用IActiveDesktop,如果失败则返回注册表,它将
    SPIF_UPDATEINIFILE | SPIF_SENDCHANGE
    作为SystemParameterInfo的最后一个参数;您当前正在通过0,这可能是错误的

  • 是获取监视器详细信息的Win32 API,包括它们的屏幕大小和相对位置

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

    在Google上快速搜索“PythonEnumWindows”(EnumWindows是一种常用的API,它以相同的方式返回结果),会发现有人在谈论这个问题,并使用Lambda函数进行回调,所以看起来这是可能的,但我将把它留给更了解Python的人

    注意:记住要处理彼此不相邻或不对齐的监视器。编译后的图像可能需要有空白区域,以便在所有监视器上对齐。如果你移动其中一个显示器,对整个桌面做一个PrtScn屏幕截图,你就会明白我在结果中的意思


  • 我不知道你的答案,但我相信你是对的。我试用了一些第三方应用程序,我模糊地记得至少有一个应用程序解释说,它们从窗口获取了显示尺寸和相对位置,并将两个图像缝合在一起,在两个显示器上显示。我不记得是在哪读的,也不记得在哪里读的,但如果我再次看到它并记起来,我会留下另一条评论。谢谢。如果你能找到,那就太好了。谢谢。现在我知道从哪里开始找了。