找回密码
 加入
搜索
查看: 18235|回复: 24

[原创] 一个自动下歌词的思路

 火... [复制链接]
发表于 2010-3-12 23:26:55 | 显示全部楼层 |阅读模式
作为蛋疼群的一员,正如sxd所说:不蛋疼/装13不足以在此群立足.
因此,此为蛋疼贴+装13+无水平贴.不喜请按下Ctrl+W


作为一个捡破烂的,硬盘里面垃圾多是必然的.
我搜集了700G的MP3音乐(APE啥的另算,低于192Kbps的直接丢弃,按专辑下,电骡上拖,0DAY上拉).
改ID3倒是好说,因为有现成的工具(即使里面没有任何ID3信息)自动匹配ID3与MP3.
下歌词才是一个问题.特别是我那蛋疼的网速下.
现在研究研究:


下歌词要解决几个问题:
1.歌词资源多.
2.下载速度快.
3.识别率高.

综合了一下认为某度旗下的产品<千千X听>适合下歌词.资源,速度,识别率都不是问题,按照MP3目录保存的功能也有了.

开刀:
Global $hWnd = ControlGetHandle("[class:TTPlayer_PlayerWnd]","","SkinButton11")
While 1
        If Not IsHWnd($hwnd) Then Exit
        ControlClick($hWnd,'','')
        Sleep(10000)
WEnd
依靠鼠标每10秒点击下一曲按钮来让<千千X听>下歌词.
问题来了.ControlClick会让处于后台的窗口置于前台,严重影响了观赏日本爱情动作片,欧美动物世界的心情.

作为一个控件,必须处理用户与程序的交互信息.例如:我点击了一个XX按钮,按钮会收到一个鼠标点击的信息.而这个带按钮的程序就必须对这类消息进行处理,如果不处理,这个按钮就没有任何意义.


由此,我参考MSDN文档(http://msdn.microsoft.com/en-us/library/bb775941(VS.85).aspx),发现有如下几个鼠标消息可以进行尝试:

BM_CLICK        单击
WM_LBUTTONDBLCLK        双击
WM_LBUTTONDOWN        鼠标左键按下
WM_LBUTTONUP        鼠标左键释放

怎么找到这些事件的常量值? Google:#define WM_LBUTTONUP


经过测试,BM_CLICK <千千X听>不工作,WM_LBUTTONDBLCLK不符合我们的要求.所以我们使用WM_LBUTTONDOWN和WM_LBUTTONUP

为什么控件不响应单击事件?因为要响应哪些事件是由控件本身定义的.而且控件还可以定义属于自己的消息.


再次改下代码:
Global $WM_LBUTTONDOWN        = 0x0201
Global $WM_LBUTTONUP         = 0x0202
Global $hWnd = ControlGetHandle("[class:TTPlayer_PlayerWnd]","","SkinButton11")
While 1
        If Not IsHWnd($hwnd) Then Exit
        _SendMessage($hWnd,$WM_LBUTTONDOWN)
        _SendMessage($hWnd,$WM_LBUTTONUP)
        Sleep(10000)
WEnd

Func _SendMessage($hWnd, $iMsg, $wParam = 0, $lParam = 0, $iReturn = 0, $wParamType = "wparam", $lParamType = "lparam", $sReturnType = "lresult")
        Local $aResult = DllCall("user32.dll", $sReturnType, "SendMessageW", "hwnd", $hWnd, "uint", $iMsg, $wParamType, $wParam, $lParamType, $lParam)
        If @error Then Return SetError(@error, @extended, "")
        If $iReturn >= 0 And $iReturn <= 4 Then Return $aResult[$iReturn]
        Return $aResult
EndFunc   ;==>_SendMessage
PS:可以设置静音后最小化.
---------
全文完.

评分

参与人数 1金钱 +100 收起 理由
afan + 100 果真蛋很疼

查看全部评分

发表于 2010-3-12 23:41:32 | 显示全部楼层
又一蛋疼的来看下,老潇的作品。。。。。学习学习思路,然后继续。。。。。。
发表于 2010-3-13 00:53:13 | 显示全部楼层
发点资料让大家看看,期待高手把代码改成AU3的!~~
最早版本:
http://code.google.com/p/lyriczilla/
之后的PHP版本:
http://forum.byr.edu.cn/wForum/d ... ources&ID=41717
后来的C#的版本:
http://www.ycgker.com.cn/article.asp?id=305
发表于 2010-3-17 15:00:36 | 显示全部楼层
谢谢分享,认真看看
发表于 2010-3-18 11:48:15 | 显示全部楼层
700G的MP3音乐?估计单听这些歌曲完也要数年吧?
发表于 2010-3-18 11:54:43 | 显示全部楼层
之前见过直接就有批量下载歌词的东西。。。用的资源好像就是千千x听的。。。
发表于 2010-4-9 16:33:40 | 显示全部楼层
路过,看看,帮顶
发表于 2010-7-31 11:19:50 | 显示全部楼层
楼主的方法真强...
也在找批量下载歌词的方法,QQ baidu,千千,还有kugoo不知道哪个好点
baidu现在都做flash比较难找了
发表于 2010-7-31 13:11:58 | 显示全部楼层
简单实用,支持一下
发表于 2010-8-2 12:48:25 | 显示全部楼层
还有一新手都会的方法,将千千的全局热键打开
While 1

       send("^!{right}")
        Sleep(10000)

WEnd
 楼主| 发表于 2010-8-2 13:17:29 | 显示全部楼层
还有一新手都会的方法,将千千的全局热键打开
While 1

       send("^!{right}")
        Sleep(10000 ...
xyold1 发表于 2010-8-2 12:48



    说了是装13帖,用热键不是很没面子...
发表于 2010-8-2 13:33:06 | 显示全部楼层
只看怎么实现了
没注意
但对新手来说可以学学API
发表于 2011-3-19 16:46:12 | 显示全部楼层
学习思路 谢谢分享
发表于 2011-12-6 10:19:49 | 显示全部楼层
支持一下,虽然看不懂。。。。
发表于 2011-12-6 17:04:19 | 显示全部楼层
楼主的文采 和 代码同样精彩
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-23 04:52 , Processed in 0.089324 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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