在 X Windows 上,我有一个很酷的“静音闹钟”提醒脚本,它会将我的根窗口(背景)颜色更改为纯红色,只持续几秒钟,然后又变回原样。有没有办法在 Windows XP 上做到这一点?
我正在考虑某种使用 cscript 设置注册表项 ( HKEY_CURRENT_USER\Control Panel\Desktop
) 的计划任务。但我的尝试似乎没有任何效果。我必须发出什么信号才能读取这些注册表项并重新绘制桌面?
答案1
这确实可以通过命令行更改背景。只需将其保存为 bat 文件即可。使用 bmp,否则您将不得不刷新。还将壁纸设置为拉伸。如果您取出 wallpaperstyle 线,它将自动居中。
@echo off
reg add "HKCU\control panel\desktop" /v wallpaper /t REG_SZ /d "" /f
reg add "HKCU\control panel\desktop" /v wallpaper /t REG_SZ /d "C:\[LOCATION OF WALLPAPER HERE]" /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 2 /f
RUNDLL32.EXE user32.dll,UpdatePerUserSystemParameters
exit
答案2
我认为,一旦你修改了注册表中的壁纸设置,你只需要运行
RUNDLL32.EXE user32.dll,UpdatePerUserSystemParameters
从命令行执行此操作,更改应生效。您需要确保您的图像是 bmp 文件。
事实上,我刚刚尝试创建一个全红的桌面大小的 bmp 文件。我更改了 //HKCU/control panel/desktop/wallpaper 键以包含此位图的完整路径名。我从命令行运行上述命令,桌面变为我刚刚创建的红色 bmp
答案3
这是一个选项。使用 SharpDevelop 创建一个小型控制台应用程序。将此代码放入 Programs.cs。我将应用程序命名为“CWP”;更改壁纸。它在命令行上只接受一个参数:文件名。在 Windows 7 Ultimate 64 位上使用 .bmp 文件进行测试。
/*
* Created by SharpDevelop.
* Date: 21.9.2012
* Time: 16:13
*/
using System;
using System.Data;
using System.Text;
using System.Runtime.InteropServices;
namespace cwp
{
class Program
{
[DllImport("user32.dll")]
public static extern Int32 SystemParametersInfo(
UInt32 action, UInt32 uParam, String vParam, UInt32 winIni);
public static readonly UInt32 SPI_SETDESKWALLPAPER = 0x14;
public static readonly UInt32 SPIF_UPDATEINIFILE = 0x01;
public static readonly UInt32 SPIF_SENDWININICHANGE = 0x02;
public static void SetWallpaper(String path)
{
Console.WriteLine("Setting wallpaper to '" + path + "'");
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, path,
SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE);
}
public static void Main(string[] args)
{
if (args.Length >= 1)
{
SetWallpaper( args[0] );
}
}
}
}
答案4
这不像花时间写代码那么酷,但是有一个非常有用的系统实用程序叫做背景信息将信息嵌入到桌面背景中。它可以通过各种命令行选项进行配置。不,这不是我写的。