Wíndows Media Player mit VB steuern

Hallo!

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“

Bin am verzweifeln!

Bitte helft mir!

Gruß, Phil

Hallo,

Habe bisher einen Verweis auf den WMP gesetzt
(C:\Windows\Sytem32\wmp.dll). Doch die Funktionen krieg ich
einfach nicht zum laufen.

der Mediaplayer bringt ein OCX mit. Nicht den verweis setzen, sondern das Steuerelement zur Werkzeugleiste hinzufügen, dann geht’s.

Gruß, Rainer

Hallo,

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“

Danke erst mal für eure Hilfe!

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.

Grüße, Phil

Hallo

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).

Tschau
Peter

Hallo,

Ich möchte auf den Player zugreifen, der im Explorer vom User
geöffnet wurde. Habe mich wohl etwas undeutlich ausgedrückt.

ich habe ein Beispiel gefunden, wo Jemand das mit Winamp macht, müßtest Du ‚nur‘ umschreiben.

http://www.activevb.de/tipps/vb6tipps/tipp0567.html

Gruß, Rainer

Hi!

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.

Gruß Phil

Hallo,

Schade! Das ist doch ein riesiger Aufwand oder?

ja.

Könnt ihr mir statdessen sagen wie des mit SendMessage geht?
Hab das noch nie gemacht.

Hab ich doch.

Gruß, Rainer

Hallo

Könnt ihr mir statdessen sagen wie des mit SendMessage geht?
Hab das noch nie gemacht.

Hab ich doch.

Sorry, hab ich übersehen! Danke! Werds mal veruchen.

Gruß Phil

Hi!

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:

http://www.vb-magazin.de/archiv/2575.htm

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.

Schöne Grüße, Phil

1 Like

Hi Phil,

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. :frowning:

Hab
allerdings nach LANGER suche doch noch was anderes gefunden:

http://www.vb-magazin.de/archiv/2575.htm

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! :smile:

Danke.

Gruß, Rainer