Показать полную графическую версию : [решено] Управление Winamp из VB
Vovchick1
18-04-2009, 13:53
Вообщем есть клавиатура с мультимидийными клавишами (PLAY_PAUSE, STOP, PREV_TRACK, NEXT_TRACK), и Winamp v2.76, предполагается использовать данные клавиши для управления Winamp(ом). Программу я впринципе написал, и она вполне нормально функционирует, только есть одна проблемка, на клавиатуре PLAY и PAUSE висят на одной клавише, а в Winamp они разделены. Изтого что я нашёл в инете следует что можно с помощью конструкции скажем “W=SendMessage( FhWnd, WM_USER, 0, 104)” узнать текущее состаяние плеера “W=1” играет, ”W=3”пауза. Но у меня данная функция всегда возвращает 1. Ни кто не сталкивался с чем-то подобным может ответ я должен забирать с помощью какой-нибудь другой функции. Заранее благодарен всем!!!
Vovchick1, ставить Винамп более новой версии, оставлять её со встроенным глобальным хуком клавиш идущим в Winamp Agent, или оставив последнюю заменить исполняемый файл и зависимые библиотеке из директории с установленным v2.76
Впрочем если используется версия 2.76, вариант с установкой новой версии врятле интересен.
VB get Winamp status? (http://forums.winamp.com/printthread.php?threadid=293617) ответы получают как раз с помощью данной функции. Используют 5ю версию.
Я проверил на 5.5 - текущее состояние определяет корректно, на версии 2.76 не проверял.
Vovchick1
21-04-2009, 16:49
Admiral
Спасибо за ответ, можеш скинуть конструкцию с помощью которой определял состояние, может я неверно её записал.
Впрочем если используется версия 2.76, вариант с установкой новой версии врятле интересен.
Это точно, мне Winamp нужен исключительно для музыки, а начиная кажется с 3го он начал ещё и видео брать, короче некатит :)
Vovchick1 конечно.
Основан на коде из поста от QOAL (http://forums.winamp.com/showthread.php?postid=2364429#post2364429) по ссылке выше из предыдущего поста.
Private Declare Function FindWindow Lib "User32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SendMessage Lib "User32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Const WM_USER = &H400
Const WA_GETSTATUS = 104
Dim hWndWinAMP As Long
Function WinAMP_GetStatus() As String
Dim Status As Long
Status = SendMessage(hWndWinAMP, WM_USER, 0, WA_GETSTATUS)
Select Case Status
Case 1
WinAMP_GetStatus = "PLAYING"
Case 3
WinAMP_GetStatus = "PAUSED"
Case Else
WinAMP_GetStatus = "STOPPED"
End Select
End Function
Private Sub Command1_Click()
WAClass = "Winamp v1.x" 'Users can change winamp class with a command line IRRC, so yeah.
hWndWinAMP = FindWindow(WAClass, vbNullString)
If hWndWinAMP <> 0 Then
MsgBox WinAMP_GetStatus
Else
MsgBox "Could not find Winamp!", vbOKOnly, "WA Status"
End If
End Sub
Минимальные изменения в шапке, что б VB6 не ругался, и переназначил вызов проверки состояния на кнопку.
Кажется в 2.95, или чуть раньше в линейки 2.9х, появилась возможность смотреть видео. А для более ранних версий есть плугин позволяющие смотреть видео.
Не 3я версия это отдельная история, 5ка по шустрее будет. Мне Винамп на некотором видео (в основном *.wmv) показывает без тормозов где vlc подтормаживает.
Vovchick1
21-04-2009, 17:55
Admiral
Сеньк работает!!!! :)
Похоже вот вчём ошибка была, API Viewer выдал не то описание функции:
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Вместо:
Public Declare Function SendMessage Lib "User32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Vovchick1 рад что смог помочь.
Приятного прослушивания музыки.
Спасибо за обратную связь.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.