C# 使WPF窗口位于外部应用程序窗口的顶部,但不是每个窗口的顶部

C# 使WPF窗口位于外部应用程序窗口的顶部,但不是每个窗口的顶部,c#,.net,wpf,winapi,C#,.net,Wpf,Winapi,我需要用一个假工具栏扩展一个外部Windows应用程序。我根本无法修改那个外部应用程序 我的假工具栏应用程序是一个WPF应用程序,带有WPF主窗口,C# 此工具栏应显示在外部应用程序窗口的顶部,但不是系统范围的最顶部 我可以通过适当的Win32 API函数或WindowInteropHelper获得外部应用程序窗口HWND、大小、rect等 如果WindowFromPointWin32 API调用无法100%显示我的应用程序窗口,我可能可以隐藏它,但这不是最好的主意 你知道我该怎么解决这个问题吗

我需要用一个假工具栏扩展一个外部Windows应用程序。我根本无法修改那个外部应用程序

我的假工具栏应用程序是一个WPF应用程序,带有WPF主窗口,C#

此工具栏应显示在外部应用程序窗口的顶部,但不是系统范围的最顶部

我可以通过适当的Win32 API函数或WindowInteropHelper获得外部应用程序窗口HWND、大小、rect等

如果
WindowFromPoint
Win32 API调用无法100%显示我的应用程序窗口,我可能可以隐藏它,但这不是最好的主意

你知道我该怎么解决这个问题吗

我尝试了
SetWindowPos
WIN32 API功能,但没有成功

SetWindowPos(myapp\u hwnd,externalapp\u hwnd,0,0,0x0002)

解决方案是调用
SetWindowPos
两次,如下所述:


此时,我最好的办法是通过
WindowFromPoint
查看我的应用程序窗口4个角是否可见,如果不可见,则隐藏我的应用程序窗口。您好zett42,谢谢您的帮助,这就是我需要的。我需要调用SetWindowPos两次才能得到正确的结果。在zorder中使一个窗口始终高于另一个窗口的方法是使用windowownership@DavidHeffernan,如老年退休金计划。
SetWindowPos(myapp_hwnd, 0, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, SWP_NOZORDER);

SetWindowPos(myapp_hwnd, GetNextWindow(extapp_hwnd, GW_HWNDPREV), 0, 0, 0, 0, 
             SWP_SHOWWINDOW | SWP_NOMOVE | SWP_NOSIZE);