Lord_Patoche
Messages postés196Date d'inscriptionmercredi 6 août 2003StatutMembreDernière intervention 1 mai 2009
-
16 déc. 2004 à 22:50
Lord_Patoche
Messages postés196Date d'inscriptionmercredi 6 août 2003StatutMembreDerniè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
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 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.
Lord_Patoche
Messages postés196Date d'inscriptionmercredi 6 août 2003StatutMembreDernière intervention 1 mai 20093 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 ?
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 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++
Vous n’avez pas trouvé la réponse que vous recherchez ?