HOOK & variables public (Expert en Hook demandé)

Résolu
Signaler
Messages postés
241
Date d'inscription
mercredi 1 octobre 2003
Statut
Membre
Dernière intervention
19 février 2006
-
Messages postés
241
Date d'inscription
mercredi 1 octobre 2003
Statut
Membre
Dernière intervention
19 février 2006
-
Lorsque ma fonction de Hooking lie des variables public utilisées et déclarées dans un autre module, elles sont toutes vues comme étant NULL.

J'ai développé un code source qui met en évidence ce problème. C'est le seul bug qui reste, en attendant que je diffuse une mise à jour. Voici le lien, et un code extrèmement commenté:
http://www.vbfrance.com/code.aspx?ID=29151

Ce code permet d'utiliser le hooking pour échanger des Strings entre 2 applications, via la mémoire, et d'écrire les Strings recues dans un fichier Excel.

Deux projets sont ainsi disponibles :
1. Application_Emetteur qui permet d'envoyer une string via un atom.
2. Application_Receveur recoit cette string par hooking. Ce projet est composé de 2 modules :
a. Reception : module qui recoit par hooking l'atom, puis exectute la sub d'enregistrement des données vers un fichier Excel préalablement ouvert en mémoire.
b. Enregistre : ce module copie une string dans Excel. La sub d'enregistrement peut etre appelée manuellement via un CommandButton et un TextBox. Ce qui permet de démontrer le bon fonctionnement de l'écriture d'une String dans Excel à tout moment. Et, cette sub d'enregistrement est appelée par la fonction de hooking pour écrire dans Excel la string recue et envoyée par Application_Emetteur. (cette partie est en cours de finition)

Merci d'avance de votre aide.

6 réponses

Messages postés
241
Date d'inscription
mercredi 1 octobre 2003
Statut
Membre
Dernière intervention
19 février 2006
2
Merci ShareVB pour tes explications. Maintenant, je comprends mieux le fond du problème et ce qu'a tenté de m'expliquer valtrase.
J'ai fait l'essai, et le résultat est appréciable...

J'ai mis mon exemple à jour qui est sur le lien suivant :
http://www.vbfrance.com/code.aspx?id=29151

Merci à vous ! ! ! Je suis heureux ! ! !
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 109 internautes nous ont dit merci ce mois-ci

Messages postés
936
Date d'inscription
lundi 19 janvier 2004
Statut
Membre
Dernière intervention
17 mars 2017
4
Salut,
Je ne suis pas allé voir ton code mais il est un fait il y a deux sorte de Hook
- Application et système
Si ton filtre est au niveau application tu ne pouras pas intervenir sur d'autre aplications pour pouvoir intervenir sur le système tu dois passer par une DLL
je ne sais pas si c'est ton cas mais bon piste à suivre

Cordialement, Jean-Paul
______________________________________________________________________

Le Savoir n'a de valeur que s'il est partagé
Messages postés
241
Date d'inscription
mercredi 1 octobre 2003
Statut
Membre
Dernière intervention
19 février 2006
2
Je t'explique le fond de mon problème, car je pense que je me dirige dans une mauvaise direction :

Je veux créer le meme principe que WinZip : j'ai intégré une DLL à l'explorateur windows qui rajoute un item au menu clic droit (que j'appelle 'Envoyer vers database'). La DLL récupère le noms de tous les fichiers sélectionnés après clic sur 'Envoyer vers database'.
Un programme distant est censé lire ces noms puis les écrire dans Excel.

Comme je ne sais pas comment faire pour lire ces noms de manière simple, j'utilise le principe de l'atom et du hook pour que mon programme récupère les noms. Donc, dans mon programme je filtre les uMsg (select case...) et dès qu'il sagit d'un atom, je lance la fonction qui écrit dans Excel.

D'après ton explication, j'ai l'impression que je fais une usine à gaz.
Est ce que je réponds bien à ta question, et que me proposes tu ?
Messages postés
2676
Date d'inscription
vendredi 28 juin 2002
Statut
Membre
Dernière intervention
13 janvier 2016
24
salut,

les variables globales ne sont pas nulles mais génèrent une erreur disant que tu ne peux pas appellé la méthode...enfin tout ce que j'ai dis dans l'autre post...

l'idée des atomes n'est cependant pas bête du tout...tu dois pouvoir faire ca aussi avec tout ce qui se trouve dans la partie Interprocess Communication (un truc dans le genre) de MSDN...WM_COPYDATA ou un file mappé ou un pipe ou un mailslot...

ShareVB
Messages postés
241
Date d'inscription
mercredi 1 octobre 2003
Statut
Membre
Dernière intervention
19 février 2006
2
ShareVB , Valtrase,
Vous dites que l'utilisation du hook que je fais dans le lien suivant, ne me permettra jamais d'accéder à mes variables public déclarées dans mon programme. Sur ce point, je suis ok
J'ai déjà essayé le file mappé, mais c'est lent et ca me convient pas.
Dans ce cas, quelle serait la méthode pour récupérer des infos dynamiques dans ma DLL, sans faire de hooking dans mon programme ?
Et si je continue à faire du hooking avec les atoms, il doit bien exister un moyen d'utiliser mes variables publics ?
Concretement, sans avoir à programmer un autre concepte d'échange et d'utilisation de données, comment pourrais je m'en sortir avec ce code :
http://www.vbfrance.com/code.aspx?ID=29151

PS : je début en hooking, et je suis convaincu que vous pouvez m'en apprendre beaucoup. Peut etre que je hook mal ?

Merci de votre aide
Messages postés
2676
Date d'inscription
vendredi 28 juin 2002
Statut
Membre
Dernière intervention
13 janvier 2016
24
salut,

je ne sais pas si tu as lu l'autre post, mais : le problème vient de l'émetteur et pas du récepteur...la solution pour que ca marche c'est d'utiliser l'api POSTMESSAGE à la place de SENDMESSAGE dans l'application EMETTRICE...j'ai essayé ton code en faisant ce remplacement et cela marche...

pour plus d'explications, ce n'est pas les variables globales qui ont en cause mais seulement le fait que tu appelles avec ces variables une méthode AUTOMATION (COM) qui n'accepte pas d'être appelée depuis un message envoyé avec SENDMESSAGE mais accepte si le message a été envoy par POSTMESSAGE...les références à ces variables objets sont TOTALEMENT VALIDES, c'est juste que PAR CONCEPTION DE AUTOMATION (dit la KB) la méthode génére une erreur...c'est pour cela qu'il uniquement utiliser POSTMESSAGE dans ce cas...

en résumé, le prb ne vient que d'automation et pas de fait que ce soit des variables globales......................

ShareVB