Ich möchte eine ein Programm schreiben, das beim Drücken bestimmter Tasten den WMP steuert. Es soll die Funktionen Nächster/Vorheriger Track, Pause und Play geben. Die Tastendrücke werden auch schon problemlos erkannt, nur der Zugriff auf den WMP bereitet mir Kopfschmerzen.
Habe bisher einen Verweis auf den WMP gesetzt (C:\Windows\Sytem32\wmp.dll). Doch die Funktionen krieg ich einfach nicht zum laufen.
Probiere gerade mit folgendem Code herum:
Dim WMP as IWMPControls
Set WMP = New WindowsMediaPlayer
WMP.Next
klappt aber leider nicht.
Folgender Code funktioniert zwar, bringt mich aber nicht weiter:
Dim WMP as WindowsMediaPlayer
Set WMP = New WindowsMediaPlayer
WMP.openPlayer „C:\Test.wma“
also wenn ich da nicht was falsch verstehe, dann sind die beiden unten aufgefuehrten Codeteile in verschiedenen Funktionen codiert ?!
Also wenn du in der zweiten Funktion ein WM-Player Objekt erzeugst, und eine Datei laedst, funktionierts. Dann musst du das .Next auch auf das gleiche Objekt loslassen, denn du erzeugst jedesmal ein neues Objekt, das zweite kennt natuerlich die geladene Datei des ersten nicht, und ein leerer Player kann nicht einen Titel weiterspringen.
Codiere die Zeile
Dim WMP as IWMPControls
als globale Variable, dann erzeuge in einer Funktion (z.B. beimLaden des Programms) den Player
Set WMP = New WindowsMediaPlayer
dann sollte es funktionieren
Tschau
Peter
Probiere gerade mit folgendem Code herum:
Dim WMP as IWMPControls
Set WMP = New WindowsMediaPlayer
WMP.Next
klappt aber leider nicht.
Folgender Code funktioniert zwar, bringt mich aber nicht
weiter:
Dim WMP as WindowsMediaPlayer
Set WMP = New WindowsMediaPlayer
WMP.openPlayer „C:\Test.wma“
also wenn ich da nicht was falsch verstehe, dann sind die
beiden unten aufgefuehrten Codeteile in verschiedenen
Funktionen codiert ?!
Die zweite funktion benötige ich gar nicht, war nur ein Versuch, um zu testen ob auf diesem Weg überhaupt etwas funktioniert - mit Erfolg.
Also wenn du in der zweiten Funktion ein WM-Player Objekt
erzeugst, und eine Datei laedst, funktionierts. Dann musst du
das .Next auch auf das gleiche Objekt loslassen, denn du
erzeugst jedesmal ein neues Objekt, das zweite kennt
natuerlich die geladene Datei des ersten nicht, und ein leerer
Player kann nicht einen Titel weiterspringen.
Hmm, du beziehst dich zwar auf etwas anderes, aber im Prinzip hast du recht: Wenn ich den WMP als neues Objekt erzeuge ist der leer und kann auch nicht aufs nächste Lied springen, ich will aber eigentlich auf den schon bestehenden WMP zugreifen.
der Mediaplayer bringt ein OCX mit. Nicht den verweis setzen, sondern
das Steuerelement zur Werkzeugleiste hinzufügen, dann geht’s.
Dann habe ich aber einen Programm-Internen Player, der mit dem im Explorer nichts zu tun hat oder?
Ich möchte auf den Player zugreifen, der im Explorer vom User geöffnet wurde. Habe mich wohl etwas undeutlich ausgedrückt.
Ich möchte auf den Player zugreifen, der im Explorer vom User
geöffnet wurde. Habe mich wohl etwas undeutlich ausgedrückt.
also wenn das so ist wirst du um einige API-Funktionen nicht rumkommen, schau mal unter FindWindow ,FindWindowEx, GetWindowHandle etc. nach damit kann man ueber die Windows Fenster iterieren und den WMP suchen, dann hat man das WindowHandle und kann mit diesem weiterarbeiten (ewt. mit SendMessage o.Ae).
also wenn das so ist wirst du um einige API-Funktionen nicht
rumkommen, schau mal unter FindWindow ,FindWindowEx,
GetWindowHandle etc. nach damit kann man ueber die Windows
Fenster iterieren und den WMP suchen, dann hat man das
WindowHandle und kann mit diesem weiterarbeiten (ewt. mit
SendMessage o.Ae).
Schade! Das ist doch ein riesiger Aufwand oder?
Dachte das würde vieleicht auch so irgendwie gehn…
Hab da mal was mit ActiveX gemacht, da konnt ich dann einfach so drauf zugreifen:
-> Verweis auf die ActiveX
Dim ActiveX as MeineActiveX
Set ActiveX = New Klasse
ActiveX.Funktion
aber das wird wohl mit m WMP nicht gehn, schade!
Kenn mich mit sowas leider nicht so gut aus.
Könnt ihr mir statdessen sagen wie des mit SendMessage geht? Hab das noch nie gemacht.
Habs endlich hinbekommen!!!
Allerdings nicht mit dem Subclassing-Tipp. Woher soll ich denn die Konstanten kennen? Sind einfach nirgends zu finden! Hab allerdings nach LANGER suche doch noch was anderes gefunden:
Auf den ersten Blick nur Schrott, aber wenn man sich die Zeit nimmt und sämtliche fehlenden Zeilenumbrüche und Tabs einfügt bekommt man einen wunderschönen Source:
Private Declare Sub keybd\_event Lib "user32.dll" ( \_
ByVal bVk As Byte, \_
ByVal bScan As Byte, \_
ByVal dwFlags As Long, \_
ByVal dwExtraInfo As Long)
Private Const VK\_MEDIA\_PLAY\_PAUSE As Long = &HB3
Private Const VK\_MEDIA\_STOP As Long = &HB2
Private Const VK\_MEDIA\_NEXT\_TRACK As Long = &HB0
Private Const VK\_MEDIA\_PREV\_TRACK As Long = &HB1
Private Const KEYEVENTF\_KEYUP As Long = &H2
'###### ZUM FESTSTELLEN DER WINDOWS VERSION ################
Private Declare Function GetVersionEx Lib "kernel32" Alias \_
"GetVersionExA" (lpVersionInformation As \_ OSVERSIONINFO) As Long
Private Type OSVERSIONINFO
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long
szCSDVersion As String \* 128
End Type
Public Function IsWinNT() As Boolean
Dim osvi As OSVERSIONINFO
Dim intRet As Integer
osvi.dwOSVersionInfoSize = 148
osvi.szCSDVersion = Space$(128)
intRet = GetVersionEx(osvi)
If osvi.dwMajorVersion \> 4 Then IsWinNT = True
End Function
'###########################################################
Public Sub Media\_Play()
If IsWinNT = True Then
keybd\_event VK\_MEDIA\_PLAY\_PAUSE, 0, 0, 0
keybd\_event VK\_MEDIA\_PLAY\_PAUSE, 0, 0, KEYEVENTF\_KEYUP
Else
keybd\_event VK\_MEDIA\_PLAY\_PAUSE, 1, 0, 0
keybd\_event VK\_MEDIA\_PLAY\_PAUSE, 1, 0, KEYEVENTF\_KEYUP
End If
End Sub
Public Sub Media\_Stop()
If IsWinNT = True Then
keybd\_event VK\_MEDIA\_STOP, 0, 0, 0
keybd\_event VK\_MEDIA\_STOP, 0, 0, KEYEVENTF\_KEYUP
Else
keybd\_event VK\_MEDIA\_STOP, 1, 0, 0
keybd\_event VK\_MEDIA\_STOP, 1, 0, KEYEVENTF\_KEYUP
End If
End Sub
'Dieser Code simuliert das drücken der Media-Zusatztasten auf der Tastertur. Mit VK\_MEDIA\_NEXT\_TRACK und
'VK\_MEDIA\_PREV\_TRACK kann man das ganze noch erweitern.
So, ich hoffe alle die in zukunft nach sowas suchen landen irgendwann hier anstatt vergeblich das Netz zu durchforsten.
Habs endlich hinbekommen!!!
Allerdings nicht mit dem Subclassing-Tipp. Woher soll ich denn
die Konstanten kennen? Sind einfach nirgends zu finden!
Ja, sauschwer. Das Handle kann man sich beschaffen, indem man das Programm öffnet und mit GetForgoundWindow und GetWindowText den Text beschafft, im Programm kann man dann nach diesem Text suchen … umständlich.
Hab
allerdings nach LANGER suche doch noch was anderes gefunden:
Auf den ersten Blick nur Schrott, aber wenn man sich die Zeit
nimmt und sämtliche fehlenden Zeilenumbrüche und Tabs einfügt
bekommt man einen wunderschönen Source:
Klasse! Das ist eine Lösung, die mir gefällt, daraus mache ich am WE mal eine FAQ!