Страница: 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 | 
 
		
			Поиск по форуму