ハンドルを使用してウィンドウの所有者を変更する方法
質問
.NET フォームを別の外部アプリ (.NET 関連ではなく、純粋な Win32) の最上位フォームとして作成して、その Win32App の上に留まりますが、実行中の残りのアプリには残らないようにしたいと考えています。
Win32App のハンドル (Win32App 自体によって提供される) を持っているので、試してみました Win32 SetParent() 関数, 、 経由 C# での P/呼び出し, 、しかし、その後、私の.NETフォームはWin32Appに制限されるので、それは私が望んでいることではありません。
解決
あなたが探しているのはP/Invokeだと思います SetWindowLongPtr(win32window, GWLP_HWNDPARENT, formhandle)
他のヒント
はい!SetWindowLongPtr の P/Invoke インポートは既にあります (x64 セーフです)。そして、Reflector を使用して、Form.Owner プロパティを検索しました (すなわち、get_owner(form value)メソッド)と所有者をで変更することができました
SetWindowLongPtr(childHdl, -8, OwnerHdl)
解決策をここに投稿する前に、-8 (0xFFFFFFFFFFFFFF8) が何を意味するのか調べていましたが、ジョエルがすでにそれを指摘していました。
ありがとう!
所属していません StackOverflow