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
> 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).
@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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.