Ste*_*son 2 python windows winapi desktop-wallpaper
我正在使用:
ctypes.windll.user32.SystemParametersInfoA(SPI_SETDESKWALLPAPER,
0, "picturefile", 0)
Run Code Online (Sandbox Code Playgroud)
要改变壁纸.
但我想知道是否有任何简单的方法在每个屏幕上放置不同的壁纸.
虽然这个功能在Windows中不是标准功能,但是像ultramon这样的外部应用程序可以做到这一点.有谁知道它是如何工作的?
如果我将两个图像合并为一个然后制作壁纸,我认为它可能会起作用的方式,但是我仍然需要一种跨两个屏幕跨越一个图像的方法.
另外,我如何获取有关显示器设置,每个屏幕的分辨率及其位置的一些信息?就像你在windows中的gui显示设置中看到的那样,但是在数字中.
将图像连接成一个大图像后,您必须将壁纸模式设置为平铺以使图像跨越桌面(否则它将在每个显示器上重新启动).
有几种方法可以做到这一点:
a)使用IActiveDesktop(它不要求活动桌面使用,不用担心).这是最好的,因为在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).
顺便说一句,我正在查看的代码,它使用IActiveDesktop并在失败时退回到注册表,SPIF_UPDATEINIFILE | SPIF_SENDCHANGE
作为最后一个参数传递给SystemParameterInfo; 你现在正在通过0这可能是错的.
EnumDisplayMonitors是Win32 API,用于获取监视器的详细信息,包括其屏幕大小和相对于彼此的位置.
该API通过您必须提供的回调函数返回其结果.(它为每个监视器调用一次.)我不是Python开发人员所以我不确定如何从Python调用这样的函数.
一个快速的谷歌"Python EnumWindows"(EnumWindows是一个常用的API,以相同的方式返回结果)发现人们在谈论这个,并使用Lambda函数进行回调,所以看起来它可能但我会离开它适用于对Python有更多了解的人.
注意:请记住应对不是彼此相邻或彼此不对齐的显示器.您编译的图像可能需要有空白区域才能使所有监视器上的内容对齐.如果您移动其中一个显示器并执行整个桌面的PrtScn屏幕截图,您将看到我在结果中的含义.
归档时间: |
|
查看次数: |
1795 次 |
最近记录: |