web-dev-qa-db-ja.com

Windowsでデスクトップの背景をスクリプトから設定するにはどうすればよいですか?

X Windowsで、ルートウィンドウ(背景)の色を真っ赤に変えるクールな「サイレントアラーム」リマインダースクリプトがありましたが、それを元に戻す前の数秒間だけ戻しました。Windowsでこれを行う方法はありますか? XP?

レジストリキーを設定するためにcscriptを使用するある種のスケジュールされたタスクを考えています(HKEY_CURRENT_USER\Control Panel\Desktop)。しかし、私の試みは何の効果もないようです。これらのレジストリエントリを読み取ってデスクトップを再描画するには、何を通知する必要がありますか?

14
David Leonard

これは、コマンドラインを介して背景を変更します。これを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
8
Tim

レジストリの壁紙設定を変更したら、実行する必要があるだけだと思います

RUNDLL32.EXE user32.dll,UpdatePerUserSystemParameters 

コマンドラインから、変更が有効になります。画像がbmpファイルであることを確認する必要があります。

実際、私はすべて赤であるデスクトップサイズのbmpファイルを作成してこれを試しました。 // HKCU/control panel/desktop/wallpaperキーを変更して、このビットマップへの完全パス名を含めました。上記のコマンドをコマンドラインから実行すると、デスクトップが先ほど作成した赤いbmpに変わりました

6
Mark

ここに1つのオプションがあります。 SharpDevelopで小さなコンソールアプリを作成します。このコードをPrograms.csに入れます。アプリを「CWP」と呼びます。壁紙を変更します。コマンドラインでは、ファイル名という1つのパラメーターのみを取ります。 .bmp -fileを使用してWindows 7 Ultimate 64ビットでテストされています。

    /*
     * 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
Polarlightning

これは実際にコードの作成に時間を費やすほどクールではありませんが、デスクトップの背景に情報を埋め込む bginfo と呼ばれる非常に便利なシステムユーティリティがあります。あらゆる種類のコマンドラインオプションを使用してかなり設定可能です。いいえ、書きませんでした。

1
david dickey

特に画像がbmp形式でない場合、レジストリメソッドが常に機能するわけではないため、私の方法を試すことができます。 Windowsフォトビューアーを使用して目的の画像を開き、キーボードショートカットを使用して画像をデスクトップの壁紙として設定するだけです。

Dim wShell
set wShell = createobject("Wscript.Shell")
wShell.Run "cmd /c start " & Your photo path here,0,True

do
     wscript.sleep 100
loop until wShell.appactivate("Windows Photo Viewer") = true

wShell.Sendkeys  ("+{F10}")
WScript.Sleep 100
wShell.Sendkeys  "k"
wShell.Exec "taskkill /im dllhost.exe"

これはvbsスクリプトですが、cmdを使用して同じ方法を使用できます

0
TahaEltahawy

Windows 7の場合、制限された領域でも動作します!! ;)画像の場所のパスを

C:\ Users\1509967\Desktop\hi.jpg

reg add "HKEY_CURRENT_USER\control panel\desktop" /v wallpaper /t REG_SZ /d "" /f
reg add "HKEY_CURRENT_USER\control panel\desktop" /v wallpaper /t REG_SZ /d C:\Users\1509967\Desktop\hi.jpg /f
reg add "HKEY_CURRENT_USER\control panel\desktop" /v WallpaperStyle /t REG_SZ /d 2 /f
RUNDLL32.EXE user32.dll,UpdatePerUserSystemParameters
pause
exit

RegeditとUpdatePerUserSystemParametersを使用して壁紙を確実に変更できなかったとしても(大きなループであっても)、結局powershellを使用することになり、毎回機能します。

参照 https://www.joseespitia.com/2017/09/15/set-wallpaper-powershell-function/

Set-Wallpaper.ps1

# use powershell.exe Set-Wallpaper.ps1 -Image "<path to image>"

param ([string]$Image="")

Function Set-WallPaper($Image) {
<#
.SYNOPSIS
Applies a specified wallpaper to the current user's desktop

.PARAMETER Image
Provide the exact path to the image

.EXAMPLE
Set-WallPaper -Image "C:\Wallpaper\Default.jpg"

#>

Add-Type -TypeDefinition @" 
using System; 
using System.Runtime.InteropServices;

public class Params
{ 
    [DllImport("User32.dll",CharSet=CharSet.Unicode)] 
    public static extern int SystemParametersInfo (Int32 uAction, 
                                                   Int32 uParam, 
                                                   String lpvParam, 
                                                   Int32 fuWinIni);
}
"@ 

$SPI_SETDESKWALLPAPER = 0x0014
$UpdateIniFile = 0x01
$SendChangeEvent = 0x02

$fWinIni = $UpdateIniFile -bor $SendChangeEvent

$ret = [Params]::SystemParametersInfo($SPI_SETDESKWALLPAPER, 0, $Image, $fWinIni)
}

Set-WallPaper -Image $Image
0
Joric