Страница: 1 |
Страница: 1 |
Вопрос: Управление чужой прогой
Добавлено: 05.02.06 16:22
Автор вопроса: DaaGER | Web-сайт:
Я часто пользуюсь проигрывателем Лайт Эллоу. Программа сворачивается в трей и ни чем не мешает. Я хочу сделать прогу которая управляла бы ею, когда она свёрнута.
Короче чтобы постоянно не разворачивать проигрыватель а менять звук, врубать следующий трек и т.д. через мою прогу.
Ответы
Всего ответов: 6
Номер ответа: 1
Автор ответа:
DaaGER
ICQ: 329195567
Вопросов: 52
Ответов: 67
Web-сайт:
Профиль | | #1
Добавлено: 05.02.06 16:23
P.S. Кто поможет, если ему не трудно пусть пришлёт исходники на daager@mail.ru
Номер ответа: 2
Автор ответа:
Neco
ICQ: 247906854
Вопросов: 133
Ответов: 882
Web-сайт:
Профиль | | #2
Добавлено: 06.02.06 02:37
Глянь в хелпах, если там такое не предусмотрено, свяжись с создателями проги и посоветуй встроить. За разную муть типа эмуляции горячих клавиш лучше и не берись - лажово это как-то...
Номер ответа: 3
Автор ответа:
Fever
Вопросов: 60
Ответов: 808
Профиль | | #3
Добавлено: 06.02.06 18:00
SendKeys - встроено в VB и очень просто. Эмулирует клавиши.
Номер ответа: 4
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #4
Добавлено: 06.02.06 21:29
Чтобы в полной мере управлять чужой прогой, надо ее сделать своей А для этого нет ничего лучше как написать dll не ActiveX внедрить ее в процесс и управлять/изменять что душе угодно. Одно плохо, dll должна быть написана не на VB
Номер ответа: 5
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #5
Добавлено: 06.02.06 21:30
PS
В некоторых случаях, как например в WinAmp, можно обойтись SendMessage'ем...
Номер ответа: 6
Автор ответа:
Alex
Вопросов: 13
Ответов: 26
Web-сайт:
Профиль | | #6
Добавлено: 09.02.06 15:12
Главное получить хендл и коды комманд.
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, _
lParam As Any _
) As Long
Private Declare Sub Sleep Lib "kernel32" ( _
ByVal dwMilliseconds As Long _
 
'system
Private Const WM_USER = &H400
Private Const WM_COMMAND = &H111
'winamp
Private Const WM_Raise_Volume = 40058 'increase 1%
Private Const WM_Lower_Volume = 40059 'decrease 1%
Private Const WM_Close_Winamp = 40001
Private Const WM_Previous = 40044
Private Const WM_Next = 40048
Private Const WM_Play = 40045
Private Const WM_Pause_Unpause = 40046
Private Const WM_Stop = 40047
Private Const WM_Toggle_Shuffle = 40023
Private Const WA_SETVOLUME = 122
Dim Response As String
Dim Connections As Long
Private Sub Form_Load()
wnsServer(0).Protocol = sckTCPProtocol
wnsServer(0).LocalPort = 806
wnsServer(0).Listen
End Sub
Private Sub wnsServer_ConnectionRequest(index As Integer, ByVal requestID As Long)
If index = 0 Then
Connections = Connections + 1
Load wnsServer(Connections) 'Load New control
wnsServer(Connections).LocalPort = 0
wnsServer(Connections).Accept requested
end if
DoEvents
End Sub
Private Sub wnsServer_DataArrival(index As Integer, ByVal bytesTotal As Long)
Dim hWnd As Long
hWnd = FindWindow("Winamp v1.x", vbNullString)
'если к нам подконектились и если у нас присутствует
'винамп, ждем команду для отправки
If bytesTotal <> 0 Then
wnsServer(index).GetData Response 'получаем данные
'если нет винампа то можно только выходить
If hWnd = 0 Then
Exit Sub
End If
'обработка поступившей команды
'Next Track
If InStr(1, Response, "next", vbTextCompare) <> 0 Then
SendMessage hWnd, WM_COMMAND, WM_Next, vbNull
Exit Sub
End If
'Previous Track
If InStr(1, Response, "previous", vbTextCompare) <> 0 Then
SendMessage hWnd, WM_COMMAND, WM_Previous, vbNull
Exit Sub
End If
'Play
If InStr(1, Response, "play", vbTextCompare) <> 0 Then
SendMessage hWnd, WM_COMMAND, WM_Play, vbNull
Exit Sub
End If
'Stop
If InStr(1, Response, "stop", vbTextCompare) <> 0 Then
SendMessage hWnd, WM_COMMAND, WM_Stop, vbNull
Exit Sub
End If
'Shuffle
If InStr(1, Response, "shuffle", vbTextCompare) <> 0 Then
SendMessage hWnd, WM_COMMAND, WM_Toggle_Shuffle, vbNull
Exit Sub
End If
'Pause/UnPause
If InStr(1, Response, "pause", vbTextCompare) <> 0 Then
SendMessage hWnd, WM_COMMAND, WM_Pause_Unpause, vbNull
Exit Sub
End If
'Close
If InStr(1, Response, "close", vbTextCompare) <> 0 Then
SendMessage hWnd, WM_COMMAND, WM_Close_Winamp, vbNull
Exit Sub
End If
'Volume inc
If InStr(1, Response, "+", vbTextCompare) <> 0 Then
If Response = "+" Then Response = "+1"
Volume hWnd, CInt(Mid$(Response, InStr(1, Response, "+" + 1, 3)), 1
Exit Sub
End If
'Volume dec
If InStr(1, Response, "-", vbTextCompare) <> 0 Or
InStr(1, Response, "0", vbTextCompare) <> 0 Then
If Mid$(Response, InStr(1, Response, "-" + 1, 3) < "A" Then
If Response = "-" Then Response = "-1"
Volume hWnd, CInt(Mid$(Response, InStr(1, Response, "-" + 1, 3)), -1
End If
End If
End If 'bytes
End Sub
Private Sub Volume(hWnd As Long, percent As Integer, incdec As Long)
Dim i As Long
For i = 0 To percent - 1
Select Case incdec
Case -1
SendMessage hWnd, WM_COMMAND, WM_Lower_Volume, vbNull
Case 1
SendMessage hWnd, WM_COMMAND, WM_Raise_Volume, vbNull
End Select
Next i
End Sub
Private Sub wnsServer_SendComplete(index As Integer)
Sleep 1000
CloseSocket index
End Sub
'Само закрытие сокета и выгрузка его из памяти.
Private Sub CloseSocket(index As Integer)
wnsServer(index).Close
Unload wnsServer(Connections)
Connections = Connections - 1
DoEvents
End Sub
Пример организации через TCP протокол. А вообще где то была хорошая статья на codenet как написать плагин под WinAmp на VB