中了抖音的毒,设置小姐姐视频作为win10壁纸;
关键点:获取桌面壁纸句柄
环境依赖:Win10 64位
vlc 32位 播放器
- 获取桌面壁纸句柄
这里涉及到一个重要的api:
SendMessageTimeout(FindWindow('progman', nil), $052c, 0 ,0, SMTO_NORMAL, $3e8,nil);
利用Microsoft_Spy++查看
使用上面提到的api能达到的效果:
具体实现函数
-
//获取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图片,就只能贴张图片了
- 成品下载