[vb.net] Winamp fernsteuern - PInvokeStackImbalance

Klein0r

Erfahrenes Mitglied
Hallo zusammen!
Ich möchte Winamp ganz gern aus einer anderen Applikation heraus steuern. Dazu habe ich viele Beispiele in vb6 gefunden. Unter folgendem Link könnt ihr einsehen was für Code ich nutze (1 zu 1 kopiert - fehlerlos):
http://bwir.de/sonstiges/visualbasicwinamp

Allerdings habe ich nun mit folgender Meldung zu kämpfen:

Code:
PInvokeStackImbalance wurde erkannt.
Message: Ein Aufruf an die PInvoke-Funktion "Server!Server.Module1::SendMessage" 
hat das Gleichgewicht des Stapels gestört. Wahrscheinlich stimmt die verwaltete 
PInvoke-Signatur nicht mit der nicht verwalteten Zielsignatur überein. Überprüfen Sie, 
ob die Aufrufkonvention und die Parameter der PInvoke-Signatur mit der nicht 
verwalteten Zielsignatur übereinstimmen.

Der Fehler Tritt in dieser Zeile auf:
Code:
SendMessage(WA_hwnd, WM_COMMAND, WA_PLAY, 0)

Dazu habe ich schon folgendes im Internet gefunden:
http://msdn2.microsoft.com/de-de/library/0htdy0k3(VS.80).aspx

Aber daraus werde ich nicht so richtig schlau muss man sagen! Hoffe von euch hat jemand Rat.

Steuern möchte ich gerne Winamp 5.35 - mit dem Beispiel weiter unten auf der oben genannten Seite funktioniert alles Problemlos.

Was mache ich falsch!

lg
 
Hey,

Problem beteits gelöst mit anderem Code:
Code:
Imports System.Runtime.InteropServices

Public Class WinampControl

    Public Const WA_PREV As Int32 = 40044        'Previous track button
    Public Const WA_NEXT As Int32 = 40048        'Next track button
    Public Const WA_PLAY As Int32 = 40045        'Play button
    Public Const WA_PAUSE As Int32 = 40046       'Pause/Unpause button
    Public Const WA_STOP As Int32 = 40047        'Stop button
    Public Const WA_FADESTOP As Int32 = 40147    'Fadeout and stop
    Public Const WA_STOPTRACK As Int32 = 40157   'Stop after current track
    Public Const WA_FFW As Int32 = 40148         'Fast-forward 5 seconds
    Public Const WA_FRW As Int32 = 40144         'Fast-rewind 5 seconds
    Public Const WA_PLSTART As Int32 = 40154     'Start of playlist
    Public Const WA_PLEND As Int32 = 40158       'Go to end of playlist
    Public Const WA_OPENFILE As Int32 = 40029    'Open file dialog
    Public Const WA_OPENURL As Int32 = 40155     'Open URL dialog
    Public Const WA_INFOBOX As Int32 = 40188     'Open file info box
    Public Const WA_TIMEELAPSED As Int32 = 40037 'Set time display mode to elapsed
    Public Const WA_TIMEREMAIN As Int32 = 40038  'Set time display mode to remaining
    Public Const WA_TOGGLEPREF As Int32 = 40012  'Toggle preferences screen
    Public Const WA_OPENVISUAL As Int32 = 40190  'Open visualization options
    Public Const WA_OPENVIPLUG As Int32 = 40191  'Open visualization plug-in options
    Public Const WA_EXECVISUAL As Int32 = 40192  'Execute current visualization plug-in
    Public Const WA_TOGGLEABOUT As Int32 = 40041 'Toggle about box
    Public Const WA_AUTOSCROLL As Int32 = 40189  'Toggle title Autoscrolling
    Public Const WA_TOGGLEONTOP As Int32 = 40019 'Toggle always on top
    Public Const WA_WNDSHADE As Int32 = 40064    'Toggle Windowshade
    Public Const WA_PLSWNDSHADE As Int32 = 40266 'Toggle Playlist Windowshade
    Public Const WA_DBLSIZE As Int32 = 40165     'Toggle doublesize mode
    Public Const WA_TOGGLEEQ As Int32 = 40036    'Toggle EQ
    Public Const WA_TOGGLEPL As Int32 = 40040    'Toggle playlist editor
    Public Const WA_TOGGLEMW As Int32 = 40258    'Toggle main window visible
    Public Const WA_MINIBROWSE As Int32 = 40298  'Toggle minibrowser
    Public Const WA_EASYMOVE As Int32 = 40186    'Toggle easymove
    Public Const WA_VOLINCR As Int32 = 40058     'Raise volume by 1%
    Public Const WA_VOLDECR As Int32 = 40059     'Lower volume by 1%
    Public Const WA_SHUFFLE As Int32 = 40023     'Toggle Shuffle
    Public Const WA_REPEAT As Int32 = 40022      'Toggle Repeat
    Public Const WA_JMPTIME As Int32 = 40193     'Open jump to time dialog
    Public Const WA_JMPFILE As Int32 = 40194     'Open jump to file dialog
    Public Const WA_SKINSELEC As Int32 = 40219   'Open skin selector
    Public Const WA_CONFVISUAL As Int32 = 40221  'Configure current visualization plug-in
    Public Const WA_RELOADSKIN As Int32 = 40291  'Reload the current skin
    Public Const WA_CLOSE As Int32 = 40001       'Close Winamp
    Public Const WA_TENTRKBACK As Int32 = 40197  'Moves back 10 tracks in playlist
    Public Const WA_EDBOOKMRK As Int32 = 40320   'Show the edit bookmarks
    Public Const WA_BOOKMRKTRK As Int32 = 40321  'Adds current track as a bookmark
    Public Const WA_AUDIOCD As Int32 = 40323     'Play audio CD
    Public Const WA_LOADEQ As Int32 = 40253      'Load a preset from EQ
    Public Const WA_SAVEEQ As Int32 = 40254      'Save a preset to EQF
    Public Const WA_LOADPRESETS As Int32 = 40172 'Opens load presets dialog
    Public Const WA_AUTOLDPRSTS As Int32 = 40173 'Opens auto-load presets dialog
    Public Const WA_LOADDEFPRST As Int32 = 40174 'Load default preset
    Public Const WA_SAVEPRESET As Int32 = 40175  'Opens save preset dialog
    Public Const WA_AUTOLDSAVE As Int32 = 40176  'Opens auto-load save preset
    Public Const WA_DELPRESET As Int32 = 40178   'Opens delete preset dialog
    Public Const WA_DELAUTOLD As Int32 = 40180   'Opens delete an auto load preset dialog

    Private Const APP_WINAMP As String = "Winamp v1.x"
    Private Const WM_COMMAND As Int32 = &H111

    <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
    Public Shared Function FindWindow( _
        ByVal lpClassName As String, _
        ByVal lpWindowName As String) _
        As IntPtr
    End Function

    <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto, EntryPoint:="SendMessageA")> _
     Public Shared Function SendMessage( _
          ByVal hWnd As IntPtr, _
          ByVal uMsg As Int32, _
          ByVal wParam As Int32, _
          ByVal lParam As Int32) _
          As Boolean
    End Function

    Public Shared Function Exec(ByVal Command As Int32) As Boolean
        Dim [Handle] As IntPtr = FindWindow(APP_WINAMP, Nothing)
        If [Handle].Equals(IntPtr.Zero) Then
            Return False
        Else
            Call SendMessage([Handle], WM_COMMAND, Command, 0)
            Return True
        End If
    End Function

End Class

Also wer das mal braucht...
Bitteschön!

Quelle: http://www.visual-basic5.de/vbclassic/dotnet/winampplaysound.htm

Lg
 
Zurück