サンプルコード

Autoit|スポットライトの画像を表示、保存、壁紙に設定するツール

Win11 スポットライトの画像を表示、保存、壁紙に設定するツールで紹介したツールのサンプルコードです。

参考 URL(画像を壁紙に設定):

https://www.autoitscript.com/forum/topic/180461-wallpaperset-with-windows-10/

スポットライトの画像を表示、保存、壁紙に設定するツールのサンプルコード

コードは整理していませんので、ご自由に修正してください。

2023/09/02: 画像が見つからなかった場合に「Autoit Error」が出る問題のみ修正しました。

Autoit Error
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Outfile_x64=スポットライトの画像を表、保存、壁紙に.exe
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <File.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <GDIPlus.au3>

;===============================================================================
Global Const $sCLSID_ActiveDesktop = "{75048700-EF1F-11D0-9888-006097DEACF9}"
Global Const $sIID_IActiveDesktop = "{F490EB00-1240-11D1-9888-006097DEACF9}"
Global Const $tagIActiveDesktop = _
        "ApplyChanges hresult(dword);" & _
        "GetWallpaper hresult(wstr;uint;dword);" & _
        "SetWallpaper hresult(wstr;dword);" & _
        "GetWallpaperOptions hresult(struct*;dword);" & _
        "SetWallpaperOptions hresult(struct*;dword);" & _
        "GetPattern hresult(wstr;uint;dword);" & _
        "SetPattern hresult(wstr;dword);" & _
        "GetDesktopItemOptions hresult(struct*;dword);" & _
        "SetDesktopItemOptions hresult(struct*;dword);" & _
        "AddDesktopItem hresult(struct*;dword);" & _
        "AddDesktopItemWithUI hresult(hwnd;struct*;dword);" & _
        "ModifyDesktopItem hresult(struct*;dword);" & _
        "RemoveDesktopItem hresult(struct*;dword);" & _
        "GetDesktopItemCount hresult(int*;dword);" & _
        "GetDesktopItem hresult(int;struct*;dword);" & _
        "GetDesktopItemByID hresult(ulong_ptr;struct*;dword);" & _"GenerateDesktopItemHtml hresult(wstr;struct*;dword);" & _
        "AddUrl hresult(hwnd;wstr;struct*;dword);" & _
        "GetDesktopItemBySource hresult(wstr;struct*;dword);"
Global Const $AD_APPLY_ALL = 0x00000007
;===============================================================================

$Assets = @UserProfileDir & "\AppData\Local\Packages\Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy\LocalState\Assets\"

$list = _FileListToArray($Assets)
If @error Then
    MsgBox(262144 + 16, "", "画像ファイルが見つかりませんでした。プログラムを終了します。")
    Exit
EndIf
DirCreate(@TempDir & "\Wallpaper")

For $i = 1 To $list[0]
    FileCopy($Assets & $list[$i], @TempDir & "\Wallpaper\" & $i & ".jpg", 1)
Next

Global $Num = 1

$Form1 = GUICreate("Form1", 617, 437, -1, -1)
GUISetFont(9, 400, 0, "MS Pゴシック")
$Label = GUICtrlCreateLabel(GetImageSize(@TempDir & "\Wallpaper\" & $Num & ".jpg") & " | 場所:" & @TempDir & "\Wallpaper\" & $Num & ".jpg", 24, 5, 500, 15)
$Pic1 = GUICtrlCreatePic(@TempDir & "\Wallpaper\" & $Num & ".jpg", 24, 24, 569, 361)
$Button1 = GUICtrlCreateButton("←", 24, 400, 200, 25)
GUICtrlSetFont(-1, 9, 800, 0, "MS Pゴシック")
GUICtrlSetState(-1, $GUI_DISABLE)
$Button2 = GUICtrlCreateButton("→", 230, 400, 200, 25)
GUICtrlSetFont(-1, 9, 800, 0, "MS Pゴシック")
$Button3 = GUICtrlCreateButton("壁紙に設定", 440, 400, 90, 25)
$Button4 = GUICtrlCreateButton("保存", 540, 400, 55, 25)

GUISetState(@SW_SHOW)

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Button1
            If $Num = $list[0] Then GUICtrlSetState($Button2, $GUI_ENABLE)
            If $Num >= 2 Then
                $Num -= 1
                GUICtrlSetImage($Pic1, @TempDir & "\Wallpaper\" & $Num & ".jpg")
                GUICtrlSetData($Label, GetImageSize(@TempDir & "\Wallpaper\" & $Num & ".jpg") & " | 場所:" & @TempDir & "\Wallpaper\" & $Num & ".jpg")
            EndIf
            If $Num = 1 Then
                GUICtrlSetState($Button1, $GUI_DISABLE)
            Else
                GUICtrlSetState($Button1, $GUI_ENABLE)
            EndIf
        Case $Button2
            If $Num = 1 Then GUICtrlSetState($Button1, $GUI_ENABLE)
            If $Num <= ($list[0] - 1) Then
                $Num += 1
                GUICtrlSetImage($Pic1, @TempDir & "\Wallpaper\" & $Num & ".jpg")
                GUICtrlSetData($Label, GetImageSize(@TempDir & "\Wallpaper\" & $Num & ".jpg") & " | 場所:" & @TempDir & "\Wallpaper\" & $Num & ".jpg")
            EndIf
            If $Num = $list[0] Then
                GUICtrlSetState($Button2, $GUI_DISABLE)
            Else
                GUICtrlSetState($Button2, $GUI_ENABLE)
            EndIf
        Case $Button3
            New_Wallpaper(@TempDir & "\Wallpaper\" & $Num & ".jpg")
        Case $Button4
            $CopyFile = FileSelectFolder($Num & ".jpg の保存", @DesktopDir, 1, "", $Form1)
            If Not FileExists($CopyFile & "\" & $Num & ".jpg") Then
                If FileCopy(@TempDir & "\Wallpaper\" & $Num & ".jpg", $CopyFile & "\" & $Num & ".jpg") Then
                    MsgBox(0, "画像の保存", $CopyFile & " に " & $Num & ".jpg を保存しました。", 0, $Form1)
                EndIf
            Else
                $flag = MsgBox(52, "画像の保存", "ファイルが既に存在します。上書きしますか?", 0, $Form1)
                If $flag = 6 Then
                    If FileCopy(@TempDir & "\Wallpaper\" & $Num & ".jpg", $CopyFile & "\" & $Num & ".jpg", 1) Then
                        MsgBox(0, "画像の保存", $CopyFile & " に " & $Num & ".jpg を上書き保存しました。", 0, $Form1)
                    EndIf
                EndIf
            EndIf
    EndSwitch
WEnd

Func New_Wallpaper($Wallpaper)
    $oActiveDesktop = ObjCreateInterface($sCLSID_ActiveDesktop, $sIID_IActiveDesktop, $tagIActiveDesktop)

    If $Wallpaper Then
        $oActiveDesktop.SetWallpaper($Wallpaper, 0)
        $oActiveDesktop.ApplyChanges($AD_APPLY_ALL)
    EndIf
EndFunc   ;==>New_Wallpaper

Func GetImageSize($image)
    _GDIPlus_Startup()

    Local $hImage = _GDIPlus_ImageLoadFromFile($image)
    If @error Then
        MsgBox(16, "Error", "Does the file exist?")
        Exit 1
    EndIf

    Local $Width_Height = "サイズ:" & _GDIPlus_ImageGetWidth($hImage) & "×" & _GDIPlus_ImageGetHeight($hImage)

    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_Shutdown()

    Return $Width_Height
EndFunc   ;==>GetImageSize

コメント