HOOK & variables public (Expert en Hook demandé)

Résolu
cs_salazar Messages postés 241 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 19 février 2006 - 28 janv. 2005 à 14:19
cs_salazar Messages postés 241 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 19 février 2006 - 31 janv. 2005 à 17:18
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

cs_salazar Messages postés 241 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 19 février 2006 2
31 janv. 2005 à 17:18
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
valtrase Messages postés 937 Date d'inscription lundi 19 janvier 2004 Statut Membre Dernière intervention 9 mai 2022 4
28 janv. 2005 à 14:33
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é
0
cs_salazar Messages postés 241 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 19 février 2006 2
28 janv. 2005 à 14:53
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 ?
0
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 25
28 janv. 2005 à 15:25
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
0

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

Posez votre question
cs_salazar Messages postés 241 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 19 février 2006 2
28 janv. 2005 à 15:56
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
0
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 25
28 janv. 2005 à 18:32
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
0
Rejoignez-nous