WMP

Signaler
Messages postés
46
Date d'inscription
lundi 19 mars 2007
Statut
Membre
Dernière intervention
22 mai 2009
-
Messages postés
46
Date d'inscription
lundi 19 mars 2007
Statut
Membre
Dernière intervention
22 mai 2009
-
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

Messages postés
3829
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
8 janvier 2021
114
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).
Messages postés
1107
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
10 juillet 2018
4
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.
Messages postés
46
Date d'inscription
lundi 19 mars 2007
Statut
Membre
Dernière intervention
22 mai 2009

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
Messages postés
1107
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
10 juillet 2018
4
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 ?
Messages postés
46
Date d'inscription
lundi 19 mars 2007
Statut
Membre
Dernière intervention
22 mai 2009

J'ai tout le projet, il a WMPLib.dll dedans aussi
Messages postés
46
Date d'inscription
lundi 19 mars 2007
Statut
Membre
Dernière intervention
22 mai 2009

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
Messages postés
46
Date d'inscription
lundi 19 mars 2007
Statut
Membre
Dernière intervention
22 mai 2009

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 ?
Messages postés
46
Date d'inscription
lundi 19 mars 2007
Statut
Membre
Dernière intervention
22 mai 2009

J'ai trouvé il fallait wmp.dll de wmp 9, je pensais avoir une interface semblable au lecteur windows media mais non :s