Intercepter des appels de methode (surcharge de vtable)

Description

Bonjour,

de nouveau un nom barbare, de nouveau une mini source !

pour un de mes projets, j'avais besoin d'intercepter les modifications du titre de ma Form.
reflex subclassin, j'ai voulu intercepter WM_SETTEXT...

ca fonctionne ! si on modifie le caption via SetWindowText (ou bien évidemment via SendMessage WM_SETTEXT) ^^

seul soucis, lorsque l'on modifie le caption via Form1.Caption, VB veut optimiser le traitement, et s'affranchit du traitement classique...
en effet, il appelle directement l'API DrawCaption, sans prévenir personne.

je ne vais pas vous expliquer COM, msdn et je ne sais combien de livres, sites webs etc seront plus précis que je ne pourrais l'etre ^^
mais en gros, chaque objet COM (les objets vus dans VB6) possèdent un tableau. Ce tableau contient l'adresse de toutes les fonctions a appeler pour telle ou telle propriété ou méthode.

J'ai simplement eu a trouver quel case de mon tableau contenait le pointeur utiliser lors d'un Property Let Caption, et de remplacer par l'adresse d'une fonction perso...

Source / Exemple :


Dim pVTable As Long
    '# On récupère le pointeur vers la VTable
    CopyMemory pVTable, ByVal ObjPtr(Form1), 4
    '# Le property Let Caption est la 21ème fonction
    '# On écrase donc cet élément de la VTable par l'adresse de notre fonction perso.
    CopyMemory ByVal (pVTable + 21 * 4), ProcPtr(AddressOf OverrideCaption), 4

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.