Страница: 1 |
|
Вопрос: Получение версии (или исполнителя/трека) Winamp'а
|
Добавлено: 29.07.06 16:21
|
|
Автор вопроса: i0ngunn3r
|
Снова здравствуйте :)
Необходимо в ВБ узнавать то, что в настоящее время играет в Winamp'е. Или, хотя бы, точную версию Винампа.
Как управлять винампом, я понял.
В одной статье (правда, по написанию плагинов в Дельфи) (ссылка - http://articles.org.ru/cfaq/index.php?qid=1271&frommostrecent=yes) написано, что для узнавания версии требуется использовать WM_USER (В ВБ это, как я понял, &H400).
Управление винампом (пауза там, следующий трек, остановка, изменение громкости и т.д.) осуществляется с помощью WM_COMMAND.
В общем.. Как можно получить хотяяя бы вееерсию? (С остальным попробую сам разобраться) Но именно через SendMessage..
Код:
Option Explicit
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Const ConstWinamp As String = "Winamp v1.x"
Enum WM
m_WM_COMMAND = &H111
m_WM_USER = &H400
End Enum
' Собственно, функция, служащая для упрощения команды sendmessage. hwnd берется сразу тут же, с помощью api-функции FindWindow
Function Execute(mWM As WM, ByVal l_Command, ByVal w_Command)
Execute = (SendMessage(FindWindow(m_Const_Winamp, vbNullString), mWM, l_Command, w_Command))
End Function
' кнопка на форме, отвечающая за нажатие кнопки play в винампе :)
' у меня работает..
Private Sub cmdPlay_Click()
' prev = 40044
' play = 40045
' pause = 40046
' stop = 40047
' next = 40048
Execute m_WM_COMMAND, 40045, 0
End
' а вот эта скотина никак не хочет пахать.
' судя по статье, должна выдаваться версия винампа.
' у меня в msgbox'е просто появляется "1". Если WM поставить m_wm_command, будет "0". Наверно, "1" все же лучше нуля :)
' Да и потом, в той же статье - опять же - грицца, что надо использовать wm_user.
Private Sub cmdGetVersion_Click()
MsgBox Execute(m_WM_USER, 0, 0)
End Sub
=========================================================
Даже получить версию не получается, видимо у меня руки кривые :(
Сейчас попробую не getversion, а что-нибудь другое...
135 0 Перезагружает winamp (например, для подключения нового плагина)
m_wm_user, 135, 0 - не работает
m_wm_user, 0, 135 - не работает
m_wm_command, 135, 0 - не работает
m_wm_command, 0, 135 - не работает
--
Хух.. Надеюсь, остался понят. Извините за большое сообщение)
Ответить
|
Номер ответа: 1 Автор ответа: i0ngunn3r
Вопросов: 11 Ответов: 30
|
Профиль | | #1
|
Добавлено: 29.07.06 16:49
|
Нашел.. Правда, у меня почему-то выдает №6-Overflow.
На строчке
"GetWindowText Wmp, strSong, Len(strSong)" =\
Option Explicit
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Private Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hwnd As Long) As Long
Private Sub Command1_Click()
Dim Wmp As Long, strSong As String, Buff As Long
'here Winamp v1.x is the classname of Winamp, and is different for
'different versions i suppose, so check the classname using Spy++
Wmp = FindWindow("Winamp v1.x", vbNullString)
If Wmp <> 0 Then
Buff = GetWindowTextLength(Wmp)
strSong = Space(Buff + 1)
GetWindowText Wmp, strSong, Len(strSong)
'when winamp plays a song, it includes "- Winamp" at
'the end, to eliminate it use
strSong = Replace(strSong, " - Winamp", vbNullString)
MsgBox "Song Playing: " & strSong
Else
MsgBox "Winamp is NOT open", vbOKOnly, "Error - Winamp not found"
End If
End Sub
Ответить
|
Страница: 1 |
Поиск по форуму