Problème avec le sous classement

Lord_Patoche Messages postés 196 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 1 mai 2009 - 16 déc. 2004 à 22:50
Lord_Patoche Messages postés 196 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 1 mai 2009 - 17 déc. 2004 à 23:01
Bonjour, j'essaie d'effectuer un sous classement d'une fenêtre de programme de la calculatrice windows en usant de fonctions API.
En premier lieu, je récupère le handle de la calculatrice avec FindWindow(0, "Calculatrice");
Puis, je détourne sa procédure d'évènement en faisant :
SetWindowLong(hWnd, GWL_WNDPROC, NouvelleProc);

Le problème, c'est que lors de la compilation du programme, j'obtiens le message d'erreur:
'SetWindowLongA' : cannot convert parameter 3 from 'int (__stdcall *)(struct HWND__ *,unsigned int,unsigned int,long)' to 'long'

Quelqu'un peut il m'expliquer ce qui ne va pas ?
Merci d'avance

LaPatoshe

5 réponses

jul39dole Messages postés 117 Date d'inscription mardi 22 juillet 2003 Statut Membre Dernière intervention 21 janvier 2011
16 déc. 2004 à 23:11
Il faut surement "caster" en LONG le troisième paramètre de la manière : SetWindowLong(hWnd, GWL_WNDPROC, (LONG)NouvelleProc);
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
16 déc. 2004 à 23:23
faut effectivement caster.
Mais alors ta proc de sous classement, ou se trouve-t-elle ? si c'est dans TON espace memoire, tu vas simplement planter la calculatrice, l'adesse de ta procedure sera totalement invalide dans l'espace memoire de la calculatrice.

ciao...
BruNews, MVP VC++
0
Lord_Patoche Messages postés 196 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 1 mai 2009 3
17 déc. 2004 à 22:31
Merci, la compil fonctionne. ependant, mon prog quant à lui aussi basic soit il ne fonctionne pas. C'est peut être à cause de l'espace mémoire comme a commencé à en parler BruNews. En fait, je cherche à créer un évènement dès que l'on appuie sur une des touches de la calculatrice. Pour cela, je place des etiquettes d'évènement WM_COMMAND et WM_LBUTTONDOWN dans ma nouvelle procédure. seulement, ça ne fonctionne pas. Même sans dire à ma nouvelle fonction de poursuivre en appelant la fonction normale de la calculatrice, la calculatrice fonctionne comme si aucun détournement de procédure n'avait eu lieu. Quelle solution existe ?

LaPatoshe
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
17 déc. 2004 à 22:44
Faut entrer dans son espace memoire pour interferer sans la planter.
2 techniques principales: CreateRemoteThread() ou injection de code grace a un hook.
Exemple avec hook ici:
http://www.cppfrance.com/code.aspx?ID=28181

ciao...
BruNews, MVP VC++
0

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

Posez votre question
Lord_Patoche Messages postés 196 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 1 mai 2009 3
17 déc. 2004 à 23:01
Merci beaucoup, je vais tenter ces deux possibilités.
LaPatoshe
0
Rejoignez-nous