一个自定义桌面背景的小程序
可以将图片、视频当做桌面背景
程序思路:
建立一个窗口,显示自定义的内容,并将窗口设置为桌面背景
设置桌面背景窗口:
使用MediaElement实现图片、视频的播放,设置窗口不可点击:IsHitTestVisible=“True”
窗口初始化设置为背景:
private IntPtr programIntPtr = IntPtr.Zero;
bool inited { get; set; }
public void Init()
{
try
{
if (inited) return;
// 通过类名查找一个窗口,返回窗口句柄。
programIntPtr = Win32.FindWindow("Progman", null);
// 窗口句柄有效
if (programIntPtr != IntPtr.Zero)
{
IntPtr result = IntPtr.Zero;
// 向 Program Manager 窗口发送 0x52c 的一个消息,超时设置为0x3e8(1秒)。
Win32.SendMessageTimeout(programIntPtr, 0x52c, IntPtr.Zero, IntPtr.Zero, 0, 0x3e8, result);
// 遍历顶级窗口
Win32.EnumWindows((hwnd, lParam) =>
{
// 找到包含 SHELLDLL_DefView 这个窗口句柄的 WorkerW
if (Win32.FindWindowEx(hwnd, IntPtr.Zero, "SHELLDLL_DefView", null) != IntPtr.Zero)
{
// 找到当前 WorkerW 窗口的,后一个 WorkerW 窗口。
IntPtr tempHwnd = Win32.FindWindowEx(IntPtr.Zero, hwnd, "WorkerW", null);
// 隐藏这个窗口
Win32.ShowWindow(tempHwnd, 0);
}
return true;
}, IntPtr.Zero);
}
//将当前窗口设置为背景窗口
Win32.SetParent(new WindowInteropHelper(this).Handle, programIntPtr);
inited = true;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
在程序主窗口中设置拖拽事件,将资源传输到当前窗口并显示,就可以啦。