2010-02-18 18 views
0

J'essaye de détourner une fenêtre existante et de la remplacer par le contenu d'une Winforms que je possède. Je me suis dit que ce serait plutôt cool d'échanger la poignée intérieure du formulaire avec celle que je veux remplacer, et je me demandais si quelqu'un l'avait déjà essayé?Remplacer un Winform HWND existant par un autre?

Cheers, Florian

Répondre

0

Cela devrait facile d'essayer si vous exécutez dans le processus et le fil de la fenêtre que vous souhaitez remplacer. Si vous ne courez pas sur le processus et le fil de la fenêtre d'origine, il est beaucoup moins probable que cela fonctionne. Si c'est une partie du shell Windows que vous essayez de remplacer, alors il est très peu probable que cela fonctionnera.

Si vous pouvez remplacer la fenêtre, vous devrez répondre à la fenêtre parent de la manière dont elle s'attend à ce que la fenêtre enfant d'origine réponde, mais vous avez probablement déjà réfléchi à cela.

Si la fenêtre parente contient la poignée de la fenêtre de l'enfant d'origine, votre tentative de remplacement échouera tout simplement (elle essaiera quand même de parler à la poignée d'origine). mais si vous gardez une trace de l'enfant par ID, tout ce que vous avez à faire est de donner à votre fenêtre le même identifiant de fenêtre, et utilisez SetWindowPos pour lui donner la même taille et le même emplacement et l'même ordre que l'enfant original. enfant original.

Je vous souhaite bonne chance, c'est un comportement à haut risque, mais il en va de même pour tous les autres hacks que vous pourriez essayer plutôt que de sous-classer et d'accrocher.