日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

WPF 实现动态Windows桌面壁纸~

發布時間:2023/12/4 windows 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WPF 实现动态Windows桌面壁纸~ 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?? ??? 由于微信群人數太多入群請添加小編微信號

?yanjinhuawechat 或 W_Feng_aiQ?入群

?需備注WPF開發者?

? PS:有更好的方式歡迎推薦。

? 此項目靈感來源于?丑萌氣質狗 B站同名??

? QQ群:560611514 ?(學習Unity3D)增加了播放視頻。

01

代碼如下

一、窗口介紹

Windows操作系統所有的地方都是窗口,可能這也是系統名字的由來吧,包括你看到的文件夾,桌面,右鍵菜單,這些都是由界面組成的, 這么多窗口需要有一個合理的顯示,就需要用到我們的層級關系,比如兩個窗體誰顯示在前,誰顯示在后。

VS給我們提供了一個查找和查看窗口信息的工具,叫做Spy++,在工具里面:

打開之后了,這里給我們展示了當前系統所有的窗口信息,你也可以點擊紅色框中的查找工具,來查看你想知道的窗口信息:

來演示一下如何查找窗口,點擊上方紅色框中的查找窗口按鈕,兩個隨便選一個,會彈出如下窗口:

然后你點擊紅色區域中的這個控件拖動到你想獲取的信息窗口,就能看到當前窗口的詳細信息了,包括窗口的句柄、標題、類。

比如我直接將圖標拖到桌面上,可以看到這是他顯示桌面的信息:

這里我們關掉這個窗口, 回到Spy++的主界面,拖到最底部:

可以看到,?Progman Manager是桌面窗口的父窗口,前面小窗口圖標是灰色的表示的是此窗口是隱藏的(子窗口擁有和父窗口一致的顯示層級)。

二、原理操作

現在,我們只需要把我們的界面,也就是放到?Program Manager下面,然后再適當調整它的顯示順序,就可以了,但是這一塊我們不好操作。有一個其他路子就是給窗口發送一個特殊的消息,來讓我們有操作的空間。

只需要給?Program Manager窗口發送一個消息0x52C,就可以將Program Manager拆分為多個窗口,分別是Program Manager窗口和兩個WorkerW窗口。

下面是已經發送過此消息后的樣子:

可以看到Program Manager下面已經什么都沒有了,內容全都轉移到第一個WokerW窗口下,這時候我們只需要將我們的窗口掛在到Program Manager窗口的下方就能又有和它一樣的顯示層級了(窗口從下到上依次顯示,所以這里Program Manager顯示在最底層),不過需要注意的是,在Program Manager和第一個WorkerW窗口之間,還存在另外一個WorkerW窗口,在我的系統中,它默認隱藏了,為了確保效果一致,我們需要手動將它隱藏起來。

三、Win32ApiHelper?代碼如下

using?System; using?System.Runtime.InteropServices;namespace?WPFDevelopers.Helpers {public?class?Win32ApiHelper{[DllImport("user32.dll")]public?static?extern?IntPtr?FindWindow(string?className,?string?winName);[DllImport("user32.dll")]public?static?extern?IntPtr?SendMessageTimeout(IntPtr?hwnd,?uint?msg,?IntPtr?wParam,?IntPtr?lParam,?uint?fuFlage,?uint?timeout,?IntPtr?result);//查找窗口的委托?查找邏輯public?delegate?bool?EnumWindowsProc(IntPtr?hwnd,?IntPtr?lParam);[DllImport("user32.dll")]public?static?extern?bool?EnumWindows(EnumWindowsProc?proc,?IntPtr?lParam);[DllImport("user32.dll")]public?static?extern?IntPtr?FindWindowEx(IntPtr?hwndParent,?IntPtr?hwndChildAfter,?string?className,?string?winName);[DllImport("user32.dll")]public?static?extern?bool?ShowWindow(IntPtr?hwnd,?int?nCmdShow);[DllImport("user32.dll")]public?static?extern?IntPtr?SetParent(IntPtr?hwnd,?IntPtr?parentHwnd);} }

四、DesktopBackground.xaml?代碼如下

<UserControl?x:Class="WPFDevelopers.Samples.ExampleViews.DesktopBackground"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"?xmlns:d="http://schemas.microsoft.com/expression/blend/2008"?xmlns:local="clr-namespace:WPFDevelopers.Samples.ExampleViews"mc:Ignorable="d"?d:DesignHeight="450"?d:DesignWidth="800"><Grid><Button?Content="選擇視頻"?Height="40"?Width="120"?Click="Button_Click"/></Grid> </UserControl>

五、DesktopBackground.xaml.cs?代碼如下

using?System.Windows; using?System.Windows.Controls; using?WPFDevelopers.Samples.ExampleViews.Desktop;namespace?WPFDevelopers.Samples.ExampleViews {///?<summary>///?WorkerWBackground.xaml?的交互邏輯///?</summary>public?partial?class?DesktopBackground?:?UserControl{public?DesktopBackground(){InitializeComponent();}private?void?Button_Click(object?sender,?RoutedEventArgs?e){new?DesktopPlayVideo().Show();}?} }

六、DesktopPlayVideo.xaml?代碼如下

<Window?x:Class="WPFDevelopers.Samples.ExampleViews.Desktop.DesktopPlayVideo"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:sys="clr-namespace:System;assembly=mscorlib"xmlns:local="clr-namespace:WPFDevelopers.Samples.ExampleViews.Desktop"xmlns:shell="clr-namespace:Microsoft.Windows.Shell;assembly=Microsoft.Windows.Shell"mc:Ignorable="d"?Background="Transparent"WindowStyle="None"ResizeMode="NoResize"AllowsTransparency="True"Height="{x:Static?SystemParameters.PrimaryScreenHeight}"Width="{x:Static?SystemParameters.PrimaryScreenWidth}"><Grid><MediaElement?Name="PART_MediaElement"/></Grid> </Window> <Window?x:Class="WPFDevelopers.Samples.ExampleViews.Desktop.DesktopPlayVideo"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:sys="clr-namespace:System;assembly=mscorlib"xmlns:local="clr-namespace:WPFDevelopers.Samples.ExampleViews.Desktop"xmlns:shell="clr-namespace:Microsoft.Windows.Shell;assembly=Microsoft.Windows.Shell"mc:Ignorable="d"?Background="Transparent"WindowStyle="None"ResizeMode="NoResize"AllowsTransparency="True"Height="{x:Static?SystemParameters.PrimaryScreenHeight}"Width="{x:Static?SystemParameters.PrimaryScreenWidth}"><Grid><MediaElement?Name="PART_MediaElement"/></Grid> </Window>

七、DesktopPlayVideo.xaml.cs?代碼如下

using?System; using?System.Windows; using?System.Windows.Interop; using?System.Windows.Media; using?System.Windows.Media.Animation; using?WPFDevelopers.Helpers;namespace?WPFDevelopers.Samples.ExampleViews.Desktop {///?<summary>///?DesktopPlayVideo.xaml?的交互邏輯///?</summary>public?partial?class?DesktopPlayVideo?:?Window{private?IntPtr?programHandle;public?DesktopPlayVideo(){InitializeComponent();this.Loaded?+=?DesktopPlayVideo_Loaded;}private?void?DesktopPlayVideo_Loaded(object?sender,?RoutedEventArgs?e){Microsoft.Win32.OpenFileDialog?openFileDialog?=?new?Microsoft.Win32.OpenFileDialog();openFileDialog.DefaultExt?=?".mp4";openFileDialog.Filter?=?"視頻文件(.MP4)|*.mp4;";if?(openFileDialog.ShowDialog()?==?true){SendMsgToProgman();Width?=?SystemParameters.PrimaryScreenWidth;?Height?=?SystemParameters.PrimaryScreenHeight;?Left?=?0;?Top?=?0;//PART_MediaElement.Source?=?new?Uri(openFileDialog.FileName);//PART_MediaElement.MediaEnded?+=?(s1,?e1)?=>?//{//????PART_MediaElement.Position?=?new?TimeSpan(0,?0,?1);//????PART_MediaElement.Play();//};var?storyboard?=?new?Storyboard();storyboard.RepeatBehavior?=?RepeatBehavior.Forever;var?mediaTimeline?=?new?MediaTimeline{Source?=?new?Uri(openFileDialog.FileName),};Storyboard.SetTargetName(mediaTimeline,?PART_MediaElement.Name);storyboard.Children.Add(mediaTimeline);//?設置當前窗口為?Program?Manager的子窗口Win32ApiHelper.SetParent(new?WindowInteropHelper(this).Handle,?programHandle);PART_MediaElement.Loaded?+=?(s1,?e1)?=>{storyboard.Begin(PART_MediaElement);};App.CurrentMainWindow.WindowState?=?WindowState.Minimized;}}///?<summary>///?向桌面發送消息///?</summary>void?SendMsgToProgman(){//?桌面窗口句柄,在外部定義,用于后面將我們自己的窗口作為子窗口放入programHandle?=?Win32ApiHelper.FindWindow("Progman",?null);IntPtr?result?=?IntPtr.Zero;//?向?Program?Manager?窗口發送消息?0x52c?的一個消息,超時設置為2秒Win32ApiHelper.SendMessageTimeout(programHandle,?0x52c,?IntPtr.Zero,?IntPtr.Zero,?0,?2,?result);//?遍歷頂級窗口Win32ApiHelper.EnumWindows((hwnd,?lParam)?=>{//?找到第一個?WorkerW?窗口,此窗口中有子窗口?SHELLDLL_DefView,所以先找子窗口if?(Win32ApiHelper.FindWindowEx(hwnd,?IntPtr.Zero,?"SHELLDLL_DefView",?null)?!=?IntPtr.Zero){//?找到當前第一個 WorkerW 窗口的,后一個窗口,及第二個 WorkerW 窗口。IntPtr?tempHwnd?=?Win32ApiHelper.FindWindowEx(IntPtr.Zero,?hwnd,?"WorkerW",?null);//?隱藏第二個?WorkerW?窗口Win32ApiHelper.ShowWindow(tempHwnd,?0);}return?true;},?IntPtr.Zero);}} }

02


效果預覽

鳴謝素材提供者 -?丑萌氣質狗(李飛)

源碼地址如下

Github:https://github.com/WPFDevelopersOrg

Gitee:https://gitee.com/WPFDevelopersOrg

作者:丑萌氣質狗? ?學習Unity3D B站搜索?丑萌氣質狗?

出處:https://www.cnblogs.com/choumengqizhigou/p/15702980.html

版權:本文采用「署名-非商業性使用-相同方式共享 4.0 國際」知識共享許可協議進行許可。

轉載請注明出處

QQ群:560611514 ?(學習Unity3D)

WPF開發者QQ群:?340500857

掃一掃關注我們,

更多知識早知道!

點擊閱讀原文可跳轉至源代碼

總結

以上是生活随笔為你收集整理的WPF 实现动态Windows桌面壁纸~的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 91全免费 | 色综合欧美 | 乱码一区二区三区 | 成人妇女淫片aaaa视频 | www.xxx.日本 | 天天综合色网 | 日本a在线天堂 | av中文在线 | 手机看片日韩在线 | 老熟女高潮一区二区三区 | 久久久久综合网 | 天堂成人国产精品一区 | 中文字幕在线视频第一页 | 亚洲久久综合 | 91最新在线视频 | 国产精品999 | 免费福利在线观看 | 潘金莲一级淫片免费放动漫 | 亚洲一区二区三区在线免费观看 | 久久国产亚洲精品无码 | 天天干天天插天天操 | 亚洲三级网站 | 亚洲精品福利视频 | 小镇姑娘国语版在线观看免费 | www.com黄色 | 午夜精品电影 | 久久精品电影网 | 免费一级特黄 | 成人在线影视 | 好吊妞无缓冲视频观看 | 看污片网站 | 强开小受嫩苞第一次免费视频 | 青草视频免费观看 | 亚洲午夜精品一区 | 欧美肥老妇 | 中文字幕25页 | 91黄在线观看 | 久久久精品中文字幕麻豆发布 | 亚瑟av在线 | 日韩美女爱爱 | 欧美一级淫片免费视频魅影视频 | 亚洲精品v| www.日韩.com | 91免费高清在线观看 | 啪视频在线 | 打开免费观看视频在线 | 日本50路肥熟bbw | 精品国产一区二区三区久久久久久 | 欧美国产一区二区在线观看 | 99re国产精品| 蜜乳av一区二区 | 葵司有码中文字幕二三区 | 午夜少妇视频 | 日本美女毛茸茸 | 黄色一级片免费在线观看 | 4438亚洲 | 国产成人无码精品久久久性色 | 91丨porny| 成人精品一区二区三区中文字幕 | 铠甲勇士猎铠 | 丰满人妻熟妇乱偷人无码 | 国产三级av在线播放 | 国产精品久久久久久久久 | 婷婷亚洲一区 | 天躁夜夜躁狼狠躁 | 丁香六月天婷婷 | 岛国中文字幕 | 国产又黄又粗又猛又爽 | 欧美日韩亚洲精品一区二区 | 亚洲www视频 | 72成人网| 日韩欧美一区在线观看 | 国产精品无码无卡无需播放器 | 日韩av一区二区三区在线观看 | 天堂a在线 | 亚洲欧美另类激情 | 欧美大片在线看 | 色屁屁在线 | 成人av影视在线观看 | a毛片| 免费看成年人视频 | 999精品 | 97国产精品视频人人做人人爱 | 91久久久久 | 国产精品av在线播放 | 精品人妻无码一区二区三 | 国产一区二区三区四区精 | 99热2 | 人妻体体内射精一区二区 | 一个人在线观看免费视频www | 日本久久久久 | 草莓视频成人在线 | www黄色片网站 | 啪啪免费网站 | 国内自拍偷拍网 | 国产精品一区二区久久毛片 | 天天5g天天爽免费观看 | 日韩精品自拍偷拍 | 国产乱了高清露脸对白 |