我的问题是,您是否可以检测批处理脚本中是否显示桌面(对于Vista)?
理念是这样的:我正在写一个剧本作为我朋友的恶作剧。你们中的一些人可能听说过Doctor Who的Weeping Angels。我正在尝试制作脚本,以便每次返回桌面时(就像最小化您正在查看的内容),壁纸会更改为另一个 天使的形象,在你不看的时候创造出它正在移动的错觉,就像在系列中一样。
我的想法是检测桌面何时不可见,并且每当它再次可见时,壁纸将循环到下一个图像。问题是,我不知道如何做到这一点。
除了实际问题之外,任何关于效果的提示都会受到赞赏。
谢谢。
答案 0 :(得分:1)
嗯,这不完全是你要求的(不确定是否可以检测到活动窗口)......但它有一些你正在寻找的部分。
基本上,它会将您的壁纸更改为每隔x小于5分钟的文件夹中的几个,其中x是随机数。如果您对如何更改/建议/问题有任何想法,请与我联系。
@echo off
rem random number of milliseconds (0-5 minutes)
SET /A time=%RANDOM% * (300000 / 32768)
echo waiting %time% ms
PING 1.1.1.1 -n 1 -w %TIME% >NUL
echo done
rem index between 1 and 5
SET /A WALL_INDEX = %random% %% 5 + 1
rem create a folder with many wallpapers in it, and name them 1.png, 2.png, 3.png ... x.png
set WALL="C:\%WALL_INDEX%.png"
rem this is how you change the wallpaper, i stole this from some random site, but I tested it and it seemed to work... usually.
@echo off
reg add "hkcu\control panel\desktop" /v wallpaper /t REG_SZ /d "" /f
rem sets the wallpaper to the path in %WALL%
reg add "hkcu\control panel\desktop" /v wallpaper /t REG_SZ /d %WALL% /f
reg delete "hkcu\Software\Microsoft\Internet Explorer\Desktop\General" /v WallpaperStyle /f
reg add "hkcu\control panel\desktop" /v WallpaperStyle /t REG_SZ /d 0 /f
RUNDLL32.EXE user32.dll,UpdatePerUserSystemParameters
答案 1 :(得分:1)
您可以使用名为Sikuli的Java库来执行此操作,该库可以进行屏幕模式匹配。您所做的只是在桌面上按照您希望它出现触发时的确切方式截屏,然后将单元测试设置为在5秒循环中运行,始终检查桌面是否以某种方式显示然后触发墙纸更改。因此,它将采用Java / JUnit / Sikuli和批处理脚本的混合。此外,您必须以某种方式将批处理脚本放入其启动程序列表中。