Id controles

winwarrior Messages postés 654 Date d'inscription jeudi 3 avril 2003 Statut Membre Dernière intervention 10 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 )



merci de votre aide

win

[irc://irc.chatown.org/warriorhouse irc.chatown.org]

24 réponses

julienbj Messages postés 452 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 décembre 2008 15
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]
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Derniè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.

Shell
0
wxccxw Messages postés 755 Date d'inscription samedi 15 mai 2004 Statut Membre Dernière intervention 30 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 :)
0
wxccxw Messages postés 755 Date d'inscription samedi 15 mai 2004 Statut Membre Dernière intervention 30 janvier 2011
14 févr. 2006 à 12:21
mais sinon reste sur l'idee de Spy++
0

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

Posez votre question
wxccxw Messages postés 755 Date d'inscription samedi 15 mai 2004 Statut Membre Dernière intervention 30 janvier 2011
14 févr. 2006 à 12:22
0
wxccxw Messages postés 755 Date d'inscription samedi 15 mai 2004 Statut Membre Dernière intervention 30 janvier 2011
14 févr. 2006 à 12:23
0
winwarrior Messages postés 654 Date d'inscription jeudi 3 avril 2003 Statut Membre Dernière intervention 10 février 2009 1
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.



merci :p


win

[irc://irc.chatown.org/warriorhouse irc.chatown.org]
0
julienbj Messages postés 452 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 décembre 2008 15
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]
0
julienbj Messages postés 452 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 décembre 2008 15
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]
0
winwarrior Messages postés 654 Date d'inscription jeudi 3 avril 2003 Statut Membre Dernière intervention 10 février 2009 1
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...



@bientot

win

[irc://irc.chatown.org/warriorhouse irc.chatown.org]
0
julienbj Messages postés 452 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 décembre 2008 15
14 févr. 2006 à 16:09
Ou ca? Je la vois pas sur mon WMP.

Vive le C
Tchao
[mailto:julienbj@hotmail.com Savon]
0
winwarrior Messages postés 654 Date d'inscription jeudi 3 avril 2003 Statut Membre Dernière intervention 10 février 2009 1
14 févr. 2006 à 17:00
un exemple vaut parfois mieux qu'un long discours!


win

[irc://irc.chatown.org/warriorhouse irc.chatown.org]
0
julienbj Messages postés 452 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 décembre 2008 15
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]
0
julienbj Messages postés 452 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 décembre 2008 15
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]
0
julienbj Messages postés 452 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 décembre 2008 15
14 févr. 2006 à 18:25
Je crois que j'ai encore trouvé mieux ;)
Reste à le mettre en place, mais ca devrait fonctionner.
Je viens de récupérer le SDK de WMP sur:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmplay10/mmp_sdk/samples.asp

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]
0
winwarrior Messages postés 654 Date d'inscription jeudi 3 avril 2003 Statut Membre Dernière intervention 10 février 2009 1
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 ^^

win

[irc://irc.chatown.org/warriorhouse irc.chatown.org]
0
wxccxw Messages postés 755 Date d'inscription samedi 15 mai 2004 Statut Membre Dernière intervention 30 janvier 2011
14 févr. 2006 à 21:39
a tu essayer RESHACK ?
0
winwarrior Messages postés 654 Date d'inscription jeudi 3 avril 2003 Statut Membre Dernière intervention 10 février 2009 1
14 févr. 2006 à 21:41
regarde le 8eme post.. j'ai déja répondu.

sinon je rame toujours .. rien a faire :/ 24h que chui dessus (et que j'ai pas dormi lol.. ça doit être tout con c'est abusé!)

win

[irc://irc.chatown.org/warriorhouse irc.chatown.org]
0
julienbj Messages postés 452 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 décembre 2008 15
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]
0
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
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.
0
Rejoignez-nous