Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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 - не работает

--
Хух.. Надеюсь, остался понят. Извините за большое сообщение)

Ответить

  Ответы Всего ответов: 2  

Номер ответа: 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

Ответить

Номер ответа: 2
Автор ответа:
 i0ngunn3r



Вопросов: 11
Ответов: 30
 Профиль | | #2 Добавлено: 29.07.06 17:56
Спасибо, понял сам.

Private Sub Command1_Click()
msgbox np
End Sub

Function np() As String
Dim nplen As Long
nplen = GetWindowTextLength(FindWindow("Winamp v1.x", vbNullString))
np = String$(nplen + 1, Chr$(0))
nplen = GetWindowText(FindWindow("Winamp v1.x", vbNullString), np, nplen + 1)
End Function

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам