请教一下关于 window 桌面壁纸轮播的问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
biguokang
V2EX    Windows

请教一下关于 window 桌面壁纸轮播的问题

  •  
  •   biguokang 2023-01-09 14:52:01 +08:00 1935 次点击
    这是一个创建于 1083 天前的主题,其中的信息可能已经有所发展或是发生改变。

    win10 壁纸设置有一个幻灯片放映的选项(其实就是壁纸轮播),意思是你指定一个文件夹,那么你的 windows 壁纸是轮播该文件夹里面的图片。

    然后我的照片文件夹根目录是没有图片的,我照片文件夹里有几百张图片分别存在十几个子文件夹里。

    如果幻灯片相册直接设置我的照片文件夹,是不会有反应的,只有设置我照片文件夹里的某一个子文件夹,才会轮播我这个子文件夹里面的图片。

    所以看起来貌似是,这个 windows 设置里的壁纸轮播不支持递归子文件夹操作。

    我现在的需求是,如何让壁纸轮播递归每一个子文件夹里呢,我 google 了一下貌似 window 壁纸设置还真的不支持这种递归遍历操作。

    而且此外还有一个前提,那就是我电脑本地照片文件夹是定时从 nas 的照片文件夹那里同步下来的,我曾经想过写脚本在我的本地文件夹取消所有的子文件夹让里面的照片都存在照片文件夹根目录里,但是同步怎么办???

    请教下各位大佬,有没有啥方案能实现我的需求

    7 条回复    2023-01-10 06:51:07 +08:00
    karatsuba
        1
    karatsuba  
       2023-01-09 14:59:02 +08:00   2
    搞两个文件夹,一个用来轮播一个用来备份
    biguokang
        2
    biguokang  
    OP
       2023-01-09 15:10:08 +08:00
    ps. 我以前在 mac 上是可以实现这个操作的,mac 设置里的壁纸轮播会递归遍历子文件夹里的每一个图片进行轮播,因为配了新电脑最近换 windows ,所以我才会有这个需求。
    lisongeee
        3
    lisongeee  
       2023-01-09 16:14:55 +08:00
    搞一个单独文件夹,然后写个脚本递归把原来文件夹的所有图片文件硬链接到这个新的文件夹
    定时同步完毕之后,运行一下这个脚本
    loginv2
        4
    loginv2  
       2023-01-09 17:04:39 +08:00
    可以做一个换壁纸的程序 user32.dll 有一个 api SystemParametersInfo 。可以换壁纸,但是没法控制居中平铺之类的效果,需要修改注册表来实现
    还有另一个方案 https://www.cnblogs.com/lzjsky/archive/2011/01/17/1937514.html 这里有讲

    我的简单想法是,在磁盘上找一个固定位置,通过脚本递归遍历你的图片,然后 mlink 到那个固定位置,然后系统设置壁纸位置也改成那里就行了。
    darklights
        5
    darklights  
       2023-01-09 17:11:10 +08:00
    程序员嘛, 自己动手, 饿死罢就

    $setwallpapersrc = @"
    using System.Runtime.InteropServices;

    public class Wallpaper
    {
    public const int SetDesktopWallpaper = 20;
    public const int UpdateIniFile = 0x01;
    public const int SendWinIniChange = 0x02;
    [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
    private static extern int SystemParametersInfo(int uAction, int uParam, string lpvParam, int fuWinIni);
    public static void SetWallpaper(string path)
    {
    SystemParametersInfo(SetDesktopWallpaper, 0, path, UpdateIniFile | SendWinIniChange);
    }
    }
    "@
    Add-Type -TypeDefinition $setwallpapersrc

    cd $PSScriptRoot
    $nr = [uint](Get-Content ".nr" -ErrorAction Ignore)
    $ls = Get-ChildItem -r *.jpg,*.jpeg | ? Length -gt 100kb | Select-Object -First ($nr + 10) | % FullName
    if ($nr -ge $ls.Length) { $nr = 0 }
    [Wallpaper]::SetWallpaper($ls[$nr])
    Set-Content '.nr' ($nr + 1)

    用计划任务跑 pwsh -noni -nop -w hidden -f "C:\Path\To\Pictures\wallpaper.ps1"

    实际上还是会有个小黑窗一闪而过,
    受不了的话只能用其他语言改写, 性能还好点
    又或者用个 exe 包一下

    #include <string>
    #include <Windows.h>
    int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
    _In_opt_ HINSTANCE hPrevInstance,
    _In_ LPWSTR lpCmdLine,
    _In_ int nCmdShow)
    {
    STARTUPINFO startup_info;
    ::memset(&startup_info, 0, sizeof(STARTUPINFO));
    startup_info.cb = sizeof(STARTUPINFO);
    std::wstring cmd = L"pwsh ";
    cmd += lpCmdLine;
    PROCESS_INFORMATION process_info;
    ::CreateProcessW(
    nullptr,
    cmd.data(),
    nullptr,
    nullptr,
    true,
    CREATE_NO_WINDOW,
    nullptr,
    nullptr,
    &startup_info,
    &process_info
    );
    return 0;
    }

    用计划任务跑 RunPwshNoWin -noni -nop -f "C:\Path\To\Pictures\wallpaper.ps1"
    NoOneNoBody
        6
    NoOneNoBody  
       2023-01-09 20:03:20 +08:00
    软链
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2607 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 06:26 PVG 14:26 LAX 22:26 JFK 01:26
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86