Autor Beitrag
Zfennn
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Mi 08.03.06 17:45 
Hallo,

ich weiß, es klingt bekannt, nur habe ich trotz fast zweiwöchiger Suche leider keine Antwort darauf gefunden. Bitte erst lesen und verstehen. Dies nur um den obligatorischen "Suche..."-Buttons vorzugreifen.

Ich möchte den Windows Media Player aus einem Delphi-Programm heraus steuern und Daten auslesen. Um genau zu sein folgende Funktionen: Play/Pause, Stop, Vor, Zurück, FastForward, FastRewind, Lautstärke hoch, Lautstärke runter selbst "drücken" und Infos zurückbekommen wie Titel, Artist, currentPosition (oder so).

Jetzt kommt aber das Knifflige: Ich möchte keinen eigenen Player bauen und auch nicht einen Player in meine Applikation "hiefen". Es geht nur um die Steuerung und das Auslesen eines WMP, der zur gleichen Zeit wie mein Programm läuft. Ich möchte bewusst den Windows Media Player (10) benutzen, obwohl ich weiß, dass es mit Winamp einfacher und bereits tausendmal realisiert ist.

Da ich mich nicht zu den Faulen oder Dummen zähle folgende Lösungsansätze:

Steuerung:
1. SENDMESSAGE: wäre elegant, wenn man wüsste, welche Befehle gesendet werden müssen. Da ich aber keine Applikation kenne, die es schon kann, kann ich auch nirgendwo spionieren (soviel zu xspy)
2. Multimedia-Tasten: Die Tasten auf den Multimedia-Keyboards können das schon - aber was tun die genau?

Auslesen:
1. "Rangieren" über Plugins: Ich habe ein Plugin für den WMP gefunden, dass Titel und Interpret in eine Textdatei schreibt. Diese kann man auslesen und bekommt so wenigsten einen Teil der gewünschten Informationen
2. Hier bin ich mir nicht ganz sicher: Schreibt der WMP seine Informationen nicht irgendwo hin? Wüsste man das, könnte man sie abfragen...

Lösung in .NET
Klar, recht einfach WMP.dll einbinden, aus der WMPlib IWMPControls wie play(), next(), currentPosition : double verwenden. Totschick! Dummerweise habe ich von den dort verwendeten Sprachen (noch) keinen Schimmer :(

Aber es muss doch möglich sein, die WMP.dll auch unter Delphi zu verwenden, oder? Wie mache ich das?

Adam Coulthard hat es offenbar schon in Delphi geschafft (hat ein Plugin für ein Desktop-Programm geschrieben). Also ist es nicht unmöglich. Leider antwortete er nich auf meine email...

Ich hoffe, ihr könnt mir hier weiterhelfen oder mich zumindest mit der Nase auf die richtige Fährte stumpen.

Vielen Dank vorab und viele Grüße
Zfennn
(wie man's spricht, mit 3x N)

_________________
...ja, genau.
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8548
Erhaltene Danke: 477

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Mi 08.03.06 18:04 
Hallo und :welcome: in der Entwickler-Ecke!

Zum Thema Steuerung: Sende doch einfach die Nachricht "Multimediataste gedrückt" an den WMP. Das geht recht einfach so:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
const APPCOMMAND_MEDIA_NEXTTRACK     = $B0000;
  APPCOMMAND_MEDIA_PREVIOUSTRACK = $C0000;
  APPCOMMAND_MEDIA_STOP          = $D0000;
  APPCOMMAND_MEDIA_PLAY_PAUSE    = $E0000;

//...

Sendmessage(MediaPlayerWindow, WM_APPCOMMAND, 0, APPCOMMAND_MEDIA_PLAY_PAUSE);
Du musst nur noch vorher das Handle des Player-Fensters herausfinden.

user profile iconZfennn hat folgendes geschrieben:
2. Multimedia-Tasten: Die Tasten auf den Multimedia-Keyboards können das schon - aber was tun die genau?
Wenn ich das nur genau wüsste, dann hätte ich auch ein Problem weniger ;-)

_________________
We are, we were and will not be.
Motzi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: Mi 08.03.06 21:14 
user profile iconZfennn hat folgendes geschrieben:
1. SENDMESSAGE: wäre elegant, wenn man wüsste, welche Befehle gesendet werden müssen. Da ich aber keine Applikation kenne, die es schon kann, kann ich auch nirgendwo spionieren (soviel zu xspy)

Ja, es wird immer wieder auf den X-Spy verwiesen und dabei geschrieben, dass dieser Messages loggen kann. Das kann er bis jetzt aber noch nicht. Das Feature ist/war geplant, aber ich habe bis jetzt noch nicht die Zeit gehabt es zu implementieren. Der Spy++ von Visual Studio kann es aber, falls du VS nicht hast google mal, vielleicht gibt es ihn auch irgendwo zum runterladen.
user profile iconZfennn hat folgendes geschrieben:
2. Multimedia-Tasten: Die Tasten auf den Multimedia-Keyboards können das schon - aber was tun die genau?

IMHO machen die auch nicht viel andres - der Treiber schaut einfach welche Programme laufen und schickt dann einfach die passende Message an dieses Programm.

Gruß, Motzi

_________________
gringo pussy cats - eef i see you i will pull your tail out by eets roots!
PLuS
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 98

Win XP, Suse Linux 9.0
D5 Standard, D2005 Personal; Perl; PureBasic
BeitragVerfasst: Do 11.05.06 14:21 
Zitat:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
const APPCOMMAND_MEDIA_NEXTTRACK     = $B0000;
  APPCOMMAND_MEDIA_PREVIOUSTRACK = $C0000;
  APPCOMMAND_MEDIA_STOP          = $D0000;
  APPCOMMAND_MEDIA_PLAY_PAUSE    = $E0000;


Gibt es irgendwo eine Liste mit den entsprechenden Hex-Werten?
Ich suche zum Beispiel noch die entsprechenden für die Lautstärkeregelung.

Bei MSDN hab ich nix gefunden.

_________________
Der letzte macht die Tür zu!
PLuS
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 98

Win XP, Suse Linux 9.0
D5 Standard, D2005 Personal; Perl; PureBasic
BeitragVerfasst: So 14.05.06 15:09 
*push*

Ich will nicht jeden Wert ausprobieren! :P

_________________
Der letzte macht die Tür zu!
Maniacmd
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 94

Windows XP
Delphi 7 Personal
BeitragVerfasst: Mo 05.06.06 17:53 
wie ist das oben gemeint du musst nur noch das handle heraus finden ich hab mit einem programm das handle herausgefunden und was mach ich jetzt damit???
PLuS
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 98

Win XP, Suse Linux 9.0
D5 Standard, D2005 Personal; Perl; PureBasic
BeitragVerfasst: Di 06.06.06 13:50 
Das Handle wirst du mit Suche in der Entwickler-Ecke FINDWINDOW finden.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
const APPCOMMAND_MEDIA_NEXTTRACK     = $B0000
  APPCOMMAND_MEDIA_PREVIOUSTRACK = $C0000
  APPCOMMAND_MEDIA_STOP          = $D0000
  APPCOMMAND_MEDIA_PLAY_PAUSE    = $E0000


myHandle := FindWindow('WMAPPHost''Windows Media Player');
if myHandle <> 0 then
  Sendmessage(myHandle, WM_APPCOMMAND, 0, APPCOMMAND_MEDIA_PLAY_PAUSE);

_________________
Der letzte macht die Tür zu!
Maniacmd
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 94

Windows XP
Delphi 7 Personal
BeitragVerfasst: Sa 10.06.06 13:28 
bei mir kommt bei dieser funktion immer 0 raus
kann es sein das du da irgedwas falsch geschrieben hast er scheint den WMP nicht zu finden.
Born-to-Frag
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1094

Win XP SP2, Win 2000 SP4
Delphi 7, 2k5
BeitragVerfasst: Sa 10.06.06 13:40 
Probiers mit der Klasse WMPlayerApp ;)

_________________
Theorie ist wenn man alles weiß, aber nichts funktioniert. Praxis ist wenn alles funktioniert, aber niemand weiß warum.
Microsoft vereint Theorie und Praxis: Nichts funktioniert und niemand weiß warum.
Maniacmd
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 94

Windows XP
Delphi 7 Personal
BeitragVerfasst: Sa 10.06.06 13:57 
sorry bin noch anfänger was genau meinst du jetzt damit???
Born-to-Frag
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1094

Win XP SP2, Win 2000 SP4
Delphi 7, 2k5
BeitragVerfasst: Sa 10.06.06 14:00 
ausblenden Delphi-Quelltext
1:
myHandle := FindWindow('WMAPPHost''Windows Media Player');					

mit
ausblenden Delphi-Quelltext
1:
myHandle := FindWindow('WMPlayerApp''Windows Media Player');					

ersetzen ;)

greetz

_________________
Theorie ist wenn man alles weiß, aber nichts funktioniert. Praxis ist wenn alles funktioniert, aber niemand weiß warum.
Microsoft vereint Theorie und Praxis: Nichts funktioniert und niemand weiß warum.
Maniacmd
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 94

Windows XP
Delphi 7 Personal
BeitragVerfasst: Sa 10.06.06 14:01 
achso ok danke
Taktaky
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25



BeitragVerfasst: Sa 22.09.07 01:21 
user profile iconBorn-to-Frag hat folgendes geschrieben:
ausblenden Delphi-Quelltext
1:
myHandle := FindWindow('WMAPPHost''Windows Media Player');					

mit
ausblenden Delphi-Quelltext
1:
myHandle := FindWindow('WMPlayerApp''Windows Media Player');					

ersetzen ;)

greetz


Das stimmt, aber wenn Windows Media Player als PlugIn spielt, dann funktioniert das ganze nicht.

WMP kann auch in Hintergrund z.B. in Webbrowser gespielt werden.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 22.09.07 01:27 
:shock: Und was bringt es jetzt, diesen uralten Beitrag wieder auszugraben? Hast du mal auf das Datum des letzten Posts geschaut?

Hast du dazu eine Frage, also willst du wissen, wie das dann geht, oder so? Weil sonst sehe ich da keinen Sinn darin, dieses alte Thema wieder auszugraben...

// EDIT: Ok, ich sehe schon, dass du dazu ein neues Thema erstellt hast mit der Frage ;-)
Taktaky
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25



BeitragVerfasst: So 23.09.07 13:00 
Titel: Wie Soll am besten der Video-HTML Code sein, damit immer der
Hallo,


den Code habe ich getestet und funktioniert, allerdings nur "Stop"
ausblenden Quelltext
1:
APPCOMMAND_MEDIA_STOP          = $D0000;					


Pause/Play funktionieren nicht !!!

Vielleicht liegt das an den Video-Code in HTML oder ?

Das Video z.B. in dieser Seite als Demo, konnte ich nicht steuern :

members.lycos.co.uk/...ms/test/wmp/test.htm

Obwohl ich den Code mit Hilfe von WinSpay generiert habe




Gruß