thesnow 发表于 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("","","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("","","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:可以设置静音后最小化.
---------
全文完.

tianya1631 发表于 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/disparticle.php?boardName=NetResources&ID=41717
后来的C#的版本:
http://www.ycgker.com.cn/article.asp?id=305

kangtachen 发表于 2010-3-17 15:00:36

谢谢分享,认真看看

lpxx 发表于 2010-3-18 11:48:15

700G的MP3音乐?估计单听这些歌曲完也要数年吧?

sanmoking 发表于 2010-3-18 11:54:43

之前见过直接就有批量下载歌词的东西。。。用的资源好像就是千千x听的。。。

jaydancer 发表于 2010-4-9 16:33:40

路过,看看,帮顶

auto 发表于 2010-7-31 11:19:50

楼主的方法真强...
也在找批量下载歌词的方法,QQ baidu,千千,还有kugoo不知道哪个好点
baidu现在都做flash比较难找了

xyold1 发表于 2010-7-31 13:11:58

简单实用,支持一下

xyold1 发表于 2010-8-2 12:48:25

还有一新手都会的方法,将千千的全局热键打开
While 1

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

WEnd

thesnow 发表于 2010-8-2 13:17:29

还有一新手都会的方法,将千千的全局热键打开
While 1

       send("^!{right}")
      Sleep(10000 ...
xyold1 发表于 2010-8-2 12:48 http://www.autoitx.com/images/common/back.gif


    说了是装13帖,用热键不是很没面子...{:1_302:}

xyold1 发表于 2010-8-2 13:33:06

只看怎么实现了
没注意
但对新手来说可以学学API

fhefh 发表于 2011-3-19 16:46:12

学习思路 谢谢分享

l8532001 发表于 2011-12-6 10:19:49

支持一下,虽然看不懂。。。。

Ycxw2008 发表于 2011-12-6 17:04:19

楼主的文采 和 代码同样精彩
页: [1] 2
查看完整版本: 一个自动下歌词的思路