winampApi

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
|( () ( T |/| |(
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 211
Зарегистрирован: 01.10.2005 (Сб) 15:49

winampApi

Сообщение |( () ( T |/| |( » 13.09.2007 (Чт) 0:46

Код: Выделить всё

Option Explicit
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Public Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal HWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
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 SendMessageLong Lib "user32" Alias "SendMessageA" (ByVal HWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Declare Function SendMessageByString Lib "user32" Alias "SendMessageA" (ByVal HWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long

Public Function lngWinamp() As Long
    lngWinamp = FindWindow("Winamp v1.x", vbNullString)
End Function

Public Function strGettext(lngHwnd As Long) As String
    Dim ilngLength As Long
    Dim strBuffer As String
    ilngLength = SendMessageLong(lngHwnd, &HE, 0, 0)
    strBuffer = String(ilngLength, 0)
    Call SendMessageByString(lngHwnd, &HD, ilngLength + 1, strBuffer)
    strGettext = strBuffer
End Function

Public Sub winampGetFileInfo(Optional strFilepath As String, Optional strTitle As String, Optional strArtist As String, Optional strAlbum As String, Optional strYear As String, Optional strComment As String)
    Dim lngMpegFileInfo As Long
    Dim lngEdit1 As Long
    Dim lngEdit2 As Long
    Dim lngEdit3 As Long
    Dim lngEdit4 As Long
    Dim lngEdit5 As Long
    Dim lngEdit6 As Long
    Dim lngEdit7 As Long
    If lngWinamp = 0 Then Exit Sub
    PostMessage lngWinamp, 273, 40188, 0
    Do
        DoEvents
        lngMpegFileInfo = FindWindow("#32770", "MPEG file info box + ID3 tag editor")
        lngEdit1 = FindWindowEx(lngMpegFileInfo, 0, "Edit", vbNullString)
        lngEdit2 = FindWindowEx(lngMpegFileInfo, lngEdit1, "Edit", vbNullString)
        lngEdit3 = FindWindowEx(lngMpegFileInfo, lngEdit2, "Edit", vbNullString)
        lngEdit4 = FindWindowEx(lngMpegFileInfo, lngEdit3, "Edit", vbNullString)
        lngEdit5 = FindWindowEx(lngMpegFileInfo, lngEdit4, "Edit", vbNullString)
        lngEdit6 = FindWindowEx(lngMpegFileInfo, lngEdit5, "Edit", vbNullString)
    Loop Until lngEdit6 <> 0
    strFilepath = strGettext(lngEdit6)
    strTitle = strGettext(lngEdit1)
    strArtist = strGettext(lngEdit2)
    strAlbum = strGettext(lngEdit3)
    strYear = strGettext(lngEdit4)
    strComment = strGettext(lngEdit5)
    DoEvents
    PostMessage lngMpegFileInfo, &H10, 0, 0
End Sub

Почемуто strFilepath не оприделяеться. Подскажите, пожалуйста, в чём может быть проблема.
С=[::::::::::> ™ e398wallpapers.narod.ru

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 13.09.2007 (Чт) 6:43

Call SendMessageByString(lngHwnd, &HD, ilngLength + 1, strBuffer)
А ты для начала попробуй GetWindowText. Что возвратится?
А я все практикую лечение травами...

|( () ( T |/| |(
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 211
Зарегистрирован: 01.10.2005 (Сб) 15:49

Сообщение |( () ( T |/| |( » 13.09.2007 (Чт) 18:40

Twister:
Код: Выделить всё

Public Function strGettext(lngHwnd As Long) As String
    Dim ilngLength As Long
    Dim strBuffer As String
    ilngLength = GetWindowTextLength(lngHwnd)
    strBuffer = String(GetWindowTextLength(lngHwnd), 0)
    Call GetWindowText(lngHwnd, strBuffer, ilngLength + 1)
    strGettext = strBuffer
End Function

Ничего не возращяеться....:(
С=[::::::::::> ™ e398wallpapers.narod.ru

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 15.09.2007 (Сб) 9:49

Ну во-первых, на вскидку http://twister.orgfree.com/notes.php#n_readwithoutapi

Дальше: код-то твой кривоват. :wink: Я сейчас далеко от VB IDE, но думаю такой код будет работать:
Код: Выделить всё
Dim strBuffer As String * 256
Call GetWindowText(lngHwnd, strBuffer, 256)
А я все практикую лечение травами...

netdemon
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 179
Зарегистрирован: 04.09.2007 (Вт) 15:51

Сообщение netdemon » 18.09.2007 (Вт) 21:15

Twister писал(а):Ну во-первых, на вскидку http://twister.orgfree.com/notes.php#n_readwithoutapi

Дальше: код-то твой кривоват. :wink: Я сейчас далеко от VB IDE, но думаю такой код будет работать:
Код: Выделить всё
Dim strBuffer As String * 256
Call GetWindowText(lngHwnd, strBuffer, 256)


достаточно исправить
Код: Выделить всё
Dim strBuffer As String * 256

и заработает. :lol:


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 96

    TopList