Comment changer un propriétaire de fenêtre à l'aide de sa poignée
Question
Je souhaite créer un formulaire .NET en tant que formulaire TopMost pour une autre application externe (non liée à .NET, purement Win32) afin qu'il reste au-dessus de cette Win32App, mais pas du reste des applications en cours d'exécution.
J'ai le descripteur de Win32App (fourni par Win32App elle-même) et j'ai essayé Fonction Win32 SetParent () , via P / Invoke in C # , mais mon formulaire .NET reste confiné à Win32App et ce n’est pas ce que je veux.
La solution
Je pense que vous cherchez est de P / Invoke SetWindowLongPtr (win32window, GWLP_HWNDPARENT, formhandle)
Autres conseils
Oui! J'ai déjà une importation P / Invoke de SetWindowLongPtr (qui est x64 safe). Et en utilisant Reflector, j'ai recherché la propriété Form.Owner (c'est-à-dire la méthode get_Owner (valeur de formulaire)). et a réussi à changer le propriétaire avec
SetWindowLongPtr(childHdl, -8, OwnerHdl)
Je cherchais ce que voulait dire le -8 (0xFFFFFFFFFFFFFFF8) avant de pouvoir publier la solution ici, mais Joel l'a déjà signalé.
Merci!