2010-05-18 6 views
0

J'écris une application Windows simple en C++, qui sera en mesure d'envoyer des commandes à windows media player. Mon problème est que je veux que mon application passe à la chanson précédente dans la playlist. IWMPControls :: previous() semble faire le travail, mais son comportement diffère de ce qui est écrit dans MSDN. En fait, cette fonction rembobine le média actuel au début, puis (si la position actuelle est inférieure à 2-3 secondes), il passe au morceau précédent.Comment faire pour Windows Media Player aller à la chanson précédente dans la playlist?

Je voudrais mettre en œuvre deux boutons différents (s'il vous plaît, ne me demandez pas pourquoi :)) - un pour le rembobinage au début, et un - pour passer à la chanson précédente. Existe-t-il un moyen facile de le faire via IWMPControls (ou toute autre interface COM WMP)?

p.s. Je pourrais gérer cela si je pouvais obtenir la position (index) de la chanson en cours dans la liste. Mais pour autant que je lis MSDN, il me semble qu'il n'y a pas de moyen facile d'obtenir l'index actuel de la playlist ...

Répondre

0

Eh bien, je pense que je l'ai compris. Vous pouvez forcer la chanson précédente en 1) en appelant d'abord IWMPControls :: put_currentPosition (0.0), puis en appelant IWMPControls :: previous().

Il peut y avoir quelques problèmes, car il semble qu'il faille un certain temps entre 1) et 2). La solution évidente est d'utiliser :: PostMessage() dans votre programme (NOT :: PostMessage to WMP), donc vous faites l'étape 1), puis PostMessage et, tout en traitant votre message, faites l'étape 2).

0

Je pense que la manière la plus simple de contrôler une application WMP depuis l'extérieur est d'envoyer des messages . Donc, vous vous en tenez à WinAPI de base et vous devez obtenir votre handle de fenêtre WMP. Après avoir récupéré son handle, il est facile de transférer certaines commandes à l'aide de messages Windows simples.

Fondamentalement, vous venez d'appeler SendMessage pour récupérer plus tôt HWND wmp_windows_handle. Les messages de contrôle sont généralement des messages WM_COMMANDwParam spécifie ce que vous voulez que votre lecteur fasse.

Par exemple, la commande Stop peut être transférée si vous spécifiez 0x00004979 en tant que wParam.

Utilisez le SDK Google ou Windows Media Player pour obtenir des informations plus détaillées sur ces codes de commande et vous trouverez certainement ce que vous cherchez.

Aussi pour mentionner, je ne suis pas compétent avec ce IWMPStuff vous décrit ci-dessus, donc si j'étais vous et je voulais une réponse concrète à ce sujet, je ferais probablement référence à son SDK.

+1

IWMPCore a pu être créé sans aucune fenêtre, il n'y a donc aucune poignée à recevoir. Quoi qu'il en soit, si j'envoie une commande "précédente", elle fera d'abord un retour en arrière, puis retournera à la chanson précédente, ce qui n'est pas la solution. – SadSido

+0

Vous avez dit que vous devez déterminer l'index de la chanson en cours dans la liste. Cela peut également être fait en utilisant la technique 'SendMessage'. Pas sûr de WMP, mais (par exemple, dans Winamp), c'est simple et décrit dans SDK. –