VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2033|回复: 14

【问】如何用API不覆盖图标的方式在桌面播放视频?

[复制链接]

1

主题

6

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
发表于 2020-1-27 22:40:01 | 显示全部楼层 |阅读模式

回复

使用道具 举报

0

主题

46

帖子

23.00

积分

新手上路

Rank: 1

积分
23.00
发表于 2020-2-23 11:00:01 | 显示全部楼层
半透明显示

  

回复

使用道具 举报

1

主题

6

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
 楼主| 发表于 2020-2-29 19:00:02 | 显示全部楼层
晕死,不覆盖图标就是能直接点击图标的呀:)
回复

使用道具 举报

1

主题

6

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
 楼主| 发表于 2020-8-2 14:15:01 | 显示全部楼层
我想要的另一个效果是:

窗体永远在最前面,是半透明的,按最小化所有窗体快捷键时不会被最小化掉。
但是鼠标可以穿过它,点击到窗体后面的其他软件(当然,本窗体还是在最前面)
回复

使用道具 举报

0

主题

3

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-8-15 10:00:01 | 显示全部楼层
有很多播放器都有一种播放模式,就是"桌面播放",例如KMP,
他可以直接在桌面上半透明播放视频,就是图标下面,墙纸的上面,
此时在视频上点右键,弹出的不是播放器的菜单,而是桌面的菜单,(其实此时播放器根本就没有显示)
其实只是在播放的时候,将绘图层绘到桌面的hdc上了而已,而不是在播放器的hdc上播
要实现这个功能,前提是不是使用已有的控件来播放视频,而是需要自己手动将视频解码,
然后将本应该绘制到本窗体上的视频图像绘制到桌面上,

视频播放的基本顺序是 读取视频文件 ==>  解码  ==>  绘图及表述声音,
windows media player 控件已经将整个过程都封装起来了,所以如果使用wmp控件来播放视频,程序本身没有进行解码,程序自己也不知道当前正在播放的是什么画面,更无法将画面绘制在桌面上了.

要想达到楼主所说的,首先应尝试自己来解码视频文件,而不是靠播放器控件.
回复

使用道具 举报

0

主题

3

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-8-15 10:15:01 | 显示全部楼层
突然想到另一个方法,正如楼主所说的,
------------------
窗体永远在最前面,是半透明的,按最小化所有窗体快捷键时不会被最小化掉。
但是鼠标可以穿过它,点击到窗体后面的其他软件(当然,本窗体还是在最前面)
------------------
有很多桌面美化软件就是这样的,永远在最前的窗口鼠标却可以穿透他激活他下面的内容,不过这样又迎来另一个问题,就是视频图像是由硬件直接绘制的,而半透明窗口的效果仅仅只能让窗口半透明,而视频播放区域仍然还是不透明或者即便半透明后透出来的不是底下的内容而是黑色"或其他纯色",这个试验可以很容易的证实,例如当你打开了鼠标的投影效果,把鼠标移到视频上面后,会发现投影变得很难看,因为投影半透明的地方已经完全变成了黑色而不是应当透出来的视频图像,所以,除非是自己来解码绘制视频,要不然不管什么方法都达不到半透明的效果.这样又回到了上一遍回复..呵呵...

不要怪我太啰嗦了哈...我也是没事做,无聊才写这么多的.......
回复

使用道具 举报

0

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-8-15 10:30:01 | 显示全部楼层
很简单,SetParent到桌面.
回复

使用道具 举报

0

主题

4

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-8-15 10:45:01 | 显示全部楼层
楼上的太强了..........................-_-b

我怎么没想到呢~~~
回复

使用道具 举报

0

主题

4

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-8-15 11:00:01 | 显示全部楼层
Attribute VB_Name = "ModOnTop"
'*************************************************************************
'**模 块 名:ModOnTop
'**说    明:将窗体放到Z轴最上层,设置窗体透明度,鼠标是否能穿透
'**创 建 人:马大哈
'**日    期:2003年12月17日
'**修 改 人:
'**日    期:2006年11月8日
'**描    述:http://www.m5home.com
'**版    本:V1.4
'*************************************************************************
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As

Long
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long,

ByVal cy As Long, ByVal wFlags As Long) As Long

Private Const LWA_ALPHA = &H2
Private Const GWL_EXSTYLE = (-20)
Private Const WS_EX_LAYERED = &H80000
Private Const WS_EX_TRANSPARENT As Long = &H20&
Private Const SWP_NOSIZE& = &H1
Private Const SWP_NOMOVE& = &H2
Private Const HWND_TOPMOST = -1
Private Const HWND_NOTOPMOST = -2
Private Const HWND_BROADCAST = &HFFFF&
Private Const HWND_TOP = 0

Public Sub OnTop(ByVal tForm As Form, Optional ByVal Top As Boolean = True, Optional TouMing As Long = 255, Optional cMouse As Boolean = False)
'*************************************************************************
'**参 数 名:Top
'**说    明:是否将窗体放到Z轴最上层
'**参 数 名:TouMing
'**说    明:窗体透明度(WIN2000及以上有效)
'**参 数 名:cMouse
'**说    明:鼠标是否能穿透
'*************************************************************************
    Dim Ret As Long
   
    Ret = GetWindowLong(tForm.hwnd, GWL_EXSTYLE)
    Ret = Ret Or WS_EX_LAYERED
   
    If cMouse Then Ret = Ret Or WS_EX_TRANSPARENT
   
    SetWindowLong tForm.hwnd, GWL_EXSTYLE, Ret
   
    If TouMing < 0 Then TouMing = 0
    If TouMing > 255 Then TouMing = 255
   
    SetLayeredWindowAttributes tForm.hwnd, 0, TouMing, LWA_ALPHA
   
    If Top = True Then
      SetWindowPos tForm.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE
    Else
      SetWindowPos tForm.hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE
    End If
End Sub

*************************************************

这个只能让程序实现半透明,鼠标穿透,不响应WIN+D

但无法实现播放视频也半透明.一旦有半透明效果,视频就无法显示了.......
回复

使用道具 举报

1

主题

6

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
 楼主| 发表于 2020-8-15 12:45:01 | 显示全部楼层
加油啊同志们,看看如何实现桌面播放:)
首先肯定一点,绝对不能影响桌面正常的功能,
(绝对不用第三方控件,能不用第二方控件(MS-WMP?hehe)也最好?)
方式有多种,如何在图标后面播放?如何半透明在图标前面播放?

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表