INTERCEPTER DES APPELS DE METHODE (SURCHARGE DE VTABLE)
hvb
Messages postés939Date d'inscriptionvendredi 25 octobre 2002StatutMembreDernière intervention27 janvier 2009
-
5 mai 2007 à 11:57
RAFAAJ2000
Messages postés16Date d'inscriptionsamedi 27 mars 2010StatutMembreDernière intervention30 décembre 2012
-
7 avril 2010 à 08:20
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
RAFAAJ2000
Messages postés16Date d'inscriptionsamedi 27 mars 2010StatutMembreDernière intervention30 décembre 2012 7 avril 2010 à 08:20
Merci de votre reponse.
En fait, j'ai reussi a faire ca avec excel mais je voudrais savoir comment appeller la Method originale apres l'interception. Est ce que vous savez comment le faire ?
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 28 mars 2010 à 06:19
pas le même espace mémoire... dangereux de jouer à ça avec une appli tierce
RAFAAJ2000
Messages postés16Date d'inscriptionsamedi 27 mars 2010StatutMembreDernière intervention30 décembre 2012 27 mars 2010 à 09:35
J'ai essayé le code pour changer la Caption de l'application Excel lui mais ca ne marche pas.
J'ai passé le nombre 72 correspondant à la Propriéte Caption d'Excel que j'ai cherché dans le OLEViewer mais ca marche pas.
La function "OverrideCaption" ne semble pas s'executer.
Peut etre que je me suis trompé de numero de propriété .
Y a t-il quelqu'un qui puisse m'aider . Merci bcp.
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 9 mai 2007 à 08:53
Pour les besoins que j'en ais, j'utilise pour surcharger :
Public Declare Function SetWindowTextW Lib "user32.dll" (ByVal hWnd As Long, ByVal lpString As Long) As Long
Public Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)
Public Function OverrideCaption(ByVal voObjPtr As Long, ByVal vsCaption As Long) As Long
Dim oForm As Form
'# On récupère un objet a partir du pointeur This (voir doc sur COM...)
CopyMemory oForm, voObjPtr, 4
'# On met a jour le caption.... via WM_SETTEXT
SetWindowTextW oForm.hWnd, vsCaption
'# On libère notre objet
CopyMemory oForm, 0&, 4
End Function
ainsi, visuellement, aucun changement notable... mais WM_SETTEXT est envoyé, désormais.
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 9 mai 2007 à 08:51
certes...
pas utile dans mon cas, mais pourrait être utile...
cs_EBArtSoft
Messages postés4525Date d'inscriptiondimanche 29 septembre 2002StatutModérateurDernière intervention22 avril 20199 6 mai 2007 à 16:22
Par contre ya pas l'explication pour appeler la methode originale apres l'interception :p
violent_ken
Messages postés1812Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention26 octobre 20102 5 mai 2007 à 23:41
Ok, merci pour les précisions.
@+
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 5 mai 2007 à 23:24
Ole Viewer peut aider...
ensuite, tu compte 3 methodes pour IUnknown et 4 pour IDispatch ...
violent_ken
Messages postés1812Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention26 octobre 20102 5 mai 2007 à 17:21
Impressionant... vraiment...
Mais comment connait-on le nombre 21 correspondant à la property caption ? Si on veut faire pareil avec une autre property, on doit chercher la valeur par tatonnement ?
@+
hvb
Messages postés939Date d'inscriptionvendredi 25 octobre 2002StatutMembreDernière intervention27 janvier 20093 5 mai 2007 à 11:57
7 avril 2010 à 08:20
En fait, j'ai reussi a faire ca avec excel mais je voudrais savoir comment appeller la Method originale apres l'interception. Est ce que vous savez comment le faire ?
28 mars 2010 à 06:19
27 mars 2010 à 09:35
J'ai passé le nombre 72 correspondant à la Propriéte Caption d'Excel que j'ai cherché dans le OLEViewer mais ca marche pas.
La function "OverrideCaption" ne semble pas s'executer.
Peut etre que je me suis trompé de numero de propriété .
Y a t-il quelqu'un qui puisse m'aider . Merci bcp.
9 mai 2007 à 08:53
Public Declare Function SetWindowTextW Lib "user32.dll" (ByVal hWnd As Long, ByVal lpString As Long) As Long
Public Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)
Public Function OverrideCaption(ByVal voObjPtr As Long, ByVal vsCaption As Long) As Long
Dim oForm As Form
'# On récupère un objet a partir du pointeur This (voir doc sur COM...)
CopyMemory oForm, voObjPtr, 4
'# On met a jour le caption.... via WM_SETTEXT
SetWindowTextW oForm.hWnd, vsCaption
'# On libère notre objet
CopyMemory oForm, 0&, 4
End Function
ainsi, visuellement, aucun changement notable... mais WM_SETTEXT est envoyé, désormais.
9 mai 2007 à 08:51
pas utile dans mon cas, mais pourrait être utile...
6 mai 2007 à 16:22
5 mai 2007 à 23:41
@+
5 mai 2007 à 23:24
ensuite, tu compte 3 methodes pour IUnknown et 4 pour IDispatch ...
5 mai 2007 à 17:21
Mais comment connait-on le nombre 21 correspondant à la property caption ? Si on veut faire pareil avec une autre property, on doit chercher la valeur par tatonnement ?
@+
5 mai 2007 à 11:57
mes respects