PDA

View Full Version : استفاده winamp در vb



aghel110
جمعه 31 تیر 1384, 02:18 صبح
با سلام
جطور برنامه (وی بی )بنویسم که مثلا اکر
اکر دکمه را در برنامه (وی بی ) فشار دادیم
winampاجرا شود
با دکمه دیکر خاموش شود
و تمام ایتم های winamp قابل ىسترسی باشه
و بتوان انها را کنترل کرد )play,pause,next,...)

بابک زواری
جمعه 31 تیر 1384, 11:54 صبح
یک dllهست که این کار رو برات میکنه
برای پیدا کردن اون googleاش کن

PalizeSoftware
جمعه 31 تیر 1384, 14:16 عصر
اولین بار من این کد رو برای پخش فایلهای MP3 توسط Winamp نوشتم. حدود 6 سال پیش.
حالا میذارم اینجا تا دوستان به نحوه کار آشنا بشن.

برای اینکه نرم‌افزار Winamp رو تحت کنترل خودتون داشته باشید باید چند مطلب رو بدونید:
1- این کار با نگارش پایین‌تر از 2.0 جواب می‌ده.
2- ابتدا باید هندل پنجره Winamp رو به این صورت بدست بیارید:


Winamp's window is found using:
hwnd_winamp = FindWindow("Winamp v1.x",NULL);


3- تمام عملکرد نرم‌افزار بصورت Message به این هندل ارسال می‌شه و خود Winamp جوری نوشته شده که به تمام پیام‌های WM_Command پاسخ می‌ده.
خب اینم کل کد که بصورت توابع جداگانه نوشته شده:


Public sm As Long
Global hamp As Long
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As Any) 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 PostMessage Lib "user32" Alias "PstMessageA" _
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Declare Function SendMessageTimeout Lib "user32" Alias "SendMessageTimeoutA" _
(ByVal hwnd As Long, _
ByVal msg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long, _
ByVal fuFlags As Long, _
ByVal uTimeout As Long, lpdwResult As Long) As Long

Const SMTO_BLOCK = &H1
Const WM_USER = &H400
Const WM_WA_IPC = WM_USER
Const WM_COMMAND = &H111
Const WinampPath = "I:\Program Files\Winamp\"

Public Function IsWinamp() As Boolean
hamp = FindWindow("Winamp v1.x", &H0&)

If hamp = 0 Then
Shell WinampPath & "winamp.exe", vbHide
hamp = FindWindow("Winamp v1.x", &H0&)
End If

If hamp = 0 Then
IsWinamp = False
Else
IsWinamp = True
End If

End Function

Public Function WinampGetTime()
Dim songpos As Long
SendMessageTimeout hamp, WM_USER, 0, 105, SMTO_BLOCK, 1000, songpos
WinampGetTime = songpos
End Function

Public Function WinampGetLen()
Dim songl As Long
SendMessageTimeout hamp, WM_USER, 1, 105, SMTO_BLOCK, 3000, songl
WinampGetLen = songl
End Function

Public Sub WinampPlayList()
SendMessageTimeout hamp, WM_USER, 0, 102, SMTO_BLOCK, 1000, sm
End Sub

Public Sub WinampSetFileToPlayList(fname As String)
ftemp = fname + Chr$(0)
For i = 1 To Len(ftemp)
SendMessageTimeout hamp, WM_WA_IPC, Asc(Mid$(ftemp, i, 1)), 100, SMTO_BLOCK, 1000, sm
Next
End Sub

Public Sub WinampClearPlayList()
SendMessageTimeout hamp, WM_USER, 0, 101, SMTO_BLOCK, 1000, sm
End Sub

Public Sub WinampPlayb()
SendMessageTimeout hamp, WM_COMMAND, 40045, 0, SMTO_BLOCK, 1000, sm
End Sub

Public Sub WinampPauseb()
SendMessageTimeout hamp, WM_COMMAND, 40046, 0, SMTO_BLOCK, 1000, sm
End Sub

Public Sub WinampStopb()
SendMessageTimeout hamp, WM_COMMAND, 40047, 0, SMTO_BLOCK, 1000, sm
End Sub

Public Sub WinampForward()
SendMessageTimeout hamp, WM_COMMAND, 40060, 0, SMTO_BLOCK, 1000, sm
End Sub

Public Sub WinampBackward()
SendMessageTimeout hamp, WM_COMMAND, 40061, 0, SMTO_BLOCK, 1000, sm
End Sub

Public Function WinampIsPlaying() As Boolean
SendMessageTimeout hamp, WM_USER, 0, 104, SMTO_BLOCK, 1000, sm
If sm = 1 Then
WinampIsPlaying = True
ElseIf sm = 0 Then
WinampIsPlaying = False
End If
End Function

Public Sub WinampSetVolume(v As Byte)
SendMessageTimeout hamp, WM_USER, v, 122, SMTO_BLOCK, 1000, sm
End Sub

Public Sub WinampJmpToTime(t As Long)
SendMessageTimeout hamp, WM_USER, t, 106, SMTO_BLOCK, 1000, sm
End Sub

Public Function WinampIsPaused() As Boolean
SendMessageTimeout hamp, WM_USER, 0, 104, SMTO_BLOCK, 1000, sm
If sm = 3 Then
WinampIsPaused = True
Else
WinampIsPaused = False
End If
End Function

'SendMessageTimeout hamp, WM_USER, <command param> ,<command>, SMTO_BLOCK, 1000, sm
'===============================PLAY WINAMP=====================
'SendMessageTimeout hamp, WM_USER, 0, 102, SMTO_BLOCK, 1000, sm
'==============================SHOW ABOUT WINAMP=====================
'SendMessageTimeout hamp, WM_COMMAND, 40041, 0, SMTO_BLOCK, 1000, sm
'===============================Show EQULIZER =====================
'SendMessageTimeout hamp, WM_COMMAND, 40036, 0, SMTO_BLOCK, 1000, sm


با کمی ذوق می‌تونید برنامه‌ای بنویسید که با اجرای فرامین از طریق میکروفن نرم‌افزار رو کنترل کنید

aghel110
جمعه 31 تیر 1384, 22:53 عصر
از شما تشکر میکنم
اما یه کم توضیح هم میخواستم
چون برنامه نویسی را تازه شروع کردم
باز هم از شما تشکر میکنم
و سوال دیگه ای که داشتم اینه
ایا چنین برنامه ای برای jetaudio
می توان نوشت(با توضیح ساده)

PalizeSoftware
جمعه 31 تیر 1384, 23:40 عصر
دوست عزیز چه توضیحی در ارتباط با برنامه می‌خواستید؟
اما در مورد JetAudio بعید می‌دونم اینکار عملی باشه. این فرامین رو که شما به Winamp ارسال می‌کنید مخصوص این نرم‌افزار در نظر گرفته شده و تعریف شده است.

aghel110
شنبه 01 مرداد 1384, 03:40 صبح
از شما دوست گرامی سپازگزارم مشکلم با دقت در برنامه حل شد .