- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
有没有办法在 C++ 中获取 Windows 墙纸(图标后面)的句柄以便在上面绘制?这将允许制作事件桌面(在 Windows XP 之后停产)等价物、Wallpaper Engine 等价物或任何其他类似工具。 (在我的案例中,墙纸上的温度和资源使用情况监控)。
注意:GetDesktopWindow()
返回的句柄返回桌面图标级别的窗口,而不是在它后面。
来自 similar questions 的解决方案不适合我。具体来说,我尝试了 VLC 媒体播放器的 wallpaper mode代码。
关键代码是:
hwnd = FindWindow( _T("Progman"), NULL );
if( hwnd ) hwnd = FindWindowEx( hwnd, NULL, _T("SHELLDLL_DefView"), NULL );
if( hwnd ) hwnd = FindWindowEx( hwnd, NULL, _T("SysListView32"), NULL );
if( !hwnd )
{
msg_Warn( p_vout, "couldn't find \"SysListView32\" window, "
"wallpaper mode not supported" );
return;
}
但它不会在墙纸上绘制。
最佳答案
致谢 draw behind desktop icons C#页面作为引用。这篇文章解释了解决方案背后的理论,无论使用何种编程语言,该理论都适用。
长话短说,您在 Windows 10 上看到的更改墙纸时平滑的渐变动画是通过创建一个完全符合您要求的新窗口(在图标下方绘制)实现的。该窗口实现了新墙纸的淡入效果,由程序管理器创建。
在上述文章中,您可以看到与 C# 实现一起对每个步骤的解释。在这里,我将编写一个 C++ 等价物,保留来自源的注释。
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
{
HWND p = FindWindowEx(hwnd, NULL, L"SHELLDLL_DefView", NULL);
HWND* ret = (HWND*)lParam;
if (p)
{
// Gets the WorkerW Window after the current one.
*ret = FindWindowEx(NULL, hwnd, L"WorkerW", NULL);
}
return true;
}
HWND get_wallpaper_window()
{
// Fetch the Progman window
HWND progman = FindWindow(L"ProgMan", NULL);
// Send 0x052C to Progman. This message directs Progman to spawn a
// WorkerW behind the desktop icons. If it is already there, nothing
// happens.
SendMessageTimeout(progman, 0x052C, 0, 0, SMTO_NORMAL, 1000, nullptr);
// We enumerate all Windows, until we find one, that has the SHELLDLL_DefView
// as a child.
// If we found that window, we take its next sibling and assign it to workerw.
HWND wallpaper_hwnd = nullptr;
EnumWindows(EnumWindowsProc, (LPARAM)&wallpaper_hwnd);
// Return the handle you're looking for.
return wallpaper_hwnd;
}
根据您的编码偏好,类 C 的转换可以替换为 reinterpret_cast
。
一个注释,文章中没有提到:由于在更改壁纸时会生成一个新的 WorkerW 窗口以实现淡入淡出效果,如果用户在您的程序正在主动绘制和刷新您的 WorkerW 实例时尝试更改壁纸,则用户设置的背景将放置在您的绘图之上,开始淡入直到达到 100% 不透明度,最后被销毁,让您的 WorkerW 仍在运行。
关于c++ - 在 C++ 中绘制 Windows 10 壁纸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56132584/
我发现这个插件可以让youtube视频作为背景:http://formstone.it/components/wallpaper 看起来很简单,但行不通。我也没有收到任何错误。我在 codepen 上
我为 android 制作壁纸,我希望用户可以选择选项。显示带有选项的菜单,但有问题。当我单击任何选项并返回壁纸屏幕时,它们不会更新新选项。为什么?我的代码WallpaperService: publ
你好 friend ,whatsapp 中有一个选项,我们可以通过它更改 whatsapp 聊天的背景墙纸。我正在制作一个项目,其中我提供了很多壁纸,我想从我的壁纸列表中设置壁纸 我使用了这段代码,但
我在几个地方读到桌面墙纸可以设置为 HTML 文档。有没有人成功地以编程方式改变它? 下面的 VB6 代码片段帮助我为 BMP 设置东西,但是当我尝试将它用于 HTML 时,我得到一个漂亮的蓝色背景,
我正在尝试使用 clx 更改墙纸,但它不起作用。我的代码有什么问题? (ql:quickload :clx) (defpackage #:wm/uw (:use #:cl #:xlib)) (in
我正在尝试指定一个 jpg 文件作为特定桌面的壁纸,但它似乎不起作用...而是将背景更改为另一个图像不同的文件夹...有人知道如何修复它吗? tell application "System Even
我正在尝试指定一个 jpg 文件作为特定桌面的壁纸,但它似乎不起作用...而是将背景更改为另一个图像不同的文件夹...有人知道如何修复它吗? tell application "System Even
我正在尝试使用代码更改 Android 壁纸。我正在使用 WallpaperManager 类,但没有成功。我在/drawable 目录中使用了一个 .png 图像。我收到一条错误消息,指出“原始类型
我想知道 Android Live 3D 壁纸是如何创建的?使用什么软件?以及开发人员如何使它与触摸、滑动等交互...我希望有人能帮助我如何开始...谢谢 最佳答案 3d 壁纸是在 opengles
我想知道是否可以使用我的笔记本电脑从 ADB 更改 android 壁纸。我不知道是否存在任何命令,或者我是否需要将图片复制到文件夹或编辑文本文件。如果可能的话,我需要通过 ADB 解决这个问题。 谢
我在过去的几周里(认真地)在网上搜索过,但我找不到我需要的东西。我只想启动一个与 set as 操作相对应的 Intent 。它通常提供设置为墙纸 或设置为联系人图片。然后,如果设备上安装了更多应用程
我想更改 Windows 中的桌面墙纸(7,如果有影响的话)。 我下面的尝试没有成功。据我所知,它不会更改墙纸、注册表项或执行除打印“0”以外的任何操作。 require 'Win32API' SPI
目标是在没有控件的情况下在 UIView 中播放视频文件 (*.mp4)。 它将作为 ViewController 和其他控件的背景/墙纸,即 tableview、文本字段、图像将在视频播放时显示在
有没有办法在 C++ 中获取 Windows 墙纸(图标后面)的句柄以便在上面绘制?这将允许制作事件桌面(在 Windows XP 之后停产)等价物、Wallpaper Engine 等价物或任何其他
我希望使用 Windows API 在 C++ 中更改 Windows 桌面背景墙纸。 我已阅读以下有关此主题的帖子: How to change desktop background using V
我知道这个问题之前已经被问过,但是有谁知道是否可以以编程方式为最新的 iphone 操作系统iOS4.2(测试版)设置主屏幕(壁纸)的背景图像 。我知道这在以前是不可能的。 我发现您可以通过写入/va
我是一名优秀的程序员,十分优秀!