#!/usr/bin/perl

# 在windows获取当前的桌面壁纸
# See also: https://www.winhelponline.com/blog/find-current-wallpaper-file-path-windows-10/ use v5.26;
use strict;
use utf8;
use autodie;
use warnings;
use Encode qw(decode encode);
use experimental 'smartmatch'; # 忽略智能匹配的错误警告
use Getopt::Long qw(GetOptions);
use File::Copy;
use File::Spec::Functions;
use File::Basename;
use Term::ANSIColor;
use Data::Dumper; # my $cmd = $ENV{COMSPEC}; 可能不存在此环境变量
my $reg = $ENV{SYSTEMROOT} . '\System32\reg.exe'; # 通过命令行指定reg.exe的位置
my $cmd = $ENV{SYSTEMROOT} . '\System32\cmd.exe'; # cmd.exe路径
my $open; # 是否打开
my $help; GetOptions(
"reg=s" => \$reg,
"open" => \$open,
"cmd=s" => \$cmd,
"help" => \$help
); if(defined($help)){
print color('green');
say encode("utf-8", "
\$ awinwp [reg] [cmd] [open] [help]
--reg \t指定reg.exe路径\tdefault: %SystemRoot%\\System32\\reg.exe
--cmd \t指定cmd.exe路径\tdefault: %SystemRoot%\\system32\\cmd.exe
--open\t打开WallPaper \tdefault: false
");
exit;
} $reg =~ s/([\\\p{space}])/\\$1/g;
$cmd =~ s/([\\\p{space}])/\\$1/g; # 查看reg.exe是否存在
unless(-e $reg) {
print color('red');
say encode("utf-8", "[reg.exe]路径不存在: $reg");
exit;
} # 查看cmd.exe是否存在
if(defined($open) && !(-e $cmd)) {
print color('red');
say encode("utf-8", "[cmd.exe]路径不存在: $cmd");
exit;
} # 查询注册表的命令
# See also: https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/reg-query
my $query = 'HKEY_CURRENT_USER\Control Panel\Desktop' =~ s/([\\\p{space}])/\\$1/gr;
my @lines = `$reg QUERY $query //v WallPaper`; # 提取出值
for(@lines) {
if(/WallPaper/){
s/WallPaper REG_SZ//;
s/^\s+|\s+$//g;
if($_) {
say $_;
fileparse_set_fstype("MSWin32");
my($filename) = fileparse($_);
my $newPath = catfile("./", $filename);
copy($_, $newPath); # 拷贝到当前目录
system "$cmd /C $filename && explorer ." if(defined($open));
}
}
}

perl 在windows上获取当前桌面壁纸的更多相关文章

  1. 在Linux与Windows上获取当前堆栈信息

    在编写稳定可靠的软件服务时经常用到输出堆栈信息,以便用户/开发者获取准确的运行信息.常用在日志输出,错误报告,异常检测. 在Linux有比较简便的函数获取堆栈信息: #include <stdi ...

  2. 开发者神器!Windows上最强大的虚拟桌面工具-Dexpot

    简介 : 用过Linux和Mac计算机的人都知道 , 这两个系统上都有个多桌面的功能非常使用 . 而在Windows上并没有该项功能 , 虽然目前Win10已经增加了多桌面的程序 , 但使用上仍体验不 ...

  3. 用Powershell启用Windows Azure上的远程桌面服务

    [题外话] 某天不小心点了XX管家的自动修复,虽然及时点了取消也看到了远程桌面服务成功被关闭,但是忙完该干的事以后竟然忘记了这件事,在断开远程桌面服务之前也忘记再次打开.以至于之后几天一直以为Azur ...

  4. C#获取桌面壁纸图片的路径(Desktop Wallpaper)

    原文 C#获取桌面壁纸图片的路径(Desktop Wallpaper) 利用 Windows 的 API 获取桌面壁纸的实际路径,使用的是 SystemParametersInfo 这个API,此AP ...

  5. Windows视频桌面壁纸实现(libvlc)(类似于wall paper engine效果)

    简介 这个项目是很久之前的事情了,当时一个朋友正在研究一个国外的软件(wall paper engine ),可以在桌面壁纸层播放视频,也就差不多是动态壁纸的意思. 后来我也动手来实现这个功能,因为手 ...

  6. 在WINDOWS SERVER 上或远程桌面中使用 MUTEX

    引用: http://www.cnblogs.com/fg0711/archive/2012/05/03/2480502.html 使用Mutex需要注意的两个细节 可能你已经注意到了,例子中在给Mu ...

  7. 写一个Windows上的守护进程(8)获取进程路径

    写一个Windows上的守护进程(8)获取进程路径 要想守护某个进程,就先得知道这个进程在不在.我们假设要守护的进程只会存在一个实例(这也是绝大部分情形). 我是遍历系统上的所有进程,然后判断他们的路 ...

  8. Oracle 11G R2 在windows server 2008 64位安装时提示:无法在windows "开始"菜单或桌面上创建项

    错误代码及解释:  在windows server 2008 64 位操作系统中安装 oracle 11G R2 64位 版本时提示:无法在windows "开始"菜单或桌面上创建 ...

  9. Windows 聚焦的锁屏壁纸设置为桌面壁纸

    需求: Windows的锁屏壁纸偶尔遇到非常喜欢的壁纸,想设置为桌面壁纸. 步骤如下: 1. “Windows 聚焦”的锁屏壁纸都保存在隐藏文件夹 --- Assets里. a. 打开“资源管理器 b ...

随机推荐

  1. 【算法】数位 dp

    时隔多日,我终于再次开始写博客了!! 上午听了数位 dp,感觉没听懂,于是在网上进行一番愉 ♂ 快 ♀ 的学习后,写篇博来加深一下印象~~ 前置的没用的知识 数位 不同计数单位,按照一定顺序排列,它们 ...

  2. easy-ui的datagrid

    <div id="magazineGrid"></div> <script> $('#magazineGrid').datagrid({ hei ...

  3. scala 两个map合并,key相同时value相加/相减都可

    scala 两个map合并,key相同时value相加 1.map自带的合并操作 2.map函数 2.1示例 2.2合并两个map 3.用foldLeft 3.1 语法 3.2 合并两个map 1.m ...

  4. K8s (常用命令)

    查看集群信息: [root@kubernetes-master pods]# kubectl cluster-infoKubernetes master is running at http://lo ...

  5. redis防止重复提交

    public interface DistributedLock { boolean getLock(String var1, String var2, int var3);//加锁 void unL ...

  6. 32.vsftpd服务程序--匿名开放模式

    1.vsftpd服务程序 vsftpd 作为更加安全的文件传输的服务程序,允许用户以三种认证模式登录到FTP 服务器上. 匿名开放模式:是一种最不安全的认证模式,任何人都可以无需密码验证而直接登录到F ...

  7. oss-server 小型对象存储系统

    oss-server 项目介绍 oss-server是针对项目开发时提供的小型对象存储系统,开发者在针对文件上传时业务剥离,同时方便文件迁移,为满足单个项目,多个系统的情况下,提供统一的oss服务 o ...

  8. acid解释

    原子性A:一个事务内部的所有操作都是不可分割的,这叫原子性.一致性C:事务内部的所有操作要么都成功,要么都失败.隔离性I:事务与事务之间永远不相见.持久性D:就是说数据最终是落到磁盘永久保存的.

  9. HDU 6900 Residual Polynomial【分治 NTT】

    HDU 6900 Residual Polynomial  题意: 给出一个多项式\(f_1(x) = \sum_{i=0}^na_ix^i\) 对于任意\(i>=2\),满足\(f_i(x) ...

  10. 基于ST表的RMQ

    RMQ算法,是一个快速求区间最值的离线算法,预处理时间复杂度O(n*log(n))查询O(1),所以是一个很快速的算法,当然这个问题用线段树同样能够解决. 问题:给出n个数ai,让你快速查询某个区间的 ...