Delphi实现win10视频壁纸

中了抖音的毒,设置小姐姐视频作为win10壁纸;

关键点:获取桌面壁纸句柄

环境依赖:Win10 64位

                  vlc 32位 播放器

  • 获取桌面壁纸句柄

这里涉及到一个重要的api:

       SendMessageTimeout(FindWindow('progman', nil), $052c, 0 ,0, SMTO_NORMAL, $3e8,nil);

利用Microsoft_Spy++查看

Delphi实现win10视频壁纸

使用上面提到的api能达到的效果:

Delphi实现win10视频壁纸

具体实现函数

  • //获取win10系统中第二层窗口句柄(从最底层窗口开始)
    function  GetHwnd:hwnd;
    var tmp_hwnd,child_hwnd:hwnd;
        windowname,windoclasswname,child_windowname,child_windoclasswname:array[0..255] of char;
    begin
        //针对win10
        {
         桌面的结构搞清楚了。相当于图像处理中的四个图层,而且是透明图层。
      按类名由前至里的排序为:
      SysListView32
      SHELLDLL_DefView
      Progman
      #32769
    
        还记得我说的Progman和自己的两个子窗口分家的问题吗。它们分家的时机就是收受到一个message,一个微软就没有公开的message,连宏定义都没有。只要向Progman窗口发送这个消息,Progman就自动分家。相关代码如下:
        SendMessageTimeout(Program, 0x052c, 0 ,0, SMTO_NORMAL, 0x3e8,nullptr);
        }
        SendMessageTimeout(FindWindow('progman', nil), $052c, 0 ,0, SMTO_NORMAL, $3e8,nil);
        //遍历窗口  获取不含子窗体且父窗体是progman的 WorkerW窗体 句柄
        tmp_hwnd := GetWindow(GetDesktopWindow, GW_CHILD);
        while tmp_hwnd<>0 do
          begin
             winapi.Windows.GetClassName(tmp_hwnd,windoclasswname,256);   //获取窗体类名称
             winapi.Windows.GetWindowText(tmp_hwnd,windowname,256);       //获取窗体标题
             child_hwnd := winapi.Windows.GetWindow(tmp_hwnd,GW_CHILD);   //获取子窗体句柄
             if  (windoclasswname = 'WorkerW') and ( GetWindow(tmp_hwnd, GW_OWNER) = FindWindow('progman', nil)) then
              begin
                //showmessage('符合要求的WorkerW窗体句柄:'+inttostr(tmp_hwnd));
                result := tmp_hwnd;
              end;
             tmp_hwnd := GetWindow(tmp_hwnd, GW_HWNDNEXT);   //获取下一窗口句柄
          end;
    end;
  • 最终效果

不能上传gif图片,就只能贴张图片了

Delphi实现win10视频壁纸

Delphi实现win10视频壁纸

  • 成品下载

DELPHI--将视频设置为win10壁纸

 

上一篇:Delphi 与 DirectX 之 DelphiX(82): TDIB.DrawMandelbrot();


下一篇:20211108-03 Three Sum