Je développe une application C# WPF qui corrige la fenêtre principale d'une autre application à l'aide d'un appel à Win32 SetParent(). Le handle de cette fenêtre enfant out-of-process est enveloppé par une classe nommée FormHost qui est dérivée de HwndHost. Tout fonctionne bien, sauf pour une chose: les messages pour la fenêtre réparée ne sont pas livrés à FormHost. La documentation MSDN indique clairement que la procédure de fenêtre HwndHost WndProc() ne peut pas être utilisée avec des fenêtres hors processus. L'alternative, MessageHook ne fonctionne pas non plus. J'ai également essayé d'appeler AttachThreadInput() pour combiner le traitement d'entrée des deux fenêtres. Pas de chance. Aucune suggestion?Traitement des messages pour la fenêtre à partir d'un autre processus
Répondre
Le processus qui reparente la fenêtre ne peut pas directement sous-classer la procédure de message d'une fenêtre hors processus. Il devrait injecter son propre code de procédure de fenêtre dans l'espace d'adressage du processus propriétaire de la fenêtre, sous-classer la fenêtre dans cet espace d'adressage, puis enfin utiliser un mécanisme IPC de votre choix pour communiquer avec le processus de reparent selon les besoins.
Pour l'injection réelle, vous pouvez:
1) mettre le code de procédure de fenêtre réelle dans une DLL, utilisez CreateRemoteThread() pour charger la DLL dans le processus propriétaire de la fenêtre, et ensuite DllEntryPoint de la DLL () sous-classe la fenêtre (vous devez stocker le handle HWND dans la mémoire globale quelque part afin que la DLL puisse le trouver). 2) placer le code de procédure de fenêtre réel dans un bloc de mémoire alloué dans l'espace d'adressage du processus propriétaire de la fenêtre en utilisant VirtualAllocEx() et WriteProcessMemory(), puis utiliser CreateRemoteThread() pour exécuter la sous-classe réelle de la fenêtre utiliser ce bloc de mémoire comme procédure de fenêtre.
- 1. Traitement des messages retardés NServiceBus
- 2. Traitement des messages avec priorités
- 3. Traitement parallèle des messages JMS?
- 4. Modèle de pipeline pour le traitement des messages
- 5. Comment intercepter des messages envoyés à une fenêtre?
- 6. Amélioration du traitement des messages UDP
- 7. Est-il possible d'envoyer des messages WM_QUERYENDSESSION à une fenêtre dans un processus différent?
- 8. Mac OS X: Un processus peut-il être rendu dans la fenêtre d'un autre processus?
- 9. Comment héberger une fenêtre d'application en tant qu'enfant d'une fenêtre appartenant à un autre processus?
- 10. Créer un nouveau processus indépendant à partir d'un autre processus C
- 11. Créer une autre fenêtre à partir du code?
- 12. Pouvez-vous rendre une fenêtre Direct3D pour un processus dans un autre processus 'HWND?
- 13. Quelle est la méthode à jeun pour passer des messages entre différents processus en C#?
- 14. Obtenez la valeur d'une fenêtre à une autre fenêtre - javascript
- 15. Modification de la disposition du clavier pour un autre processus
- 16. envoyer des commandes à une fenêtre/un processus démarré à partir d'un fichier de commandes
- 17. processus de connexion à un autre processus pour recueillir des informations de profil?
- 18. Recharger la fenêtre parent à partir de la fenêtre enfant
- 19. Fenêtre de traitement de cube SQL
- 20. imprimer les messages d'erreur dans la version javascript du traitement
- 21. Octet Traitement des fichiers PDF à partir de SQL varbinary
- 22. SendMessage de DLL à une fenêtre dans un autre processus dans Vista
- 23. Comment appeler une sous-fonction publique d'une fenêtre à partir d'une autre fenêtre
- 24. jquery.windows-engine - problème d'essayer d'ouvrir une fenêtre à partir d'une autre fenêtre
- 25. Sortie partiellement lue de la sortie standard d'un autre processus créé à partir de l'application C#
- 26. données d'entrée de traitement à partir d'un téléphone si SMS
- 27. Traitement asynchrone en Java à partir d'une servlet
- 28. Wordpress: requête mysql pour renvoyer des messages à partir de mots clés spécifiques à categry?
- 29. Fenêtre popup semblable à la fenêtre modale
- 30. Consommant messages de file d'attente à la ressource de traitement variant selon le type de message
upvoted - bonne réponse. Toutefois, l'option 2 fonctionnera-t-elle sous Windows Vista et plus lorsque le DEP est activé? – quixver
nvm - VirtualProtectEx permet également de définir la protection de la mémoire. – quixver