www.mikrocontroller.net

Forum: PC-Programmierung Frage zu Mediaplayer und COM


Autor: TheMason (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

da ich schon in einigen anderen Foren (CodeProject.com und
c-plusplus.de) nach einer Lösung für mein Problem gesucht (und gefragt)
habe, und leider noch keine passende Antwort gefunden habe hoffe ich das
mir hier vielleicht jemand helfen kann (wenn mir denn noch zu helfen
ist).

Und zwar :

Ich möchte über die COM-Schnittstelle erkennen ob der Windows Media
Player gestartet worden ist. COM deshalb da ich im zweiten Schritt mich
auf den Player connecten möchte, um dann Infos wie Titel, Spieldauer
usw. zu ermitteln.
Die Funktion mit der man erkennen kann ob Progamme mit
COM-Schnittstellen gestartet worden sind heißt GetActiveObject.
Das ganze Funktioniert auch Klasse mit Word und Excel. Nur der blöde
Media-Player will nicht und ich habe nicht den dunstesten Schimmer
einer blassen Ahnung warum das nicht klappen will. Ich habe es mit dem
Mplayer2.exe (bei Win2K std-mässig dabei), wie mit dem Windows Media
Player 9 bzw. 10 ausprobiert. Was es nicht sein kann sind falsche
CLSIDs oder ProgIDs, denn die habe ich aus der Registry.
Ein paar Side-Infos : Ich nutze VS 2003 .NET auf Win2k.
Was ich nicht möchte ist : Einen anderen Player nutzen müssen (Vorgabe)
und ich möchte kein Plugin schreiben müssen das im Media-Player laufen
muß um mir die Infos rauszuspucken.

Wie gesagt geht es mir nur darum das ich die Info haben will :
Mediaplayer läuft/läuft nicht und einen Pointer auf eine Klasse mit der
ich den Player ansteuern kann (aber den bekommt man automatisch mit
GetActiveObject).

Hat vielleicht jemand eine Idee ?!

Gruß
Rene

Autor: René König (king)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Die Funktion mit der man erkennen kann ob Progamme mit
> COM-Schnittstellen gestartet worden sind heißt GetActiveObject.

Das ist ein Irrtum. Mit GetActiveObject bekommst Du nur dir Objekte,
die zuvor von der Anwenung selbst per RegisterActiveObject oder
IRunningObjectTable::Register in die ROT eingetragen wurden. Bleibt das
aus, funktioniert GetActiveObject eben nicht, völlig unabhängig der
aktuell gestarteten OutOfProcess Server. Beim IE geht das übrigens auch
nicht mehr, irgendein SP hat das mal unterbunden.

Was den Player betrifft, gibt es keine dokumentierten Wege (lies: ist
mir noch nicht untergekommen), das von Dir gewünschte zu erreichen.
Da wirst Du schlechte Karten haben.

Davon mal ab: Der Player startet doch eigentlich sowieso nur einmal.
Damit sollte es doch reichen, einfach CoCreateInstance auf das
AppObject auszuführen. Dann wird Dir zwar ein neues Objekt erstellt,
aber es sollte der bereits laufende Player bedient werden. (<<-- diese
Aussage bitte mit Vorsicht geniessen, ich habe das nicht selbst
probiert).

Autor: TheMason (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@rene

erstmal vielen dank. ist seit tagen mal ne antwort mit der man was
anfangen kann. bin selbst noch nicht so tief in c++ und com drin.

mit dem rot leuchtet ein. nach dem motto : wenn sich eine app nicht in
der ROT registriert, kann man diese von außen nicht finden.
mit dem IE habe ich gerade auch herausgefunden. beim imaging ist es
dasselbe verhalten.
zum media player sag ich nur sch..........aade.. verdammt
sch......ade.
ich habe in dem codeproject.com forum die antwort erhalten das ich es
mal mit hooks probieren sollte. aber hooks dürften ungleich
komplizierter sein als COM und nicht versionsfest.
find ich ja echt toll das die den media-player als
super-duper-tolle-wurst dahinstellen und dann noch nichtmal die
einfachsten sachen möglich sind (ich weiß schon warum mir persönlich
der winamp lieber ist).
zum thema "mediaplayer nur einmal starten" eine kleine info an dich
zurück :
ich habe es ausprobiert (hatte auch gedacht das es so gehen würde, aber
es dudeln dann 2 media-player, einmal der manuell gestartete und der
über COM instanziierte)
also langsam weiß ich echt nicht mehr weiter (vielleicht weils wirklich
nicht weiter geht :-x)

gruß

rene

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.