.
675 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # AutoWall
2 |
3 |
4 |
5 |
6 |
7 |
8 | ## About
9 |
10 | Turn videos, gifs and webs into windows live wallpapers. The most simple and useful [Weebp](src/weebp) implementation in autoit.
11 |
12 | > [!WARNING]
13 | > This software has only been tested on Windows 10 and may not be fully compatible with other versions of Windows. Some features may not be available. For Windows 7 users, please follow the guide at https://github.com/Francesco149/weebp#windows-7-prerequisite
14 |
15 | ## Features
16 | - Portable.
17 | - Browse your gif or video files.
18 | - Reset button to reverse all and delete config files.
19 | - Set your wallpaper on windows startup.
20 |
21 | (1.2+)
22 |
23 | - [Set web as wallpaper.](#web-wallpaper)
24 |
25 | (1.3+)
26 |
27 | - ~~[Direct download from steam workshop.](https://github.com/SegoCode/swd)~~
28 |
29 | (1.8+)
30 |
31 | - AutoWall will stop automatically when you play games.
32 | - [Configure live wallpaper performance.](#configure-performance)
33 |
34 | (1.9+)
35 |
36 | - AutoWall videos will stop when wallpaper is not visible (even if not playing any games).
37 |
38 | (1.10+)
39 |
40 | - [Support for multiple screens (Alpha, only in W10)](#multiple-screens)
41 |
42 | (1.12+)
43 |
44 | - Send mouse movement to the wallpaper
45 | - [Create wallpaper playlist](https://github.com/SegoCode/AutoWall/blob/master/src/VideosHere/playlist.edl)
46 | - [Configure autowall settings](#Config-autowall)
47 |
48 |
49 | ## Web wallpaper
50 | Set any web to wallpaper, copy url and paste on text field, also Youtube videos.
51 |
52 | - Set Youtube video as a wallpaper using this url format;
53 |
54 | *https://www.youtube.com/embed/(VIDEO_ID)?autoplay=1&loop=1&mute=1&playlist=(VIDEO_ID)*
55 |
56 | *For add sound change the mute value (&mute=1) to zero (&mute=0)*
57 |
58 | - Set [shadertoy](https://www.shadertoy.com) as a wallpaper using this url format;
59 |
60 | *https://www.shadertoy.com/embed/(ID)?gui=false&t=10&paused=false&muted=true*
61 |
62 | *For add sound change the mute value (&mute=true) to true (&mute=false)*
63 |
64 |
65 | ## Configure performance
66 |
67 | AutoWall works with [mpv](src/mpv), the configuration is available in "/mpv/" folder with the name "mpv.conf" editing with notedpad you can, for example, play the music of your live wallpaper changing the value "volume" to "100".
68 |
69 | Follow the [official mpv documentation](https://mpv.io/manual/stable/#configuration-files) to configure all performance parameters.
70 |
71 | ## Multiple screens
72 |
73 | Autowall is sigle screen focused but Autowall 1.10+ now includes the highly anticipated multiscreen mode, which is currently in early beta and may have some bugs or issues. If you have multiple screens, Autowall will automatically detect this and offer you the option to run in multiscreen mode. Please note that this feature is a work in progress and may not support all single screen mode features, such as "Stop when Wallpaper is not visible" or "Web wallpaper." If you encounter any issues or have suggestions for improvement, please open an issue.
74 |
75 |
76 | ## Config autowall
77 |
78 | Autowall uses a [configuration file](https://github.com/SegoCode/AutoWall/blob/master/src/config.ini) that can be easily modified to customise how the application behaves, allowing you to set the following values:
79 |
80 | `redResetButton`
81 | - When set to false, the "reset" button retains its default color. If set to true, it changes the color of the "reset" button to a cool red.
82 |
83 | `autoPauseFeature`
84 | - When set to true, the auto-pause feature is enabled, causing videos to stop when the wallpaper is not visible. If set to false, this feature is disabled, allowing videos to continue playing regardless of wallpaper visibility.
85 |
86 | `mouseToWallpaper`
87 | - When set to true, mouse input is allowed to interact with the wallpaper, enabling features like having the wallpaper follow the cursor or change its perspective. If set to false, mouse input does not affect the wallpaper.
88 |
89 | `allFilesAllowed`
90 | - When set to false, the application restricts the file types that can be chosen for selecting a wallpaper file. If set to true, all file types are allowed in the popup for choosing a wallpaper file.
91 |
92 | `askMultiScreen`
93 | - When set to false, the popup for multi-screen configuration is disabled. If set to true, the application considers multiple screens if detected and may prompt for multi-screen configuration.
94 |
95 | `multiScreenDefault`
96 | - When set to false, the multi-screen configuration is disabled by default. If set to true, force the application to run in multi-screen mode.
97 |
98 | `forceWebview`
99 | - When set to false, Autowall uses WebView for rendering only when necessary. If set to true, Autowall is forced to always use WebView for rendering.
100 |
101 | `autoYoutubeParse`
102 | - When set to false, Autowall does not automatically parse the YouTube URL in fullscreen mode. If set to true, it will be parsed.
103 |
104 | `forceMouseToWallpaper`
105 | - When set to true, the mouse always be sent to the wallpaper when the webview was running. If set to false, only with youtube links, it will not launched.
106 |
107 | `forceAutorefresh`
108 | - If set to true, it will use an internal method to reset the wallpaper. Enabled if you are experiencing wallpaper display errors.
109 |
110 | ## Lives wallpapers for AutoWall
111 |
112 | List of sites to find and download the perfect live wallpaper for use in AutoWall;
113 |
114 | https://mylivewallpapers.com/
115 |
116 | https://wallpaperwaifu.com/
117 |
118 | https://moewalls.com/
119 |
120 | http://openings.moe/
121 |
122 | https://www.shadertoy.com/
123 |
124 | https://livewallpapers4free.com/
125 |
126 | https://gfycat.com/gifs/search/live+wallpaper/
127 |
128 | https://steamcommunity.com/workshop/browse/?appid=431960
129 |
130 | https://www.deviantart.com/rainwallpaper/gallery/
131 |
132 | https://backgrounds.gallery/animated
133 |
134 |
135 |
136 | ## Direct download
137 |
138 | [https://github.com/SegoCode/AutoWall/releases/](https://github.com/SegoCode/AutoWall/releases/download/1.11/AutoWall.zip)
139 |
140 | ## Articles about AutoWall
141 |
142 | [https://www.ghacks.net/2020/10/19/autowall-is-an-open-source . . . ](https://www.ghacks.net/2020/10/19/autowall-is-an-open-source-program-that-can-display-animated-gifs-and-videos-as-your-wallpaper/)
143 |
144 | [https://www.genbeta.com/deskmod/esta-aplicacion-gratuita . . . ](https://www.genbeta.com/deskmod/esta-aplicacion-gratuita-puedes-poner-gif-video-como-fondo-pantalla-windows-10)
145 |
146 | ##
147 |
148 |
149 |
150 |
151 |
--------------------------------------------------------------------------------
/media/AutoWall-icon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SegoCode/AutoWall/7166ba5e7b679c17c3b1c8ae28282d7017457ec7/media/AutoWall-icon.ico
--------------------------------------------------------------------------------
/media/AutoWall-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SegoCode/AutoWall/7166ba5e7b679c17c3b1c8ae28282d7017457ec7/media/AutoWall-icon.png
--------------------------------------------------------------------------------
/media/demo.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SegoCode/AutoWall/7166ba5e7b679c17c3b1c8ae28282d7017457ec7/media/demo.gif
--------------------------------------------------------------------------------
/src/AutoWall.au3:
--------------------------------------------------------------------------------
1 | #cs ----------------------------------------------------------------------------
2 |
3 | AutoIt Version: 3.3.14.5
4 | Author: SegoCode
5 |
6 | Script Function:
7 | Set live wallpapers on your Windows desktop usig mpv and weebp.
8 |
9 | #ce ----------------------------------------------------------------------------
10 |
11 | #include
12 | #include
13 | #include
14 | #include
15 | #include
16 | #include
17 | #include
18 | #include
19 | #include
20 | #include
21 | #include
22 | #include
23 |
24 | ; -------------------------
25 | ; KODA GUI FORM
26 | ; -------------------------
27 | #Region ### START Koda GUI section ### Form=
28 | $form = GUICreate("github.com/SegoCode", 513, 72, 183, 124, -1, $WS_EX_ACCEPTFILES)
29 | GUISetOnEvent($GUI_EVENT_DROPPED, -1)
30 | $applyb = GUICtrlCreateButton("Apply", 432, 8, 75, 25)
31 | $resetb = GUICtrlCreateButton("Reset", 432, 40, 75, 25)
32 | If ReadIniKey("redResetButton") Then GUICtrlSetBkColor($resetb, 0xff7b7b)
33 | $browseb = GUICtrlCreateButton("Browse", 352, 40, 75, 25)
34 | $inputPath = GUICtrlCreateInput("", 8, 8, 417, 25)
35 | $comboScreens = GUICtrlCreateCombo("", 225, 41, 120, 0, $CBS_DROPDOWNLIST)
36 | GUICtrlSetState(-1, $GUI_DROPACCEPTED)
37 | $winStart = GUICtrlCreateCheckbox("Set on windows startup", 8, 40, 137, 25)
38 | Opt("TrayMenuMode", 1)
39 | Opt("TrayOnEventMode", 1)
40 | #EndRegion ### END Koda GUI section ###
41 |
42 |
43 | ; -------------------------
44 | ; AUTORUN LAUCH
45 | ; -------------------------
46 | $autoRunState=False
47 | If $CmdLine[0] > 0 Then
48 | $autoRunState=True
49 | If $CmdLine[0] > 1 Then
50 | sleep(2000) ;Time to power others screens
51 | GUICtrlSetData($inputPath, $CmdLine[1])
52 | setwallpaperMultiScreen($CmdLine[2])
53 | Else
54 | GUICtrlSetData($inputPath, $CmdLine[1])
55 | setwallpaper()
56 | If ReadIniKey("autoPauseFeature") Then Run(@WorkingDir & "\tools\autoPause.exe", "", @SW_HIDE)
57 | EndIf
58 | Exit
59 | EndIf
60 |
61 | ;Detect multiple screen
62 | $multiScreen = ReadIniKey("multiScreenDefault")
63 | If int(_WinAPI_GetSystemMetrics($SM_CMONITORS)) > 1 And ReadIniKey("askMultiScreen") Then
64 | $aBox = MsgBox(4, "Multi-screen detected", "Do you want run AutoWall in multi-screen mode?")
65 | If $aBox = 6 Then
66 | $multiScreen = True
67 | ElseIf $aBox = 7 Then
68 | $multiScreen = False
69 | EndIf
70 | EndIf
71 |
72 | ; -------------------------
73 | ; INIT GUI
74 | ; -------------------------
75 | GUISetState(@SW_SHOW)
76 | GUICtrlSendMsg($inputPath, $EM_SETCUEBANNER, False, "Browse and select video")
77 | GUICtrlSetState($winStart, $GUI_DISABLE)
78 |
79 | If $multiScreen Then ;Init gui multiScreen
80 | GUICtrlSetState($applyb, $GUI_DISABLE)
81 | GUICtrlSetState($browseb, $GUI_DISABLE)
82 | _GUICtrlComboBox_SetItemHeight($comboScreens, 17)
83 | For $i = 0 To int(_WinAPI_GetSystemMetrics($SM_CMONITORS)) -1
84 | GUICtrlSetData($comboScreens, "Apply on screen " & $i+1)
85 | Next
86 | Else
87 | GUICtrlSetState($comboScreens, $GUI_HIDE)
88 | EndIf
89 |
90 | ;Check updates
91 | Run(@WorkingDir & "\tools\updater.exe", "", @SW_HIDE)
92 |
93 | ; -------------------------
94 | ; GUI LOOP
95 | ; -------------------------
96 | While 1
97 | $nMsg = GUIGetMsg()
98 | Switch $nMsg
99 | Case $GUI_EVENT_CLOSE
100 | Exit
101 | Case $applyb
102 | If $multiScreen Then
103 | setwallpaperMultiScreen()
104 | Else
105 | GUICtrlSetState($applyb, $GUI_DISABLE)
106 | setwallpaper()
107 | GUICtrlSetState($applyb, $GUI_ENABLE)
108 | GUICtrlSetState($winStart, $GUI_ENABLE)
109 | EndIf
110 | Case $browseb
111 | browsefiles()
112 | case $comboScreens
113 | GUICtrlSetState($applyb, $GUI_ENABLE)
114 | GUICtrlSetState($browseb, $GUI_ENABLE)
115 | GUICtrlSetState($winStart, $GUI_UNCHECKED)
116 | GUICtrlSetState($winStart, $GUI_DISABLE)
117 | GUICtrlSetData($inputPath, "")
118 | Case $winStart
119 | onWinStart()
120 | Case $resetb
121 | reset()
122 | GUICtrlSetState($winStart, $GUI_DISABLE)
123 | EndSwitch
124 | WEnd
125 |
126 | ; -------------------------
127 | ; FUNCTIONS
128 | ; -------------------------
129 |
130 | Func onWinStart()
131 | If GUICtrlRead($winStart) = $GUI_CHECKED Then
132 | $FileName = @WorkingDir & "\AutoWall.exe"
133 | $args = GUICtrlRead($inputPath)
134 |
135 | If $multiScreen Then
136 | $LinkFileName = @AppDataDir & "\Microsoft\Windows\Start Menu\Programs\Startup\" & "\AutoWall"& (_GUICtrlComboBox_GetCurSel($comboScreens)+1)&".lnk"
137 | $WorkingDirectory = @WorkingDir
138 | FileCreateShortcut($FileName, $LinkFileName, $WorkingDirectory, '"' & $args & '" '& (_GUICtrlComboBox_GetCurSel($comboScreens)+1), "", "", "", "", @SW_SHOWNORMAL)
139 | Else
140 | $LinkFileName = @AppDataDir & "\Microsoft\Windows\Start Menu\Programs\Startup\" & "\AutoWall.lnk"
141 | $WorkingDirectory = @WorkingDir
142 | FileCreateShortcut($FileName, $LinkFileName, $WorkingDirectory, '"' & $args & '"', "", "", "", "", @SW_SHOWNORMAL)
143 | EndIf
144 | Else
145 | FileDelete(@AppDataDir & "\Microsoft\Windows\Start Menu\Programs\Startup\AutoWall.lnk")
146 |
147 | If $multiScreen Then
148 | FileDelete(@AppDataDir & "\Microsoft\Windows\Start Menu\Programs\Startup\AutoWall"&(_GUICtrlComboBox_GetCurSel($comboScreens)+1)&".lnk")
149 | EndIf
150 |
151 | EndIf
152 | EndFunc ;==>onWinStart
153 |
154 | Func setwallpaperMultiScreen($screenNumber = 0)
155 | $oldWork = @WorkingDir
156 | $weebp = @WorkingDir & "\weebp\wp.exe "
157 | $webview = @WorkingDir & "\tools\webview.exe"
158 |
159 | If Not $autoRunState Then
160 | $screenNumber = _GUICtrlComboBox_GetCurSel($comboScreens)+1
161 | EndIf
162 |
163 | FileChangeDir(@WorkingDir & "\mpv\")
164 |
165 | $inputUdf = GUICtrlRead($inputPath)
166 | If _WinAPI_UrlIs($inputUdf) == 0 Then
167 | ;This is a temporary solution, usefull to initialize the screens, the first video does not have loop which dying in the end
168 |
169 | ;Init screen, fake video spawn dying in the end
170 | RunWait($weebp & "run mpv " & '"' & GUICtrlRead($inputPath) & '"' & " --screen="& $screenNumber &" --input-ipc-server=\\.\pipe\mpvsocket", "", @SW_HIDE)
171 | sleep(500)
172 | Run($weebp & "add --wait --fullscreen --class mpv", "", @SW_HIDE)
173 |
174 | ;Final video spawn
175 | RunWait($weebp & "run mpv " & '"' & GUICtrlRead($inputPath) & '"' & " --screen="& $screenNumber &" --input-ipc-server=\\.\pipe\mpvsocket", "", @SW_HIDE)
176 | sleep(500)
177 | Run($weebp & "add --wait --fullscreen --class mpv", "", @SW_HIDE)
178 | Else
179 | MsgBox(0, "AutoWall Multi-screen mode", "Web wallpaper is not supported in multi-screen mode")
180 | GUICtrlSetData($inputPath, "")
181 | EndIf
182 | FileChangeDir($oldWork)
183 | EndFunc ;==>setwallpaperMultiScreen
184 |
185 | Func setwallpaper()
186 | $oldWork = @WorkingDir
187 | $weebp = @WorkingDir & "\weebp\wp.exe "
188 | $webview = @WorkingDir & "\tools\webView.exe"
189 | $mouseWallpaper = ReadIniKey("mouseToWallpaper")
190 | $forceMouseWallpaper = ReadIniKey("forceMouseToWallpaper")
191 |
192 | $inputUdf = GUICtrlRead($inputPath)
193 | If _WinAPI_UrlIs($inputUdf) == 0 And Not StringRegExp($inputUdf, "\.html?$", 0) And Not ReadIniKey("forceWebview") Then
194 | killAll()
195 | FileChangeDir(@WorkingDir & "\mpv\")
196 | Run($weebp & "run mpv " & '"' & GUICtrlRead($inputPath) & '"' & " --input-ipc-server=\\.\pipe\mpvsocket", "", @SW_HIDE)
197 | Run($weebp & "add --wait --fullscreen --class mpv", "", @SW_HIDE)
198 | Else
199 | If StringInStr(GUICtrlRead($inputPath), "steamcommunity.com") Then
200 | $idSteam = StringSplit(GUICtrlRead($inputPath), "?id=", 1)
201 | GUICtrlSetState($winStart, $GUI_UNCHECKED)
202 | GUICtrlSetState($winStart, $GUI_DISABLE)
203 | GUICtrlSetData($inputPath, "")
204 | MsgBox($MB_TOPMOST, "Download from workshop", "Sorry, AutoWall no longer support steamworkshop downloads.")
205 | Else
206 | killAll()
207 | Local $url = ConvertYouTubeURL(GUICtrlRead($inputPath))
208 | Run($weebp & "run " & '"' & $webview & '"' & ' "" "' & $url & '"', "", @SW_HIDE)
209 | RunWait($weebp & "add --wait --fullscreen --name litewebview", "", @SW_HIDE)
210 |
211 | Local $sLiteWebviewId = GetViewId($oldWork)
212 | If $mouseWallpaper And Not StringInStr($url, "youtube") Then
213 | Run($oldWork & "\tools\mousesender.exe" & " 0x" & $sLiteWebviewId, "", @SW_HIDE)
214 | Else
215 | If $forceMouseWallpaper Then Run($oldWork & "\tools\mousesender.exe" & " 0x" & $sLiteWebviewId, "", @SW_HIDE)
216 | EndIf
217 | EndIf
218 | EndIf
219 | FileChangeDir($oldWork)
220 | If @OSVersion = "WIN_11" Or ReadIniKey("forceAutorefresh") Then
221 | Sleep(2000)
222 | Run(@WorkingDir & "\tools\refresh.exe" & " 0x" & GetViewId($oldWork), "", @SW_HIDE)
223 | Else
224 | If ReadIniKey("autoPauseFeature") Then Run(@WorkingDir & "\tools\autoPause.exe", "", @SW_HIDE)
225 | EndIf
226 | EndFunc ;==>setwallpaper
227 |
228 |
229 | Func browsefiles()
230 | Local Const $sMessage = "Select the video for wallpaper"
231 | If ReadIniKey("allFilesAllowed") Then
232 | Local $sFileOpenDialog = FileOpenDialog($sMessage, @WorkingDir & "\VideosHere" & "\", "All Files (*.*)", BitOR($FD_FILEMUSTEXIST, $FD_PATHMUSTEXIST))
233 | Else
234 | Local $sFileOpenDialog = FileOpenDialog($sMessage, @WorkingDir & "\VideosHere" & "\", "Videos (*.avi;*.mp4;*.gif;*.mkv;*.webm;*.mts;*.wmv;*.flv;*.mov;*.html;*.mpeg;*.mpg;*.m4v;*.3gp;*.vob;*.ts;*.m2ts;*.divx;*.rm;*.rmvb;*.ogv;*.edl)", BitOR($FD_FILEMUSTEXIST, $FD_PATHMUSTEXIST))
235 | EndIf
236 |
237 | If @error Then
238 | FileChangeDir(@ScriptDir)
239 | Else
240 | FileChangeDir(@ScriptDir)
241 | $sFileOpenDialog = StringReplace($sFileOpenDialog, "|", @CRLF)
242 | GUICtrlSetData($inputPath, $sFileOpenDialog)
243 | GUICtrlSetState($winStart, $GUI_ENABLE)
244 | GUICtrlSetState($winStart, $GUI_UNCHECKED)
245 | EndIf
246 |
247 | EndFunc ;==>browsefiles
248 |
249 | Func reset()
250 | killAll()
251 | FileDelete(@AppDataDir & "\Microsoft\Windows\Start Menu\Programs\Startup\AutoWall.lnk")
252 | FileDelete(@AppDataDir & "\Microsoft\Windows\Start Menu\Programs\Startup\AutoWall*.lnk")
253 |
254 | GUICtrlSetState($applyb, $GUI_ENABLE)
255 | GUICtrlSetState($winStart, $GUI_UNCHECKED)
256 | GUICtrlSetData($inputPath, "")
257 | EndFunc ;==>reset
258 |
259 |
260 | Func killAll()
261 | Local $aProcesses = ['mpv.exe', 'wp.exe', 'litewebview.exe', 'Win32WebViewHost.exe', 'autopause.exe', 'mousesender.exe']
262 |
263 | For $sProcess In $aProcesses
264 | Do
265 | ProcessClose($sProcess)
266 | Until Not ProcessExists($sProcess)
267 | Next
268 |
269 | ; Refresh
270 | Run(@WorkingDir & "\weebp\wp.exe ls", "", @SW_HIDE)
271 | EndFunc ;==>killAll
272 |
273 | Func ReadIniKey($sKey)
274 | ; Set the file path to the INI file in the working directory
275 | $sFilePath = @WorkingDir & "\config.ini"
276 | If Not FileExists($sFilePath) Then Return False
277 |
278 | ; Attempt to read the value of the key
279 | $sValue = IniRead($sFilePath, "Configurations", $sKey, "NotFound")
280 |
281 | If $sValue == "true" Then
282 | Return True
283 | Else
284 | Return False
285 | EndIf
286 | EndFunc ;==>ReadIniKey
287 |
288 |
289 | Func GetViewId($oldWork)
290 | ; Define the command to list
291 | Local $sCommand = '"' & $oldWork & "\weebp\wp.exe" & '"' & " ls"
292 | Local $iPID = Run(@ComSpec & " /c " & $sCommand, "", @SW_HIDE, $STDOUT_CHILD)
293 |
294 | ; Initialize variables to read the output
295 | Local $sOutput = ""
296 | Local $sRead
297 | While 1
298 | $sRead = StdoutRead($iPID)
299 | If @error Then ExitLoop
300 | $sOutput &= $sRead
301 | WEnd
302 |
303 | ; Try to find a line containing "mpv"
304 | Local $sMatch = StringRegExp($sOutput, ".*\[(\w+)\].*mpv.*", 1)
305 |
306 | ; If "mpv" is not found, look for "litewebview"
307 | If @extended = 0 Then
308 | $sMatch = StringRegExp($sOutput, ".*\[(\w+)\].*litewebview.*", 1)
309 | EndIf
310 |
311 | ; Check if a valid ID was found
312 | If IsArray($sMatch) And UBound($sMatch) > 0 Then
313 | Return $sMatch[0]
314 | EndIf
315 |
316 | ; If no ID is found, return an error
317 | Return SetError(1, 0, "0")
318 | EndFunc ;==>GetViewId
319 |
320 |
321 | Func ConvertYouTubeURL($sURL)
322 | ; Regular expression pattern for YouTube URL
323 | Local $sPattern = "https?://(?:www\.)?youtube\.com/watch\?v=([a-zA-Z0-9_-]+)"
324 |
325 | ; Check if the URL matches the pattern and extract the video ID
326 | Local $aResult = StringRegExp($sURL, $sPattern, 1)
327 | If @error Or Not ReadIniKey("autoYoutubeParse") Then Return $sURL ; Return original string if not a valid YouTube URL
328 |
329 | ; Construct the new URL with the video ID
330 | Local $sVideoID = $aResult[0]
331 | Local $sNewURL = "https://www.youtube.com/embed/" & $sVideoID & "?autoplay=1&loop=1&mute=1&playlist=" & $sVideoID
332 |
333 | Return $sNewURL
334 | EndFunc ;==>ConvertYouTubeURL
335 |
--------------------------------------------------------------------------------
/src/VideosHere/README.txt:
--------------------------------------------------------------------------------
1 | The videos will open in this folder by default. To set a video as wallpaper, drag it into this folder. You can also insert absolute file paths into the text area to try new video formats. Please note that setting videos to play on Windows startup may not work for all formats. Please check the mpv configuration.
--------------------------------------------------------------------------------
/src/VideosHere/demo.html:
--------------------------------------------------------------------------------
1 |
10 |
11 |
12 |
13 |
14 |
15 |
16 | Document
17 |
56 |
57 |
58 |
67 |
85 |
86 |
--------------------------------------------------------------------------------
/src/VideosHere/playlist.edl:
--------------------------------------------------------------------------------
1 | # mpv EDL v0
2 | # This is an MPV-compatible EDL file.
3 | # Each line represents a media file to be played, with optional start and end times.
4 | # The format for each line is: file_path,start_time,end_time
5 | # - file_path: The path to the media file.
6 | # - start_time: The time (in seconds) to start playback. 0 means start from the beginning.
7 | # - end_time: The time (in seconds) to end playback. 0 means play until the end of the file.
8 | # Example paths are given below. Replace these with the actual paths to your media files.
9 | # More info: https://github.com/mpv-player/mpv/blob/master/DOCS/edl-mpv.rst
10 |
11 | # First media file (replace with actual file path)
12 | /example/path/to/your/video1.mp4,0,2
13 | # Second media file
14 | /example/path/to/your/video2.mp4,0,2
15 | # Third media file
16 | /example/path/to/your/video3.mp4,0,2
17 |
--------------------------------------------------------------------------------
/src/config.ini:
--------------------------------------------------------------------------------
1 | [configurations]
2 | redResetButton=false
3 | autoPauseFeature=true
4 | mouseToWallpaper=true
5 | allFilesAllowed=false
6 | askMultiScreen=true
7 | multiScreenDefault=false
8 | forceWebview=false
9 | autoYoutubeParse=true
10 | forceMouseToWallpaper=false
11 | forceAutorefresh=false
12 |
--------------------------------------------------------------------------------
/src/mpv/README.txt:
--------------------------------------------------------------------------------
1 | Version: mpv-x86_64-20181002
2 | Source: https://github.com/mpv-player/mpv
3 |
4 | Files:
5 | - mpv.exe
6 | - mpv.com
7 | - libbdplus.dll
8 | - libaacs.dll
9 | - mpv.conf
10 |
--------------------------------------------------------------------------------
/src/mpv/mpv.conf:
--------------------------------------------------------------------------------
1 | deband=yes
2 | hwdec=auto
3 | border=no
4 | cache=yes
5 | demuxer-max-bytes=488281KiB
6 | demuxer-readahead-secs=120
7 | stop-screensaver=no
8 |
9 | # Only recommended volume for showcase non for daily use
10 | volume=0
11 |
12 | # Do not modify
13 | force-window=yes
14 | player-operation-mode=pseudo-gui
15 | loop=inf
16 |
--------------------------------------------------------------------------------
/src/tools/autoPause.au3:
--------------------------------------------------------------------------------
1 | #NoTrayIcon
2 | #include
3 | #include
4 |
5 | If _Singleton("AutoWallService", 1) = 0 Then
6 | Exit
7 | EndIf
8 |
9 | $pause = False
10 |
11 | While 1
12 | ; Resolution might be changed
13 | $iW = @DesktopWidth
14 | $iH = @DesktopHeight
15 |
16 | $Actwin = WinGetHandle("[active]")
17 |
18 | $aPos = WinGetPos($Actwin)
19 | $wText = WinGetTitle($Actwin)
20 |
21 | ; check GUI fill the screen and real gui
22 | If ($aPos <> 0 And $aPos[2] >= $iW And $aPos[3] >= $iH And StringLen($wText) > 0) Or BitAND(WinGetState($Actwin), $WIN_STATE_MAXIMIZED) Then
23 | If Not $pause Then
24 | ; FullScreen
25 | Run(@ComSpec & " /c " & "echo cycle pause >\\.\pipe\mpvsocket", "", @SW_HIDE)
26 | $pause = True
27 | EndIf
28 | Else
29 | If $pause Then
30 | ; not FullScreen
31 | Run(@ComSpec & " /c " & "echo cycle pause >\\.\pipe\mpvsocket", "", @SW_HIDE)
32 | $pause = False
33 | EndIf
34 | EndIf
35 | Sleep(100)
36 | WEnd
37 |
--------------------------------------------------------------------------------
/src/tools/mouseSender.au3:
--------------------------------------------------------------------------------
1 | #NoTrayIcon
2 | #include
3 | #include
4 |
5 | Func TrackMouseInWindow($hWnd)
6 | If $hWnd = 0 Then
7 | MsgBox(0, "MouseSender", "Could not send the mouse input to the wallpaper, if the bug persists disable this function in the configuration file.")
8 | Return
9 | EndIf
10 |
11 | Local $pos, $prevX = 0, $prevY = 0
12 |
13 | While 1
14 | $pos = MouseGetPos()
15 | If ($pos[0] <> $prevX) Or ($pos[1] <> $prevY) Then
16 | $prevX = $pos[0]
17 | $prevY = $pos[1]
18 | _WinAPI_PostMessage($hWnd, $WM_MOUSEMOVE, 0, _MakeLong($pos[0], $pos[1]))
19 | EndIf
20 | Sleep(10)
21 | WEnd
22 | EndFunc
23 |
24 | Func _MakeLong($LoWord, $HiWord)
25 | Return BitOR($HiWord * 0x10000, BitAND($LoWord, 0xFFFF))
26 | EndFunc
27 |
28 | ; Call the function with the class name of the window
29 | TrackMouseInWindow($CmdLine[1])
--------------------------------------------------------------------------------
/src/tools/refresh.au3:
--------------------------------------------------------------------------------
1 | ; -----------------------------------------------------------------------------
2 | ; Script: WorkerW Integration
3 | ; Description:
4 | ; This script integrate a known window into the Windows 11
5 | ; desktop layer by using a hidden WorkerW window.
6 | ;
7 | ; Steps:
8 | ; 1. Close any existing WorkerW windows to get a "clean slate".
9 | ; 2. Retrieve the WorkerW window handle, which sits behind the desktop icons.
10 | ; 3. Re-parent your known window (hAppWnd) as a child of the WorkerW window.
11 | ; 4. Remove all window decorations and position it to cover the entire desktop.
12 | ; 5. Trigger a shell refresh to ensure proper desktop icon layering.
13 | ;
14 | ; By doing this, your window effectively becomes a background element behind
15 | ; icons creating dynamic wallpapers, interactive desktops, or embedding custom
16 | ; UI into the desktop background layer.
17 | ; -----------------------------------------------------------------------------
18 |
19 | #include
20 | #include
21 |
22 | ; -----------------------------------------------------------------------------
23 | ; MAIN EXECUTION
24 | ; -----------------------------------------------------------------------------
25 |
26 | ; Ensure the user provided the application window handle as a parameter:
27 | ; Example: script.exe 0x00300218
28 | If $CmdLine[0] < 1 Then
29 | MsgBox(16, "Error", "Please provide the hAppWnd as a parameter (hex handle).")
30 | Exit
31 | EndIf
32 |
33 | ; Convert the command-line argument (string) to a handle (numeric).
34 | ; Note: hAppWnd should be provided in hex format (e.g., 0x00300218).
35 | Local $hAppWnd = $CmdLine[1]
36 |
37 | ; Step 0: Close any existing WorkerW windows to ensure a fresh environment.
38 | _CloseAllWorkerWWindows()
39 |
40 | ; Step 1: Retrieve the WorkerW window handle.
41 | ; The WorkerW window is created by the Explorer process and usually sits behind
42 | ; SHELLDLL_DefView which hosts the desktop icons. If we find that view, we can
43 | ; find the corresponding WorkerW. If not found, we can still try Progman fallback.
44 | Local $hWorkerW = _GetWorkerWHandle()
45 | If $hWorkerW = 0 Then
46 | MsgBox(16, "Error", "WorkerW window not found after attempting to create/locate it.")
47 | Exit
48 | EndIf
49 |
50 | ; Step 2: Set the known application window to be a child of the WorkerW window.
51 | ; This effectively places your app behind the icons on the Windows 11 desktop.
52 | Local $aSetParent = DllCall("user32.dll", "hwnd", "SetParent", "hwnd", $hAppWnd, "hwnd", $hWorkerW)
53 | If @error Then
54 | MsgBox(16, "Error", "Failed to set the specified window's parent to WorkerW.")
55 | Exit
56 | EndIf
57 |
58 | ; Step 3: Remove window decorations from hAppWnd.
59 | ; We strip out caption bars, thick frames, and other styles, leaving a borderless
60 | ; window that can cleanly integrate with the desktop background.
61 | _RemoveWindowBorders($hAppWnd)
62 |
63 | ; Step 4: Position the hAppWnd to cover the entire WorkerW area (entire desktop).
64 | ; The WorkerW typically matches the desktop dimension, so we size and position
65 | ; our window to match it exactly.
66 | _LocalizeApp($hAppWnd, $hWorkerW)
67 |
68 | ; Step 5: Trigger a shell refresh. This simulates right-click "Refresh" on the
69 | ; desktop, ensuring that icons and other elements refresh their Z-order and
70 | ; that the new WorkerW configuration is properly reflected.
71 | DllCall("shell32.dll", "none", "SHChangeNotify", _
72 | "long", 0x8000000, _ ; SHCNE_ASSOCCHANGED
73 | "uint", 0x0, _
74 | "ptr", 0, _
75 | "ptr", 0)
76 |
77 | ; Done! Your window should now sit behind the desktop icons.
78 |
79 | ; -----------------------------------------------------------------------------
80 | ; FUNCTION DEFINITIONS
81 | ; -----------------------------------------------------------------------------
82 |
83 | ; _CloseAllWorkerWWindows()
84 | ; Closes all existing WorkerW windows. This ensures that there's no stale
85 | ; WorkerW environment. If multiple WorkerWs are found, we close them all
86 | ; to avoid unexpected behaviors.
87 | Func _CloseAllWorkerWWindows()
88 | Local $aWinList = WinList()
89 | For $i = 1 To $aWinList[0][0]
90 | Local $hWnd = $aWinList[$i][1]
91 | If $aWinList[$i][0] <> "" Then
92 | If _WinAPI_GetClassName($hWnd) = "WorkerW" Then
93 | WinClose($hWnd)
94 | EndIf
95 | EndIf
96 | Next
97 | ; Short sleep to allow the system to process the closing of these windows.
98 | Sleep(500)
99 | EndFunc
100 |
101 | ; _GetWorkerWHandle()
102 | ; Attempts to find or create a WorkerW handle which sits behind the icons.
103 | ; The logic:
104 | ; 1. Enumerate all top-level windows.
105 | ; 2. Identify the SHELLDLL_DefView child window (the one hosting desktop icons).
106 | ; 3. The WorkerW behind it is where we want to parent our custom window.
107 | ; If not found directly, tries the Progman fallback approach.
108 | Func _GetWorkerWHandle()
109 | Local $aWinList = WinList()
110 |
111 | For $i = 1 To $aWinList[0][0]
112 | Local $hWnd = $aWinList[$i][1]
113 | Local $hShellView = _FindWindowEx($hWnd, 0, "SHELLDLL_DefView", "")
114 | If $hShellView <> 0 Then
115 | ; Once we find SHELLDLL_DefView, the WorkerW behind it can be found.
116 | Local $hWorkerW = _FindWindowEx(0, $hWnd, "WorkerW", "")
117 | If $hWorkerW <> 0 Then
118 | Return $hWorkerW
119 | EndIf
120 | EndIf
121 | Next
122 |
123 | ; Fallback: use Progman if above method fails.
124 | Local $hProgman = WinGetHandle("[CLASS:Progman]")
125 | If $hProgman <> 0 Then
126 | Local $hWorkerW = _FindWindowEx($hProgman, 0, "WorkerW", "")
127 | If $hWorkerW <> 0 Then Return $hWorkerW
128 | EndIf
129 |
130 | ; If none found, return 0 indicating failure.
131 | Return 0
132 | EndFunc
133 |
134 | ; _FindWindowEx($hWndParent, $hWndChildAfter, $sClassName, $sWindowName)
135 | ; Wrapper for FindWindowExW. Searches a window's children by class and name.
136 | Func _FindWindowEx($hWndParent, $hWndChildAfter, $sClassName, $sWindowName)
137 | Local $aResult = DllCall("user32.dll", "hwnd", "FindWindowExW", _
138 | "hwnd", $hWndParent, _
139 | "hwnd", $hWndChildAfter, _
140 | "wstr", $sClassName, _
141 | "wstr", $sWindowName)
142 | If @error Then Return SetError(@error, @extended, 0)
143 | Return $aResult[0]
144 | EndFunc
145 |
146 | ; _RemoveWindowBorders($hWnd)
147 | ; Removes standard window borders, captions, thickframes, and changes EX-style
148 | ; to remove appwindow style and add toolwindow, making it appear more like a
149 | ; non-decorated background element.
150 | Func _RemoveWindowBorders($hWnd)
151 | Local Const $GWL_STYLE = -16
152 | Local Const $GWL_EXSTYLE = -20
153 |
154 | Local $iStyle = _WinAPI_GetWindowLong($hWnd, $GWL_STYLE)
155 | Local $iExStyle = _WinAPI_GetWindowLong($hWnd, $GWL_EXSTYLE)
156 |
157 | ; Remove caption and thickframe styles from the window.
158 | $iStyle = BitAND($iStyle, BitNOT($WS_CAPTION))
159 | $iStyle = BitAND($iStyle, BitNOT($WS_THICKFRAME))
160 |
161 | ; Adjust Extended Styles: remove appwindow, add toolwindow (removes taskbar presence).
162 | $iExStyle = BitAND($iExStyle, BitNOT($WS_EX_APPWINDOW))
163 | $iExStyle = BitOR($iExStyle, $WS_EX_TOOLWINDOW)
164 |
165 | ; Apply the new styles.
166 | _WinAPI_SetWindowLong($hWnd, $GWL_STYLE, $iStyle)
167 | _WinAPI_SetWindowLong($hWnd, $GWL_EXSTYLE, $iExStyle)
168 |
169 | ; Refresh the window frame to apply changes.
170 | _WinAPI_SetWindowPos($hWnd, 0, 0, 0, 0, 0, _
171 | BitOR($SWP_NOMOVE, $SWP_NOSIZE, $SWP_NOZORDER, $SWP_FRAMECHANGED))
172 | EndFunc
173 |
174 | ; _LocalizeApp($hAppWnd, $hWorkerW)
175 | ; Positions and resizes the application window ($hAppWnd) to exactly cover the
176 | ; WorkerW window. As WorkerW typically matches the desktop dimension, this ensures
177 | ; the app spans the entire screen behind the icons.
178 | Func _LocalizeApp($hAppWnd, $hWorkerW)
179 | Local $aWorkerWPos = WinGetPos($hWorkerW)
180 | _WinAPI_SetWindowPos($hAppWnd, 0, _
181 | $aWorkerWPos[0], $aWorkerWPos[1], $aWorkerWPos[2], $aWorkerWPos[3], _
182 | $SWP_NOZORDER)
183 | EndFunc
184 |
--------------------------------------------------------------------------------
/src/tools/updater.au3:
--------------------------------------------------------------------------------
1 | #NoTrayIcon
2 | #include
3 | #include
4 |
5 | ; Register a COM error handler
6 | Global $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc")
7 |
8 | Func GetLatestReleaseInfo($sRepoOwner, $sRepoName)
9 | Local $sURL = "https://api.github.com/repos/" & $sRepoOwner & "/" & $sRepoName & "/releases/latest"
10 | Local $oHTTP = ObjCreate("winhttp.winhttprequest.5.1")
11 | If IsObj($oHTTP) Then
12 | $oHTTP.Open("GET", $sURL, False)
13 | $oHTTP.Send()
14 | If Not @error Then
15 | Local $sJSON = $oHTTP.ResponseText
16 | Return $sJSON
17 | EndIf
18 | EndIf
19 | Return SetError(1, 0, "")
20 | EndFunc
21 |
22 | Func MyErrFunc()
23 | ; Do nothing, just return to prevent the default COM error message
24 | Return SetError(1, 0, "")
25 | EndFunc
26 |
27 | Func ParseJSON($sJSON, $sKey)
28 | Local $sPattern = '"' & $sKey & '":\s*"([^"]+)"'
29 | Local $aMatches = StringRegExp($sJSON, $sPattern, 1)
30 | If @error Or Not IsArray($aMatches) Then Return SetError(1, 0, "")
31 | Return $aMatches[0]
32 | EndFunc
33 |
34 | ; Main script
35 | Local $sRepoOwner = "SegoCode"
36 | Local $sRepoName = "AutoWall"
37 |
38 | ; Get latest release info
39 | Local $sJSON = GetLatestReleaseInfo($sRepoOwner, $sRepoName)
40 | If @error Then Exit ; Exit if there is an error in getting the latest release info
41 |
42 | ; Parse JSON
43 | Local $sTagName = ParseJSON($sJSON, "tag_name")
44 | If @error Then Exit ; Exit if there is an error in parsing the tag name
45 | Local $sBody = ParseJSON($sJSON, "body")
46 | If @error Then Exit ; Exit if there is an error in parsing the body
47 | Local $sHtmlUrl = ParseJSON($sJSON, "html_url")
48 | If @error Then Exit ; Exit if there is an error in parsing the html url
49 |
50 | ; Read local version
51 | Local $sVersionFile = "tools\version.dat"
52 | Local $sLocalVersion = FileRead($sVersionFile)
53 | If @error Then Exit ; Exit if there is an error in reading the local version file
54 |
55 | ; Check version
56 | If $sLocalVersion <> $sTagName Then
57 | Local $sMessage = "You are running an old version of AutoWall, the latest version is " & $sTagName & _
58 | @CRLF & "Changes in the latest version:" & @CRLF & @CRLF & $sBody & _
59 | @CRLF & @CRLF & "Do you want to download the latest version?"
60 | Local $iResponse = MsgBox($MB_YESNO, "AutoWall Updater, new version is available", $sMessage)
61 | If $iResponse = $IDYES Then
62 | ShellExecute($sHtmlUrl)
63 | EndIf
64 | EndIf
65 |
--------------------------------------------------------------------------------
/src/tools/version.dat:
--------------------------------------------------------------------------------
1 | 1.13
2 |
--------------------------------------------------------------------------------
/src/tools/webview.txt:
--------------------------------------------------------------------------------
1 | Version: 1.0.0
2 | Source: https://github.com/SegoCode/LiteWebview
3 |
4 | Files:
5 | - LiteWebview.exe
6 |
--------------------------------------------------------------------------------
/src/weebp/README.txt:
--------------------------------------------------------------------------------
1 | Version: weebp-0.6.1-windows-x64
2 | Source: https://github.com/Francesco149/weebp
3 |
4 | Files:
5 | - wp.exe
6 | - wp-headless.exe
7 | - weebp.lib
8 | - weebp.dll
--------------------------------------------------------------------------------