Win11 スポットライトの画像を表示、保存、壁紙に設定するツールで紹介したツールのサンプルコードです。
参考 URL(画像を壁紙に設定):
https://www.autoitscript.com/forum/topic/180461-wallpaperset-with-windows-10/
スポットライトの画像を表示、保存、壁紙に設定するツールのサンプルコード
コードは整理していませんので、ご自由に修正してください。
2023/09/02: 画像が見つからなかった場合に「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
コメント