有没有工具可以把Google Calendar自动设成壁纸

想用月视图或者周视图做背景。后台定期拉取Google Calendar,生成一张图片并设为壁纸

就像这样,不过最好是能调整配色的

Google日历有三种访问方式:Google日历自身的API、iCal、HTML,理论上使用三者之中的任意一种方式都能够实现吧

我目前是用了一个很笨的方法…把Google日历同步到Win10系统自带的通用日历,调成深色背景,然后用 #autohotkey 来自动截图设壁纸。

不知道有什么更好的方法吗?


最笨的方法:基于画图

Windows的画图不能设置透明度、高斯模糊什么的,这种方法设置壁纸,会导致桌面的图标可读性会变得有点差(可参考上方的截图)

1. 创建一个AHK脚本


    ; 截图

    Run, explorer.exe shell:appsFolder\microsoft.windowscommunicationsapps_8wekyb3d8bbwe!microsoft.windowslive.calendar
    Sleep, 500
    SendInput, #{Up}
    Sleep, 2000
    SendInput, !{PrintScreen}!{F4}

    ; 设置壁纸

    Sleep, 100
    Run, mspaint
    WinWaitActive, ahk_class MSPaintApp
    SendInput, ^{v}
    Sleep, 100
    SendInput, !{f}{b}{Enter}
    WinWaitActive, ahk_class #32770
    SendInput, {Text}temp.png
    SendInput, !{d}{Text}C:\AHK
    SendInput, {Enter}{Enter}
    Sleep, 200
    WinWaitActive, ahk_class MSPaintApp
    SendInput, !{F4}

    ; 删除截图

    Sleep, 1000
    SendInput, #{d}
    FileDelete, C:\AHK\temp.png
    Return

2. 创建任务计划

然后打开系统自带的任务计划taskschd.msc,定一个运行间隔,比如说,每3天自动运行一次脚本,截图壁纸就可以自动更新了


稍微好一点的笨方法:基于ImageMagick

ImageMagick是一个可以通过命令行使用的图片编辑器,启动比画图更快,功能也比画图更加强大。这里我们用它来裁切截图,再把截图的白点降低(白色的文字拉到灰色),以期达到壁纸不干扰桌面图标的效果

1. 安装ImageMagick

2. 创建一个AHK脚本


    ; 创建截图

    Run, explorer.exe shell:appsFolder\microsoft.windowscommunicationsapps_8wekyb3d8bbwe!microsoft.windowslive.calendar
    Sleep, 500
    SendInput, #{Up}
    Sleep, 2000
    SendInput, !{PrintScreen}!{F4}

    ; 编辑图片并保存

    Run, magick clipboard: -crop 2028x1112+134+172 +level 0`,50`% C:\AHK\temp.png

    ; 设置壁纸

    Run, explorer.exe /select`, C:\AHK\temp.png
    WinWaitActive, ahk_class CabinetWClass
    SendInput, {AppsKey}{b}
    Sleep, 500
    SendInput, !{F4}

    ; 删除截图

    Sleep, 500
    SendInput, #{d}
    FileDelete, C:\AHK\temp.png
    Return

其中这一行要根据自己的实际情况修改:

Run, magick clipboard: -crop 2028x1112+134+172 +level 0`,50`% C:\AHK\temp.png

-crop 2028x1112+134+172的含义是以(134,172)像素点作为起点,向右下方裁切出一张2028x1112像素的图片,请根据自己的屏幕分辨率自行调试合适的数值

+level 0`,50`%的含义是将截图的白点降低至原来的一半

3. 创建任务计划

然后打开系统自带的任务计划taskschd.msc,定一个运行间隔,比如说,每3天自动运行一次脚本,截图壁纸就可以自动更新了


差不多的方法:基于HTML/CSS to Image API

只是一个思路

貌似这样还蛮有意思,每次看日历就得先打开浏览器,有时候看着看着就去摸鱼去了 reddit上有人讨论,貌似是通过rainmeter实现? https://www.reddit.com/r/wallpaperengine/comments/baoccl/request_google_calendar/

如果不考虑和google同步的问题的话,可以用这款经典软件:桌面日历 http://chs.desktopcal.com/chs/

写个网页,JS 透过 API 获取数据,然后呈现出来

用壁纸引擎设置为桌面。

网页设为壁纸的功能好像是从Vista开始就砍了……而且网页壁纸一般是可交互的,相比静态的图片壁纸还多了一层干扰……

仔细看我的描述嗷~

将网页设置成壁纸是用壁纸引擎。

这种方式可以产生的是有限交互,并且网页是自己写的,完全可以去掉所有交互。我现在壁纸就是动态从网络上获取随即图片,并加上一定的模糊效果。15 分钟换一张,美滋滋

有什么推荐的壁纸引擎吗?我想去看看都可以做什么~

我是因为不会拼写英文,Wallpaper Engine,软件名就叫这个,Steam 上有卖,价格:18,我觉得很值

噗哈哈哈……这个名字,就好像苹果给自己的智能手表取名叫“手表”一样

似乎还没见过这样的玩法。

rainlendar 它不香吗?

image

2赞

今天找到了一个可能比较好的解决方法——

我们知道Google Calendar都会有一个公开网址,形如

https://calendar.google.com/calendar/u/0/embed?src=youraccount@example.com&ctz=Asia/Shanghai

这个公开网址默认的样子会比较丑

而有这样一个HTML to Image API的服务,可以把URL渲染成图片,并且允许设定Viewport大小以及套自定义的CSS

我们只要重写CSS把上面Google Calendar的公开网址设计得更适合当壁纸,再写一个脚本用Windows的任务计划定时请求API,就可以获取到日历图片,并进一步设定成壁纸

或者也可以尝试用Microsoft Flow之类的云端服务定时请求API,通过OneDrive取回。win10有把特定文件夹中的图片设置为幻灯片壁纸的功能,我们只要用MS Flow保持文件夹只有最新的那张图片,就可以做到无感更新

这一套流程有个时效问题啊,万一哪个环节卡住…日历就崩了。

日历并不怎么需要时效啊,快一点三五天一更新,普通点一个星期一更新,甚至再慢点每月更新一次都是可以的啊

试验成功了么

感觉可能要调试个半天一天的……懒得弄……

我现在在用昨天更新的 UWP日历+ImageMagick 方法……用Windows任务计划三天更新一次截图。每次更新大概要忍5秒左右别去操作键盘和鼠标,防止打断ahk的操作

用无头浏览器就行吧……