Keyboard Accelerators

Vaughn018 Messages postés 55 Date d'inscription mardi 18 novembre 2003 Statut Membre Dernière intervention 14 janvier 2005 - 17 mars 2004 à 14:55
Vaughn018 Messages postés 55 Date d'inscription mardi 18 novembre 2003 Statut Membre Dernière intervention 14 janvier 2005 - 19 mars 2004 à 12:08
Rebonjour,
J'ai un code d'erreur 5 (ERROR_ACCESS_DENIED) avec la fonction TranslateAccelerators(). Les fonctions appelés avant comme LoadAccelerators et PeekMessage marchent pourtant bien apparemment... Que dois-je en conclure?
A noter que j'appelle cette fonction dans le 'case WM_INITDIALOG' de mon programme.
merci d'avance

Vaughn018, Siaïeï handler...

15 réponses

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
17 mars 2004 à 20:35
je ne suis pas sur que tu puisse utiliser cela avec des Dialogues, puisque ce sont des fenêtres spéciales qui ne recoivent pas certains messages, mais je ne suis pas sur
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
17 mars 2004 à 23:23
Sur une dialogbox on met un hook, solution la plus simple.
Je pense avoir deja mis un exemple de cela.
Tu as juste a intercepter les touches qui t'interessent et pour chacune tu postes un WM_USERxxx.

ciao...
BruNews, Admin CS, MVP Visual C++
0
Vaughn018 Messages postés 55 Date d'inscription mardi 18 novembre 2003 Statut Membre Dernière intervention 14 janvier 2005
18 mars 2004 à 12:17
Le hook a été mis mais toujours ACCESS_DENIED (erreur 5)...
Ton exemple de MessageBox fonctionne mais ce que j'ai mis à la place dans le MsgFilterProc est la ligne suivante :
PostMessage(lpmsg->hwnd,1030,wParam,lParam);
L'objet 1030 faisant référence à un des boutons du dialogue.
Merci de m'aider sur ce coup je touche à la fin de mon prog svp!!

Vaughn018, Siaïeï handler...
0
Vaughn018 Messages postés 55 Date d'inscription mardi 18 novembre 2003 Statut Membre Dernière intervention 14 janvier 2005
18 mars 2004 à 12:22
Oui je précise que mon but est bien de détourner la touche ENTER et d'autres vers des boutons en particulier (sans passer par les DEFPUSHBUTTON pour certaines raisons... déjà paskil n'y a qu'un seul DEFPUSHBUTTON par fenetre).

Vaughn018, Siaïeï handler...
0

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

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
18 mars 2004 à 12:28
Si c'est une commande de bouton que tu dois simuler:
PostMessage(lpmsg->hwnd, WM_COMMAND, idBttn, hbttn);

hbttn tu peux passer 0 si tu ne te sers pas de lParam dans le traitement des buttons.

ciao...
BruNews, Admin CS, MVP Visual C++
0
Vaughn018 Messages postés 55 Date d'inscription mardi 18 novembre 2003 Statut Membre Dernière intervention 14 janvier 2005
18 mars 2004 à 13:44
Merci encore, mais toujours access denied.... je finis par croire que c'est du au fait que la fenetre de dialogue appartient au logiciel dans lequel s'intègre mon programme... d'ou le access denied puisque la fenetre concernée ne serait qu'une fenetre child. Je peux toujours essayer avec le HWND parent ou avec le HINSTANCE...?

Vaughn018, Siaïeï handler...
0
Vaughn018 Messages postés 55 Date d'inscription mardi 18 novembre 2003 Statut Membre Dernière intervention 14 janvier 2005
19 mars 2004 à 09:32
N'y a-t-il pas un autre moyen que PostMessage pour ça?
merci
Vaughn018, Siaïeï handler...
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
19 mars 2004 à 10:07
Pour des simulations de clic bouton PostMessage est impec car async donc aucun risque de blocage.
A toi de savoir si tu as les bons hwnd, etc...

ciao...
BruNews, Admin CS, MVP Visual C++
0
Vaughn018 Messages postés 55 Date d'inscription mardi 18 novembre 2003 Statut Membre Dernière intervention 14 janvier 2005
19 mars 2004 à 10:38
En ce qui concerne le HWND c'est le bon puisque ton exemple avec un message box qui s'ouvrait fonctionne (et je mets le meme hwnd dans la fonction postmessage à savoir lpmsg->hwnd... ce qui n'est peut etre pas bon?). J'ai essayé de faire une copie en variable globale du hwnd dont je suis sur, meme un pointeur mais toujours la meme erreur d'accès.
C'est quand meme bizarre que l'on me refuse l'accès pour les messages et pas pour les messagebox...

La seule solution serait de faire carrément appel à la fonction qui doit intervenir dans l'évènement ENTER key, mais ce serait bcp de chamboulement dans un code assez lourd (rien que pour créer cette fonction que l'on puisse appeler de nimporte ou).

Vaughn018, Siaïeï handler...
0
Vaughn018 Messages postés 55 Date d'inscription mardi 18 novembre 2003 Statut Membre Dernière intervention 14 janvier 2005
19 mars 2004 à 11:42
Juste une dernière question : comment faire pour que le Msg filter proc n'agisse que pour la fenetre en cours?
Le mien agit sur toutes les fenetres et je n'arrive pas à faire un EndDialog() des fenetres autres que la principale à partir de mon msg filter proc... erreur 1420 (not a valid window)
merci encore!

Vaughn018, Siaïeï handler...
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
19 mars 2004 à 11:53
Ben compare avec ton hwnd cible avant action.

Tu m'as l'air un peu faiblard en ce moment, une chute de tension ?

ciao...
BruNews, Admin CS, MVP Visual C++
0
Vaughn018 Messages postés 55 Date d'inscription mardi 18 novembre 2003 Statut Membre Dernière intervention 14 janvier 2005
19 mars 2004 à 11:59
Ah oui ça doit etre ma tension le problème ;)
Pour comparer je peux pas ce sont pas des variables globales tous ces hwnd (et elles ne peuvent pas l'etre, ça appartien au DialogProc). Sauf si je fais une copie bien entendu mais une copie de hwnd... je sens que c'est pas le top!
Et pour faire agir msgfilterproc que dans une fenetre que dois-je changer?
a+

Vaughn018, Siaïeï handler...
0
Vaughn018 Messages postés 55 Date d'inscription mardi 18 novembre 2003 Statut Membre Dernière intervention 14 janvier 2005
19 mars 2004 à 12:00
...je reprécise la question : dans une fenetre seulement.

Vaughn018, Siaïeï handler...
0
Vaughn018 Messages postés 55 Date d'inscription mardi 18 novembre 2003 Statut Membre Dernière intervention 14 janvier 2005
19 mars 2004 à 12:06
ouf non c'est réglé te dérange pas, la copie de HWND ça marche et en les mettant en global c'est bon aussi.
Je fatigue j'avoue, mais jvais avouer un autre truc je te déteste qu'une erreur me résiste si longtemps mais après tout ce n'est que de la prog microsoft!!!!! (je sais c'est une excuse minable mais jsuis pas fan voilà le message est passé ;) )
a+
Vaughn018, Siaïeï handler...
0
Vaughn018 Messages postés 55 Date d'inscription mardi 18 novembre 2003 Statut Membre Dernière intervention 14 janvier 2005
19 mars 2004 à 12:08
je te déteste jai mis? non c'est un lapsus involontaire merci pour l'aide!!
Vaughn018, Siaïeï handler...
0
Rejoignez-nous