求助求助~如何让Au3判断软件的音频状态
本帖最后由 飘云 于 2010-11-24 19:27 编辑通过仿造jienis的超快超简单听音乐,我也写了个,差不多就是换个网址罢了(http://www.songtaste.com/radio.php),但是遇到个问题,就是此网址的音乐文件有些会读取不到或读取困难,这就会导致一直缓冲,我想要在它缓冲不下去或者缓冲实在太慢的时候,自动让程序点击“下一首”,但怎么让程序知道这个编译后的程序中的音频状态呢,因为此网页用的是WM播放器。初步构想是监视文字,当要缓冲时会出现[缓冲处理:完成 X%]的字样,这时开始计时,超过规定时限就换歌,不过能不能直观的判断这个软件的音频状态呢,无音频输出多少时间后换歌,这样更方便。。。。
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include<IE.au3>
Opt("TrayOnEventMode",1)
Opt("TrayMenuMode",1)
Opt("GUIOnEventMode", 1)
TraySetOnEvent(-13,"mini")
$Form1 = GUICreate("SongTaste 用音乐倾听彼此",350,516,-1,-1)
GUISetBkColor(0x5C6C7C,$Form1)
$oIE = ObjCreate("Shell.Explorer.2")
$GUIActiveX= GUICtrlCreateObj($oIE,-3000,0,390,560)
$txt=GUICtrlCreateLabel( "正在载入播放器,请稍候...",70,200,240,30,-1,$WS_EX_TRANSPARENT)
GUICtrlSetColor(-1,0x9DB9EB)
GUICtrlSetFont(-1,12,800)
GUISetState()
GUISetOnEvent($GUI_EVENT_CLOSE, "main")
GUISetOnEvent($GUI_EVENT_MINIMIZE, "main")
_IENavigate($oIE,"http://www.songtaste.com/radio.php")
GUICtrlSetState($txt,$GUI_HIDE)
GUICtrlSetPos($GUIActiveX,-7,0,390,560)
Dim $mini = 0
While 1
sleep(200)
WEnd
Func main()
Switch @GUI_CtrlId
Case $GUI_EVENT_CLOSE
Exit
Case $GUI_EVENT_MINIMIZE
mini()
EndSwitch
EndFunc
Func mini()
if $mini = 0 Then
GUISetState (@SW_HIDE,$Form1)
$mini = 1
Else
GUISetState (@SW_SHOW,$Form1)
$mini = 0
endif
EndFunc
现在看来这个文本的获取也不知道怎么获取了,那串文本是WMP的一部分,怎么才能在后台获取到那段文本呢。。。。 不好意思,不知道,帮顶,我也很想知道 . 支持!!! 本帖最后由 shenrenba 于 2010-11-24 12:07 编辑
#include <INet.au3>
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
Opt("GUIOnEventMode", 1)
Global $musicdq = 0 ;当前播放的音乐
Global $musiczs = 1 ;音乐总数目
$Form1 = GUICreate("TEST", 623, 449, 192, 124)
GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
$Label1 = GUICtrlCreateLabel("", 72, 40, 388, 33)
$Button1 = GUICtrlCreateButton("上一首", 72, 104, 113, 41)
GUICtrlSetOnEvent(-1, "Button1Click")
$Button2 = GUICtrlCreateButton("下一首", 311, 103, 113, 41)
GUICtrlSetOnEvent(-1, "Button2Click")
GUISetState(@SW_SHOW)
$musicinfo = _Source("http://www.songtaste.com/radio.php")
play($musicinfo[$musicdq], $musicinfo[$musicdq], $musicinfo[$musicdq])
While 1
Sleep(100)
WEnd
Func Button1Click()
If $musicdq - 1 > 0 Then
$musicdq -= 2
play($musicinfo[$musicdq], $musicinfo[$musicdq], $musicinfo[$musicdq])
EndIf
EndFunc ;==>Button1Click
Func Button2Click()
If $musicdq + 1 <= $musiczs Then play($musicinfo[$musicdq], $musicinfo[$musicdq], $musicinfo[$musicdq])
EndFunc ;==>Button2Click
Func Form1Close()
Exit
EndFunc ;==>Form1Close
Func play($name, $people, $path)
GUICtrlSetData($Label1, "歌曲名:" & $name & "---歌手:" & $people)
$musicdq += 1
If ProcessExists("wmplayer.exe") Then ProcessClose("wmplayer.exe")
Sleep(1000)
Run(@ProgramFilesDir & "\Windows Media Player\wmplayer.exe " & $path)
EndFunc ;==>play
Func _Source($url)
$source = _INetGetSource($url)
$sr = StringRegExp($source, ', "([^"]*)', 3)
Local $musicinfo
For $i = 0 To UBound($sr) - 1 Step 5
$musicinfo = $sr[$i]
$musicinfo = $sr[$i + 1]
$musicinfo = $sr[$i + 4]
$musiczs += 1
Next
Return $musicinfo
EndFunc ;==>_Source 建议调用楼上的正则提取出歌曲列表,然后查看这个帖子中的WMP相关操作自己写播放器。
http://www.autoitx.com/forum.php?mod=viewthread&tid=2764&highlight=wmp 本帖最后由 飘云 于 2010-11-24 15:05 编辑
感谢楼上两位,对于调用wmplaer.ocx我有点了解,通过wmplaer.ocx的接口playstate也能获取播放状态,当然这么做就要提取出歌曲列表了,但是如果歌曲列表被加密了呢,或者这网页不是依靠wmp播放的呢,如果是flash呢,那么又怎么让程序自动判断情况呢,所以我最希望的还是能检测本地软件的音频输出状态 没人回了,顶一下帖子,期待高人
页:
[1]