winwarrior
Messages postés654Date d'inscriptionjeudi 3 avril 2003StatutMembreDernière intervention10 février 2009
-
14 févr. 2006 à 03:55
jmtlg -
3 déc. 2006 à 12:09
Bonsoir!
Voila, je suis en train de créer une dll qui récupere le nom des
musiques écoutées dans plusieurs lecteur de musiques (winamp.. media
player classic.. WMPxx). Mais j'ai un petit soucis pour récuperer le
titre des musiques dans Windows Media Player 10 (je trouve pas l'id du
controle).
Connaissez vous un outil ou une solution pour récuperer les ids des
controles dans des programmes compilés ? (du genre spy++ mais pour les
controles )
julienbj
Messages postés452Date d'inscriptionjeudi 4 décembre 2003StatutMembreDernière intervention19 décembre 200815 14 févr. 2006 à 11:51
Je ne suis pas sur de bien comprendre.
Tu veux récupérer l'identifiant d'un des controles de WMP? Qu'appelles-tu controle? Si ce sont les boutons, combos & co, oui, c'est faisable.
Je ne dis pas que la méthode soit super pratique, mais elle doit fonctionner.
Avec spy++, tu dois pouvoir récupérer le handle du composant (je viens de le tester, donc c'est meme sur).
Sans fermer la fenetre de WMP, fais toi un petit programme qui à partir du handle te récupères l'identifiant. Pour cela, tu peux utiliser la fonction GetWindowLong avec comme index: GWL_ID.
Ensuite, ben plus de probleme, tu as l'identifiant.
Recommence la manip une seconde fois pour vérifier que l'identifiant ne change pas, et voila, ce sera bon.
PAr contre entre version de WMP, je ne dis pas que cet identifiant soit constant.
Vive le C
Tchao
[mailto:julienbj@hotmail.com Savon]
DeAtHCrAsH
Messages postés2670Date d'inscriptionvendredi 25 janvier 2002StatutMembreDernière intervention 6 février 2013 14 févr. 2006 à 12:17
Essaye de te servir du nom de la classe. Ca doit etre de l'ATL quelques chose pour la ListView affichant la playlist.
Tu peux récuperer le nom de la classe avec Spy++ en pointant sur le composant listview de WMP.
wxccxw
Messages postés755Date d'inscriptionsamedi 15 mai 2004StatutMembreDernière intervention30 janvier 2011 14 févr. 2006 à 12:20
sinon avec RESHACK ou RESHACKER c'est un programme que tu trouvera sur google qui permet de decompiler les resource des programmes :)
tu peux donc recuperer leur ID :)
winwarrior
Messages postés654Date d'inscriptionjeudi 3 avril 2003StatutMembreDernière intervention10 février 20091 14 févr. 2006 à 12:56
Un controle.. et bien je suppose que WMP10 a comme les autres programme
des controles pour afficher certaines données (oui comme des boutons
etc..).
J'ai vu une source sur le site qui permet de controler WMP via les ids
des controles ... mais rien pour récuperer le titre de la chanson
jouée.. (il doit bien y avoir une technique pour les récuperer ces
ids..) msn le fait bien, ça doit être faisable mais comment...
wxccxw, je connais reshack, fonctionne pas avec WMP.
et pour le getwindowlong je vais essayer.. je suppose que je
récuperrais l'id du controle mais surement pas le titre de la musique.
julienbj
Messages postés452Date d'inscriptionjeudi 4 décembre 2003StatutMembreDernière intervention19 décembre 200815 14 févr. 2006 à 15:17
Pour le peu que je me souviens de WMP, il y a une listbox qui contient les titres des musiques.
Il te suffit de récupérer son identifiant (comme indiquer dans mon precedent message) puis de récupérer les titres qui sont dedans.Apres pour récupérer le titre qui est en train d'etre jouer, je ne sais pas trop, peut-etre celui qui a le focus mais je pense pas, faudrait regarder dans les données propres à chaque élément de la listview, celui qui doit etre joué doit avoir un attribut particulier de positionner.
Vive le C
Tchao
[mailto:julienbj@hotmail.com Savon]
julienbj
Messages postés452Date d'inscriptionjeudi 4 décembre 2003StatutMembreDernière intervention19 décembre 200815 14 févr. 2006 à 15:20
Apres vérif, semble plus etre une listview.
Par contre, elle est caché par défaut, donc faut l'afficher.
Donc la question que je me pose est: Est-ce qu'elle est juste cachée oualors est-elle inexistante quand on ne l'affiche pas?
Vive le C
Tchao
[mailto:julienbj@hotmail.com Savon]
winwarrior
Messages postés654Date d'inscriptionjeudi 3 avril 2003StatutMembreDernière intervention10 février 20091 14 févr. 2006 à 15:42
A gauche, au dessus de la visualisation, il y a le titre de la musique,
ça serait pas plus simple par la ? j'ai passé toute la nuit dessus.. il
doit y avoir une solution toute conne mais je vois pas laquelle...
julienbj
Messages postés452Date d'inscriptionjeudi 4 décembre 2003StatutMembreDernière intervention19 décembre 200815 14 févr. 2006 à 17:35
Non, je ne pense pas que ce soit faisable par la.
Je viens de regarder tous les messages que ce composant recoit, et si tu ne fais rien sur la fenetre, a part des WM_TIMER et des WM_PAINT, il ne recoit rien.
Donc le nom est changé dans le WM_PAINT (je crois).
Je vais rester sur l'idée de la listview a cote et regarder ce que je peux en tirer.
Vive le C
Tchao
[mailto:julienbj@hotmail.com Savon]
julienbj
Messages postés452Date d'inscriptionjeudi 4 décembre 2003StatutMembreDernière intervention19 décembre 200815 14 févr. 2006 à 18:07
Je m'éloigne peut-etre, mais je viens de regarder le contenu des dll du répertoire de WMP.
Et voila ce que je trouve dans npdsplay.dll: Java_NPDS_npDSJavaPeer_GetActiveMovie_stub.
Il y en a beaucoup d'autre du genre (utilise dumpbin /EXPORTS) pour les voir.
PAr contre, faut voir comment elles s'utilisent, pour l'instant je trouve pas, et le mot Java ne me dit rien que vaille, mais bon...
Vive le C
Tchao
[mailto:julienbj@hotmail.com Savon]
Une fois que tu as installé le SDK, va voir IWMPControls::get_currentItem et IWMPMedia::get_name.
Normalement, ça doit faire ce que tu veux.
Il y a quelques exemples qui explique comment en C++ faire pour utiliser ces interfaces.
Je regarde des que j'ai un petit peu de temps plus en détails.
Vive le C
Tchao
[mailto:julienbj@hotmail.com Savon]
winwarrior
Messages postés654Date d'inscriptionjeudi 3 avril 2003StatutMembreDernière intervention10 février 20091 14 févr. 2006 à 19:29
Ok, je suis en train de regarder tout ça ...
J'ai trouvé le IWMPMedia::get_name .. mais comment m'en servir maintenant :D
un getdlgitemtext(<hwnd principal wmp>, <control id trouvé
dans le sdk>,...) devrait suffir non ? je pense que je me suis
embrouillé quelque part (il serait peut-être temps que j'aille dormir).
en tous cas merci, je sens qu'on s'approche du but ^^
julienbj
Messages postés452Date d'inscriptionjeudi 4 décembre 2003StatutMembreDernière intervention19 décembre 200815 15 févr. 2006 à 00:03
Repose toi donc un peu, tu y verras plus clair apres.
Avec le SDK que je t'ai indiqué, doit etre faisable simplement, il faut juste bien comprendre comment il fonctionne.
Je me penche dessus demain apres-midi.
Vive le C
Tchao
[mailto:julienbj@hotmail.com Savon]
racpp
Messages postés1910Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201416 15 févr. 2006 à 03:59
Salut,
Spy++ permet de voir l'identificateur d'un controle. Il suffit de faire
un clic droit sur la ligne du controle (voir image plus haut), puis
choisir propriétés et regarder "Control ID" dans l'onglet
"General". Une autre manière de le trouver est de récupérer d'abord le
HWND du controle avec GetWindow() en parcourant toute l'arboressence.
On obtient ensuite l'identificateur avec GetWindowLong(). Si tu ne veux
utiliser cet identificateur que pour récupérer le texte du controle, il
est préférable d'utiliser directement son HWND avec GetWindowText().
Tout cela risque de ne pas donner de résultats car il parait que les
controles de Windows Media Player sont gérés différemment.
L'idée de DeAtHCrAsH est bonne mais insuffisante. Après avoir
obtenu le HWND de la ListView, on peut récupérer le texte de
l'item selectionné. Malheureusement, l'item sélectionné n'est pas
forcément celui qui est en cours de lecture.
Je pense que l'interface IWMPMedia ne peut être utilisée que dans un
programme faisant appel à l'activex WindowsMediaPlayer dont il a créé
une instance. Je crois qu'elle ne peut pas fonctionner avec les
instances de ce composant créées dans d'autres processus.
La meilleure solution est de pouvoir intercepter les événements générés
par Windows Media Player et les traiter pour récupérer le titre de la
chanson qui vient d'être chargée. J'espère que cela est possible.