30

Qqun peut me dire ce qu'est une injection de dll svp ? Intercepter tous les appels d'une dll pour faire exécuter une fonction qu'on veut modifier ?

31

./27 > En gros, avec PostMessage, le message passe par la file de message de l'application, et du coup il est traité par TranslateMessage, qui va générer les messages WM_CHAR qui vont bien. Normalement ce sont ces WM_CHAR qui vont jouer un rôle dans le remplissage des contrôles de texte.
(Je me demande même si tu ne pourrais pas directement balancer plein de WM_CHAR, mais ça ne serait pas un comportement très compréhensible du point de vue de l'application qui reçoit les messages… Enfin la plupart du temps ça passerait inaperçu.)
./31 > Ah et l'injection de DLL, ben c'est simplement « injecter » (charger, si tu préfères) une DLL dans un processus, voyons. tongue
Ça permet de faire tout un tas de trucs « sympa » #triangle#
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

32

./31 : alors que SendMessage ne passe pas par cette file, et donc ne génère pas de WM_CHAR ? (du coup je comprends pas trop à quoi il sert, mais je n'ai pas regardé les autres messages, ça a probablement un sens pour certains)
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

33

Si tu veux, le WM_CHAR devrait normalement te convertir VK_A en 'a'… Ce message transmet un caractère UTF-16 (et tu as WM_UNICHAR pour de l'UTF-32).
Et en fait dans la plupart des cas, tu veux que le message soit directement exécuté par la procédure de fenêtre, donc utiliser SendMessage est le bon choix. En revanche c'est un appel bloquant, et ça ne sert a rien si tu n'as pas besoin de synchronisation exacte.
PostMessage lui, va balancer un message par la route standard, l'application va donc le voir et pouvoir le filtrer et/ou le traiter comme bon lui semble. Des fonctions comme TranslateAccelerator et TranslateMessage vont décoder les messages d'entrée clavier et en générer d'autres. (Par exemple, WM_COMMAND pour les accélérateurs ou WM_CHAR pour les touches d'entrée standard gérées par TranslateMessage)
De ton côté, si tu crées un contrôle Win32, c'est plus intéressant d'utiliser WM_CHAR quand tu peux, car tu vas directement recevoir le caractère à ajouter dans ton buffer (enfin aussi les caractères backspace, tab et return, de mémoire… normalement tous ceux qui ont une représentation ASCII)
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

34

ok, merci pour la précision, ça explique le comportement totalement différent entre les deux fonctions smile
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)