|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Membre éprouvé
![]() Développeur .NET Inscription : mars 2011 Messages : 449 ![]() |
Bonjour,
je suis débutant en C++, je code d'habitude en VB et C# mais je dois modifier une brique existante écrite en C++ et je dois avouer que je suis un peu largué Le code récupère une checkBox (HWND) et est censé la cocher mais ne le fait pas... Code :
::SendMessage(RememberHwnd, WM_COMMAND, 0, 0); Merci de m'éclairer de vos lumières. |
|
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() Pierre Ingénieur développement logiciels Inscription : juin 2007 Messages : 1 361 ![]() |
Bonjour,
ca manque de quelques explications, je pense: Quelle est la bibliothèque utilisée? que sont HWND, WM_COMMAND, comment ce fait-il que ::SendMessage soit dans le namespace global… Que sont ces zéros (une position)?
__________________
Mes principes de bases du codeur qui veut pouvoir dormir:
|
|
00
|
|
|
#3 |
|
Membre éprouvé
![]() Étudiant Inscription : juin 2012 Messages : 273 ![]() |
Hello,
API Win32 ? Regarde du coté de CheckDlgButton. edit: ou Code :
::SendMessage(RememberHwnd, BM_SETCHECK, BST_CHECKED, 0); |
|
|
00
|
|
|
#4 | ||
|
Membre éprouvé
![]() Développeur .NET Inscription : mars 2011 Messages : 449 ![]() |
Je ne sais pas... Où puis-je voir ça ?
HWND est le handle de la checkbox que je récupère : Code :
Aucune idée. Je ne sais pas... Mais c'est ce que je suppose ![]() Il faut peut être que je précise que la fenêtre que je récupère est la fenêtre d'authentification d'Outlook et que cette case à cocher est celle qui dit : "Se rappeler de moi". Je cherche à la cocher pour qu'Outlook insère les login/mdp dans le credential manager en tant que generic credential. |
||
|
|
00
|
|
|
#5 |
|
Membre éprouvé
![]() Étudiant Inscription : juin 2012 Messages : 273 ![]() |
Les 2 zéros sont les paramètres du message envoyé wParam et lParam, WM_COMMAND est le type de message.
Ici WM_COMMAND n'est pas approprié, c'est un message envoyé lors d'un clic sur un bouton (un "vrai" bouton, ou l'utilisation du menu Fichier, Edition, etc..) |
|
|
00
|
|
|
#6 |
|
Membre éprouvé
![]() Développeur .NET Inscription : mars 2011 Messages : 449 ![]() |
Ok merci Iradrille.
Donc j'ai testé plusieurs choses mais rien ne fonctionne T_T Code :
::SendMessage(RememberHwnd, BST_CHECKED, 0, 0); Code :
::SendDlgItemMessage(RememberHwnd, 0, BM_SETCHECK, BST_CHECKED, 0); Code :
::SendMessage(RememberHwnd,BM_SETCHECK, 0, BST_CHECKED); |
|
|
00
|
|
|
#7 | ||
|
Membre éprouvé
![]() Étudiant Inscription : juin 2012 Messages : 273 ![]() |
Est-tu sur que ton handle est correct ?
Code :
|
||
|
|
00
|
|
|
#8 |
|
Membre éprouvé
![]() Développeur .NET Inscription : mars 2011 Messages : 449 ![]() |
Non ça ne fonctionne toujours pas...
Je l'ai essayé cette ligne déjà mais je l'ai retenté (par dépit) et oui le handle récupéré est bien celui de cette checkBox... Voici cette fameuse checkBox : ![]() J'attrape bien le champ mot de passe et j'y insère le mdp donc POURQUOI pas cette CB !?!
|
|
|
00
|
|
|
#9 | |||||
|
Membre éprouvé
![]() Développeur .NET Inscription : mars 2011 Messages : 449 ![]() |
Ça devient très WTFesque là...
J'ai fait un petit test : Avant de tenter le check : Code :
Code :
::SendMessage(RememberHwnd, BM_SETCHECK, BST_CHECKED, 0); Code :
Citation:
|
|||||
|
|
00
|
|
|
#10 |
|
Expert Confirmé
![]() Pierre Ingénieur développement logiciels Inscription : juin 2007 Messages : 1 361 ![]() |
Il n'y aurait pas une fonction pour changer l'état de la checkbox?
après, je ne connais pas cette api…
__________________
Mes principes de bases du codeur qui veut pouvoir dormir:
|
|
00
|
|
|
#11 | ||
|
Membre éprouvé
![]() Développeur .NET Inscription : mars 2011 Messages : 449 ![]() |
Oui j'ai essayé aussi avec :
Code :
|
||
|
|
00
|
|
|
#12 |
|
Expert Confirmé Sénior
![]() |
Plutôt que des FindWindow(), utilise Spy++ pour récupérer le ControlID de la checkbox et GetDlgItem() ensuite...
__________________
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant. "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?" Apparently everyone. -- Raymond Chen. Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen. |
|
|
00
|
|
|
#13 |
|
Membre éprouvé
![]() Développeur .NET Inscription : mars 2011 Messages : 449 ![]() |
Je me sers déjà de Spy++, c'est comme ça que je sais que cette checkBox est le 2ème contrôle de la fenêtre.
Le problème c'est que l'ID du contrôle change tout le temps...
|
|
|
00
|
|
|
#14 |
|
Expert Confirmé Sénior
![]() |
J'ai dit le ControlID (alias HMENU), pas HWND...
__________________
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant. "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?" Apparently everyone. -- Raymond Chen. Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen. |
|
|
00
|
|
|
#15 |
|
Membre éprouvé
![]() Développeur .NET Inscription : mars 2011 Messages : 449 ![]() |
Ok au temps pour moi...
Par contre comme dit dans mon premier post, je suis débutant en C++... Comment tu récupères ce controlID ? |
|
|
00
|
|
|
#16 |
|
Expert Confirmé Sénior
![]() |
Bouton droit sur le contrôle dans Spy++ -> Properties.
Puis, tu feras des GetDlgItem() pour chaque niveau de parenté...
__________________
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant. "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?" Apparently everyone. -- Raymond Chen. Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen. |
|
|
00
|
|
|
#17 |
|
Membre éprouvé
![]() Développeur .NET Inscription : mars 2011 Messages : 449 ![]() |
Je crois que je vais pleurer...
|
|
|
00
|
|
|
#18 |
|
Expert Confirmé Sénior
![]() |
Ah dommage, saleté de dialogues custom à DirectUIHWND...
Dans ce cas, le FindWindow reste peut-être la meilleure solution. Dans ce cas, assure-toi au moins que tu as le bon bouton (déjà, il doit avoir les styles qu'il faut pour être une checkbox).
__________________
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant. "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?" Apparently everyone. -- Raymond Chen. Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen. |
|
|
00
|
|
|
#19 | ||
|
Membre éprouvé
![]() Développeur .NET Inscription : mars 2011 Messages : 449 ![]() |
Ok bon j'ai essayé d'attaquer le problème sous un autre angle.
J'ai récupéré le hwnd des 7 contrôles présents sur la pop-up (d'après spy++) et j'ai envoyé le BST_CHECKED sur tous les contrôles. Et... rien. La case ne c'est jamais coché Code :
|
||
|
|
00
|
|
|
#20 | ||||
|
Membre éprouvé
![]() Développeur .NET Inscription : mars 2011 Messages : 449 ![]() |
Ok, bon...
Je me demande si il existe en C++ l'équivalent de ça en C# : Code :
![]() Edit: J'ai trouvé ça sur le net mais ça ne compile pas... Code :
|
||||
|
|
00
|
Copyright © 2000-2013 - www.developpez.com