WMP

romainvv Messages postés 46 Date d'inscription lundi 19 mars 2007 Statut Membre Dernière intervention 22 mai 2009 - 20 mai 2009 à 15:41
romainvv Messages postés 46 Date d'inscription lundi 19 mars 2007 Statut Membre Dernière intervention 22 mai 2009 - 22 mai 2009 à 20:50
Bonjour,
Je cherche à créer un une application qui récupère la playlist en court du Lecteur Windows Media, j'ai cherché un code similaire et j'ai trouvé ceci : http://www.wiremote.com/ .
J'ai téléchargé le code source mais c'est en C#, je me demandais si il serait possible de faire l'équivalent de ses quelques lignes si dessous en c/c++
Merci



--------------------------------------------------


#region Using directives

using System;
using System.Text;
using System.Collections.Generic;
//using Microsoft.MediaPlayer.Interop;
using Microsoft.Win32;

#endregion


namespace WIremote
{
/// <summary>
/// Description of MediaPlayer.
/// </summary>
public class MediaPlayer
{
private WMPLib.WindowsMediaPlayerClass Player;
private WMPLib.IWMPPlaylist allPlaylists;
private WMPLib.IWMPPlaylistArray playlistArray;

private MediaFarm mediaFarm;
private List p_playlistIds = new List();

private Log log;

public enum playerStatus { Waiting, Play, Stop, Pause };

private enum modes { None, Audio, Radio, Video };
private enum infobarmodes { Normal, Change, Add }
private enum renderCommands {
SearchBar, PlayBar, InfoBar, InfoBarRadio,
SearchResult, MediaCollection, MediaCollections, RadioStation,
Main, MainWithSearch }

private renderCommands renderCommand;
private playerStatus status;
private modes mode;

private string idString;
private int idInt;
private bool idOkay;

private HtmlString html = null;
private infobarmodes infobarmode = infobarmodes.Normal;
private MediaTemplates myTemplates = null;


public MediaPlayer()
{
log = Log.Instance;

Player = new WMPLib.WindowsMediaPlayerClass();

log.Debug("MediaPlayer.cs", "MediaPlayer() - start");

if (Player == null)
{
Message.Instance.MessageBoxAndExit(
Message.messageCode.NoWindowsMediaPlayerConnectionMediaPlayer);
}

status = playerStatus.Waiting;
mode = modes.None;

ClearPlaylist();

playlistArray = Player.playlistCollection.getAll();
mediaFarm = new MediaFarm();

log.Debug("MediaPlayer.cs", "MediaPlayer() - end");
}

public void Play()
{
Player.controls.play();
Status = playerStatus.Play;
}

public void Resume()
{
Player.controls.play();
Status = playerStatus.Play;
}

public void Stop()
{
Player.controls.stop();
Status = playerStatus.Stop;
}

public void Previous()
{
Player.controls.previous();
}

public void Next()
{
Player.controls.next();
}

public void Pause()
{
Player.controls.pause();
Status = playerStatus.Pause;
}


//
// PLAYLIST
//

public void ClearPlaylist()
{
WMPLib.IWMPPlaylist newPlaylist = Player.mediaCollection.getByName("WIremote");

if (newPlaylist == null)
{
Player.currentPlaylist = Player.newPlaylist("WIremote");
Player.currentPlaylist.clear();
}
else {
Player.currentPlaylist = newPlaylist;
}
p_playlistIds.Clear();
}

public void AddToPlaylist(int var)
{
Player.currentPlaylist.appendItem(mediaFarm.GetItem(var));
p_playlistIds.Add(var);
}

private bool existInPlaylist(int id)
{
bool res = p_playlistIds.Contains(id);
return res;
}


...
...

8 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
20 mai 2009 à 15:59
Non, ce n'est pas possible. Le problème ne vient pas de la difficulté de traduction C# vers C++, mais le fait que les bibliothèques utilisées n'ont pas d'équivalent (ou pas les mêmes).
0
fregolo52 Messages postés 1114 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 4
20 mai 2009 à 16:06
euh ca utilise Microsoft.MediaPlayer.Interop, en général, qui dit interop dit ActivX, objet COM ... Donc plus facile a faire en cpp.
 
Les prototypes des méthodes des interfaces IWMPPlaylistArray,IWMPPlaylist me font bcp penser au cpp.
0
romainvv Messages postés 46 Date d'inscription lundi 19 mars 2007 Statut Membre Dernière intervention 22 mai 2009
20 mai 2009 à 17:30
Oui les protorypes telle que IWMPPlaylist existe dans wmp.h dans le framework sdk http://msdn.microsoft.com/en-us/library/bb821536.aspx
on le voit d'ailleurs bien ici : http://www.cppfrance.com/codes/LECTEUR-CLIPS-VIDEO_33111.aspx
mais le problème c'est que dans cette source (celle en c++), on utilise un WMP avec ActiveX que l'on greffe a la fenetre (si j'ai bien compris).
Dans l'exemple en C# il parvient je ne sais pas comment a récupérer l'application WMP déja créé.
Je pense que c'est du à cette ligne la : Player = new WMPLib.WindowsMediaPlayerClass(); mais je n'ai trouvé aucune documentation sur msdn en parlant :s
0
fregolo52 Messages postés 1114 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 4
20 mai 2009 à 17:39
Je n'en suis pas sure, mais a mon avis WindowsMediaPlayerClass vient de :
- using Microsoft.MediaPlayer.Interop; et
- d'une éventuelle référence ajoutée au projet c#.

tu n'as que ce bout de code c# ou tout le projet ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
romainvv Messages postés 46 Date d'inscription lundi 19 mars 2007 Statut Membre Dernière intervention 22 mai 2009
20 mai 2009 à 21:00
J'ai tout le projet, il a WMPLib.dll dedans aussi
0
romainvv Messages postés 46 Date d'inscription lundi 19 mars 2007 Statut Membre Dernière intervention 22 mai 2009
21 mai 2009 à 17:52
J'ai trouvé ceci qui utilise aussi WMPLib.ddl : http://www.cppfrance.com/codes/CPLUSPLUS-WIN32-API-UTILISATION-CONTROLES-ACTIVEX-SUR-DIALOGUES_25850.aspx
C'est bien joli et tout mais wmp.tlh et wmp.tli on l'air de source qui sont généré avec VC a partir de la dll, et j'ai aucune idée de comment l'utiliser
0
romainvv Messages postés 46 Date d'inscription lundi 19 mars 2007 Statut Membre Dernière intervention 22 mai 2009
22 mai 2009 à 20:30
J'ai compris l'utilité du .tli .tlh j'ai essayé de compiler le projet du monsieur, mais j'ai deux erreur :

_bstr_t WMPLib::IUPnPService_IWMPUPnPBinaryControlDual::GetCurrentState(void)' : fonction membre déjà définie ou déclarée

WMPLib::IUPnPService_IWMPUPnPBinaryControlDual::GetCurrentState' : redéfinition ; spécificateurs implementation_key différents

Les deux erreurs étant dans wmp.tlh, si j'essaye de mettre en commentaire le doublon, cela ne sert a rien car le fichier est a chaque fois regénéré à la compilation.
Quelqu'un a une idée ?
0
romainvv Messages postés 46 Date d'inscription lundi 19 mars 2007 Statut Membre Dernière intervention 22 mai 2009
22 mai 2009 à 20:50
J'ai trouvé il fallait wmp.dll de wmp 9, je pensais avoir une interface semblable au lecteur windows media mais non :s
0
Rejoignez-nous