最近很火的 Wallpaper Engine 的實現原理是怎樣的?
就是在桌面圖標後面建了個窗口,你想畫什麼都行
Draw Behind Desktop Icons in Windows 8+
https://www.codeproject.com/articles/856020/draw-behind-desktop-icons-in-windows
這個軟體的實現原理其實非常簡單,為了便於理解,我盡量用大家都明白的方式來解答。
如果我們把電腦桌面不再看成一個整體,而是看成一個個層組成的畫面之後,這個問題就容易理解得多了。電腦桌面一般可以分為桌面層、圖標層、工具層、任務欄層以及屏保層等等。這些層有些是可見的,有些是隱藏的,在用戶需要的時候才會出現。
一般用戶修改桌面,是修改的桌面層的內容,這個是系統層級的東西,用戶替換主題也是,是系統提前設置好主題輪換的狀態,然後用戶再去通過系統給出的解決方案替換或者編輯主題,本身比較被動。而Wallpaper Engine這款軟體,則沒有選擇更改桌面層的內容,而是在桌面層與其他層之間,增加了一個層,形成一個「偽桌面」的層,在這個層上進行各種調整和修改。
也就是說,原來你看到的桌面層的東西,現在已經被另外一個層覆蓋了,桌面層原有的內容被替換到下面去了,你看到的桌面是Wallpaper Engine全新生成的新一層內容,這個內容Wallpaper Engine可以完全定製,所以無論是顯示視頻還是利用各種程序達到酷炫的效果,都是Wallpaper Engine自己的這一層完成的,原有的桌面本身並沒有被改變,它們只是被Wallpaper Engine創造的新的桌面層覆蓋了而已,如果你不再使用Wallpaper Engine,你會發現原有的桌面又回來了,其實不能說是回來了,而是沒有了新層的內容,被覆蓋的內容又重新顯示了而已。
其實在十幾年前屏保程序經常被用戶拿來玩耍的時候,就有很多屏保程序被用戶替代成了各種視頻或者是小遊戲。這個東西其實實現非常簡單,因為屏保層是顯示在桌面的其他層之上的,所以用戶想對屏保做什麼很簡單方便,而且屏保是用戶完全不用電腦之後才會出現的程序,所以顯示一些什麼也不會耽誤用戶的電腦資源。所以當年各種有趣的屏保才十分豐富,讓人玩出了花來。
然而在當年用戶對桌面的追求並不大,第一點原因是用戶在使用電腦的時候,不需要在桌面看到太花哨的東西,他們只需要使用程序或者打開遊戲,就可以得到比桌面簡單的花哨內容更多更有趣的東西,在桌面放這些內容,沒有必要。第二則是相關桌面的替換並不容易,當年可沒有這麼方便豐富的創意工坊,用戶想要隨意切換自己的桌面達到自己想要的結果,每次還要繁瑣的設置,這既麻煩又無聊,當然,是對當時的人來說的。第三也是最為關鍵的問題,就是當年的電腦性能,還遠遠達不到讓用戶可以隨意浪費的程度,那個時候電腦性能十分有限,用戶恨不得天天超頻來獲取更強大的性能,像現在這樣隨意浪費性能來實現一些酷炫的功能,在當年來說簡直是不可想像的。所以當年雖然這種技術絕對能夠實現,而且也有一些軟體做到了這一點,不過這些軟體和使用的用戶一直沒有成為主流,這是受到多方面限制的結果。
所以說現在Wallpaper Engine如此火爆,其實是佔了天時地利人和。如果沒有電腦性能這些年的突飛猛進,讓用戶可以浪費一些性能來實現很多酷炫的效果;以及網路變的越來越方便,讓用戶可以動動手指就能輕鬆改變設置這些要素。這款軟體絕對不會有這麼火爆的成果,所以我覺得,我們的時代越來越好,未來一定會有更多供我們浪費的軟體誕生。這對我這種老網蟲以及經歷過那個年代的人來說,簡直是不可想像的。
所以我一直相信,未來會越來越好,越來越好!Windows 98開始微軟就提供了將網頁設置為桌面壁紙的功能,只是沒法交互,只能看。Vista有了把視頻作為桌面背景的功能(DreamScene),不過到了Win7默認是隱藏的。可以猜想微軟一定提供了往桌面背景上畫東西的API或者相關方式(見高票回答),這也是這個軟體只支持Windows,沒有Mac和Linux版的原因之一
windows自帶的API。
比如win7上就出現過的各種播放器的桌面播放功能:將畫面投放到的壁紙層而不影響桌面操作。
之所以這麼火我想可能是因為佔用內存小、易於操作、中文、正版便宜、資源豐富且載入方便、MMD。看到很多人都說這程序在桌面和圖片之間建了一個窗口,我表示懷疑。因為我的桌面壁紙是設成幻燈片的(Windows 自帶的功能),每個一段時間會自動換一下,而且換的時候有一個漸變過程。
問題就是當我打開 Wallpaper Engine 以後,Windows 自己的壁紙看不到了,但是換壁紙的過程能看到!換好以後又是 Wallpaper Engine 的桌面。所以看來 Wallpaper Engine 直接畫在了 Windows 自己的壁紙窗口上。但是為毛啊?自己建窗口多方便,不是很明白……
如果這要是 win xp/98 的話我大概知道怎麼寫,不過我已經很多年沒在 Windows 下寫過程序了,也許現在的機制已經和以前完全不同……
另外我是聽說 Wallpaper Engine 有好多福利我才買的,後來發現福利內容都禁了………… 所以我現在就不用了……
我寫的 動態壁紙 效果實現, 和樓上提供的鏈接提供的方法效果要好些, 可在win7桌面圖標下繪製,不會覆蓋圖標.
https://github.com/ydar95/GLSL_Render_BackGround
最近很火的wallpaper engine 不是因為他技術,因為眾所周知的原因啊……
推薦閱讀:
※現有一個數x和n,如何用儘可能少的操作算出x的n次方?(每次加減乘除算一次操作,且可以認為n挺大的)?
※數組中有4*k+2個整數,其中k個整數出現4次,1個整數出現2次。找出出現2次的那個整數?時間和空間越小越好
※演算法第四版所用到需要下載的庫?
※最大流的最新演算法,複雜度低至O(VE),有實際應用價值嗎?為何很少見人提到?