cs_salazar
Messages postés241Date d'inscriptionmercredi 1 octobre 2003StatutMembreDernière intervention19 février 2006
-
28 janv. 2005 à 14:19
cs_salazar
Messages postés241Date d'inscriptionmercredi 1 octobre 2003StatutMembreDernière intervention19 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)
cs_salazar
Messages postés241Date d'inscriptionmercredi 1 octobre 2003StatutMembreDernière intervention19 février 20062 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...
valtrase
Messages postés937Date d'inscriptionlundi 19 janvier 2004StatutMembreDernière intervention 9 mai 20223 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
cs_salazar
Messages postés241Date d'inscriptionmercredi 1 octobre 2003StatutMembreDernière intervention19 février 20062 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 ?
ShareVB
Messages postés2676Date d'inscriptionvendredi 28 juin 2002StatutMembreDernière intervention13 janvier 201626 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
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_salazar
Messages postés241Date d'inscriptionmercredi 1 octobre 2003StatutMembreDernière intervention19 février 20062 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 ?
ShareVB
Messages postés2676Date d'inscriptionvendredi 28 juin 2002StatutMembreDernière intervention13 janvier 201626 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......................