Entwickler-Ecke
Multimedia / Grafik - Gestarteten Windows Media Player kontrollieren
rud - So 11.01.09 14:54
Titel: Gestarteten Windows Media Player kontrollieren
Hi
nach stundenlangem google hab ich nirgendwo eine brauchbare lösung für mein problem gefunden, deshalb wende ich mich jetzt an euch.
Ich möchte eine Konsolenanwendung schreiben, mit der ich den gestarteten WMP kontrollieren kann. Dafür habe ich die Typebib. "WMPLib_TLB" erstellt und wollte nun mit folgendem code auf den WMP zugreifen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| program Project1;
{$APPTYPE CONSOLE}
uses ActiveX, windows, WMPLib_TLB in '..\..\..\Imports\WMPLib_TLB.pas';
var wmp:TWindowsMediaPlayer; h:hWnd;
begin CoInitialize(nil); h := FindWindow('WMPlayerApp', 'Windows Media Player'); wmp.CreateParented(h); CoUnInitialize; end. |
das birngt mir zwar beim compilieren keinen fehler aber beim ausführen stürzt das programm mit folgendem Fehler ab:
ich hoffe ihr könnt mir weiterhelfen. mit itunes habe ich alles noch allein geschafft XD
mfg rud
Gausi - So 11.01.09 15:06
Hallo und :welcome: in der Entwickler-Ecke!
Probier es mal so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| var wmp:TWindowsMediaPlayer; h:hWnd;
begin CoInitialize(nil); h := FindWindow('WMPlayerApp', 'Windows Media Player'); wmp := TWindowsMediaPlayer.CreateParented(h); CoUnInitialize; end. |
rud - So 11.01.09 15:21
ja so hat es funktioniert XD
komischer weise hatte ich das selber schon mal so :autsch: :gruebel:
trotzdem geht der zugriff so noch nicht reibungslos.
Delphi-Quelltext
1:
| writeln(wmp.versioninfo); |
gibt zwar die richtige version aus und das programm läuft ohne fehler durch, aber
Delphi-Quelltext
1:
| writeln(wmp.currentMedia.name); |
gibt wieder einen fehler aus,obwohl gerade ein song gespielt wird :(
Quelltext
1: 2: 3:
| Exception EAccessViolation in Modul Project1.exe bei 0005BEB8. Zugriffsverletzung bei Adresse 0045BEB8 in Modul 'Project1.exe'. Lesen von Adres se 00000000. |
PS:
http://www.delphipraxis.net/post781146.html#781146
ist mir durchaus bekannt, aber damit kann man keine infos auslesen soweit ich weiß. und wie sieht es da mit Shuffle bzw. Repeat aus?
rud - Mo 12.01.09 14:01
und wie nehm ich dann bezug auf die laufende instanz?
kenn mich damit nicht so aus. bie itunes gibt es dafür ein COMInterface (
http://developer.apple.com/sdk/) was sich mit delphi leicht nutzen lässt:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71:
| program Project2;
{$APPTYPE CONSOLE}
uses ActiveX, iTunesLib_TLB in '..\..\..\Imports\iTunesLib_TLB.pas';
var itunes : iitunes; vol:integer;
begin CoInitialize(nil); iTunes := COitunesapp.Create;
if ParamCount > 0 then begin if paramstr(1) = '-playpause' then itunes.PlayPause else if paramstr(1) = '-stop' then itunes.Stop else if paramstr(1) = '-next' then itunes.NextTrack else if paramstr(1) = '-previous' then itunes.PreviousTrack else if paramstr(1) = '-quit' then itunes.Quit else if paramstr(1) = '-rand' then begin if itunes.CurrentPlaylist.Shuffle = false then itunes.CurrentPlaylist.Shuffle := true else itunes.CurrentPlaylist.Shuffle := false; end else if (paramstr(1) = '-repeat') AND (paramcount > 1) then begin if paramstr(2) = '-N' then itunes.CurrentPlaylist.SongRepeat := 0; if paramstr(2) = '-S' then itunes.CurrentPlaylist.SongRepeat := 1; if paramstr(2) = '-P' then itunes.CurrentPlaylist.SongRepeat := 2; end else if (paramstr(1) = '-volume') AND (paramcount > 1) then begin vol := itunes.SoundVolume; if paramstr(2) = '+' then inc(vol); if paramstr(2) = '-' then dec(vol); if vol > 100 then vol := 100; if vol < 0 then vol := 0; itunes.SoundVolume := vol; end else if paramstr(1) = '-mute' then begin if itunes.Mute = false then itunes.Mute := true else itunes.Mute := false; end else if paramstr(1) = '-current' then begin writeln(itunes.CurrentTrack.Name); end; end;
CoUnInitialize; end. |
genau die funktionen möchte ich jetzt auch für den WMP umsetzen. hat da jem. ne idee?
Benötigen tu ich dafür ein Projekt mit welchem ich mediaplayer vom handy aus steuern möchte.
mfg rud
jaenicke - Mo 12.01.09 14:39
Warum muss es denn der externe sein, warum baust du den nicht einfach in ein Projekt ein?
So einfach wird das nicht, die Standardfunktionen wie Pause und Weiter und so kann man natürlich machen, das geht ja meistens über die Multimediatasten, aber so einen Zugriff wird auf einen vom Benutzer gestarteten nicht machbar sein vermute ich.
Möglich wird das vermutlich mit einem Addon wie es der Windows Live Messenger zur Statusanzeige des aktuell gespielten Stücks benutzt.
rud - Mo 12.01.09 15:42
bei dem projekt an dem ich arbeite läuft auf dem rechner sein server (in java geschrieben), der befehle ausführt (z.b. *.bat starten oder exe starten). auf dem handy läuft der client, der die befehle an den server schickt. nun will ich damit die mediaplayer steuern und nicht einen neuen player starten. bei itunes hat das auch einwandfrei funktionirt und soweit ich weis ist es auch möglich die laufende instanz von winamp zu steuern.
wäre sehr schade wenn das beim WMP nicht gehn würde, bei itunes kann man sogut wie alles (sogar über JScript) machen.
Wenn es über ein addon mgl. sein könnte, könntest du mir das sagen wo ich informationen finde, wie ich ein solches add on erstelle? MSDN ist etwas zu umfangreich um da ohne viel arbeit was zu finden, deshabl frag ich mal schnell ;)
mfg rud
rud - Mo 12.01.09 20:29
hmm... C++ :? :?
und vor allem visual studio ... das is mir alles zu komplex. mal schaun ob ich was in delphi finde
edit: sieht leider nicht so aus als ob das so einfach wäre :(
naja dann muss ich den wmp leider auslassen
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!