Hallo,
ich höre gerne mal Musik am Computer gerne auch mal beim zocken. Also dachte ich mir erstmal nimsmte die Hotkeys auf der Tastatur um nen lied zu skippen. Nur leider blocken immer mehr spiele diese Tasten, sodass ich angefangen habe mir nen Programm was auf WinLirc aufsetzt zu schreiben um meine Fernbedieung für sowas zu missbrauchen.
In letzter Zeit höre ich gerne mal Webradio über ClipInc und wenn mir nen Lied nicht gefällt muss ich erstmal ClipInc öffnen und dann auf nächstes Lied drücken.
Da dachte ich mir, steuerste das mal ähnlich wie bei Winamp Fern. Also Spy++ auf und los ging es. Scheinbar ist ClipInc sehr Grafisch und deswegen sind manche Knöpfe mehr oder weniger in einem Handle, genauso wie Play, Next, Last auf einem Sind. Da dachte ich mir egal, kannst ja Mausklicks an eine bestimmte Position per SendMessage senden. Pustekuche, scheinbar geht das nicht. Entweder mein Code ist falsch, meiner meinung nach ist der Funktionstüchtig, da er in Spy++ die gleichen aufrufe macht wie bei einem manuellen Klick.
Hat jmd eine Idee woran es liegt? Evtl ne andere Möglichkeit es fernzusteuern?
Hier der QuellCode
ich höre gerne mal Musik am Computer gerne auch mal beim zocken. Also dachte ich mir erstmal nimsmte die Hotkeys auf der Tastatur um nen lied zu skippen. Nur leider blocken immer mehr spiele diese Tasten, sodass ich angefangen habe mir nen Programm was auf WinLirc aufsetzt zu schreiben um meine Fernbedieung für sowas zu missbrauchen.
In letzter Zeit höre ich gerne mal Webradio über ClipInc und wenn mir nen Lied nicht gefällt muss ich erstmal ClipInc öffnen und dann auf nächstes Lied drücken.
Da dachte ich mir, steuerste das mal ähnlich wie bei Winamp Fern. Also Spy++ auf und los ging es. Scheinbar ist ClipInc sehr Grafisch und deswegen sind manche Knöpfe mehr oder weniger in einem Handle, genauso wie Play, Next, Last auf einem Sind. Da dachte ich mir egal, kannst ja Mausklicks an eine bestimmte Position per SendMessage senden. Pustekuche, scheinbar geht das nicht. Entweder mein Code ist falsch, meiner meinung nach ist der Funktionstüchtig, da er in Spy++ die gleichen aufrufe macht wie bei einem manuellen Klick.
Hat jmd eine Idee woran es liegt? Evtl ne andere Möglichkeit es fernzusteuern?
Hier der QuellCode
Code:
Private 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
Private Declare Function GetWindowLong Lib "user32.dll" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Const GWL_ID = -12
Private Declare Function PostMessage Lib "user32.dll" _
Alias "PostMessageA" ( _
ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long
Private Declare Function SendMessageLong& Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long)
Const WM_MOUSEMOVE = &H200
Const WM_LBUTTONDOWN = &H201
Const WM_LBUTTONUP = &H202
Const WM_SETCURSOR = &H20
Const WM_MOUSEACTIVATE = &H21
Private Sub Command1_Click()
Dim ClipIncHandle As Long
Dim ButtonHandle As Long
Dim ButtonID As Long
Debug.Print ""
Debug.Print "-<->-"
ClipIncHandle = FindWindowWild("*ClipInc Player", False)
Debug.Print "ClipInc Handle:" & ClipIncHandle
Do
ButtonHandle = FindWindowEx(ClipIncHandle, ButtonHandle, "#tobitControlBar", "")
ButtonID = GetWindowLong(ButtonHandle, GWL_ID)
If ButtonID = 125 Then
Call SendMessageLong&(ButtonHandle, WM_SETCURSOR, 10880862, 33619969)
Debug.Print PostMessage(ButtonHandle, WM_MOUSEMOVE, 0, MAKELPARAM(12, 12))
Call SendMessageLong&(ButtonHandle, WM_SETCURSOR, 2230216, 33619969)
Debug.Print PostMessage(ButtonHandle, WM_LBUTTONDOWN, 1, MAKELPARAM(12, 12))
Debug.Print PostMessage(ButtonHandle, WM_MOUSEMOVE, 1, MAKELPARAM(12, 12))
Debug.Print PostMessage(ButtonHandle, WM_LBUTTONUP, 0, MAKELPARAM(12, 12))
Debug.Print "Button Handle, ID:" & ButtonHandle & "," & ButtonID
End If
DoEvents
Loop Until ButtonHandle = 0
End Sub
Public Function MAKELPARAM(ByVal wLow As Long, ByVal wHigh As Long) As Long
MAKELPARAM = LoWord(wLow) Or (&H10000 * LoWord(wHigh))
End Function
Public Function LoWord(ByVal lDWord As Long) As Long
If lDWord And &H8000& Then
LoWord = lDWord Or &HFFFF0000
Else
LoWord = lDWord And &HFFFF&
End If
End Function