VB.NET自制动态桌面

先看效果

在这里插入图片描述
完全在图标下面,占用资源也比较少。

介绍下原理

愿意自己动手试试更好,毕竟有人愿意分享出来#_#
首先我必须承认,原理上大部分是照搬的别人的,我用VB.NET实现了同样功能。这里我把来龙去脉理一理。
一次逛知乎,看到了这篇文章
https://zhuanlan.zhihu.com/p/37877070
看到后就觉得这个应该没有什么大问题,就差自己动手了,毕竟别人都实现了。
后面继续了解,找到了这个原理的出处
https://www.codeproject.com/Articles/856020/Draw-Behind-Desktop-Icons-in-Windows-plus
这个应该是目前公认的最早公开提出来实现原理的文章出处,感谢别人的无偿分享,自己也分享一下。
这个原理后续有很多人继续细解,我也不再赘述了,再推荐一个我觉得很详细的文章
https://jrhar.blog.csdn.net/article/details/79893134
我也在文下留言,再次感谢博主的详细讲解。个人水平不足,用了一些野路子做到了,大家自己可以做些改进一下,尽可能分享出来,为VB加把力。

Private Declare Function timeGetTime Lib "winmm.dll" () As Long '延时
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As Integer, lParam As String) As Long
Private Declare Function SetParent Lib "user32" (ByVal hWndChild As IntPtr, ByVal hWndNewParent As IntPtr) As IntPtr
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr 
Public Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hwnd1 As IntPtr, ByVal hWnd2 As IntPtr, ByVal lpsz1 As String, ByVal lpsz2 As String) As IntPtr
Public Declare Function GetNextWindow Lib "user32" Alias "GetWindow" (ByVal hwnd As IntPtr, ByVal wFlag As Integer) As IntPtr
Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As IntPtr, ByVal lpClassName As String, ByVal nMaxCount As IntPtr) As Long

这是本软件引用的所有API
每个的功能我也讲不好,大家自行搜索,我重点说下要注意的地方,VB6.0句柄好像是long类型,在.NET下要改为IntPtr类型

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
        ys(2000) '担心电脑相应不过来,延迟启动
        Dim WorkerWhwnd1 As IntPtr, WorkerWhwnd2 As IntPtr, Prgmhwnd As IntPtr, cname As New String(ChrW(0), 255) '这里不理解
        Prgmhwnd = FindWindow(vbNullString, "Program Manager")
        SendMessage(Prgmhwnd, 1324, 0, 0)
        ys(1500)
        WorkerWhwnd1 = GetNextWindow(Prgmhwnd, 3) '3向上查一个窗口,2向下查一个窗口
        WorkerWhwnd2 = GetNextWindow(WorkerWhwnd1, 3)
        GetClassName(WorkerWhwnd2, cname, 255)
        cname = Microsoft.VisualBasic.Left(cname, 7)
        SetParent(Me.Handle, Prgmhwnd)
        If cname = "WorkerW" Then SendMessage(WorkerWhwnd1, 16, 0, Nothing) '关闭指定窗口
End Sub

以上就可以将窗口程序放在桌面图标一下了。
如果置入浏览器就可以播放网页了,也很炫酷,但是内置的Webbrowser不好用,用第三方的消耗资源很严重,于是
我采用了Axwindowsmediaplayer,循环播放视频。
需要解决的问题依次有

  • 播放器隐藏控件
  • 循环播放闪烁一下

这些操作留给大家自己发挥吧。 不想自己动手的小伙伴直接下载源码吧,里面备注很详细。
源码下载地址
https://download.csdn.net/download/Pwwwqq/82194528

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值