我正在写一个WPF程序,这将使一个Window
出现在另一个进程的特定Win32窗口的顶部。
到目前为止这一般起作用:
hWnd
(目标)。 class Overlay : Window
)并显示它( overlay.Show()
)。 SetWinEventHook
作为LocationChange
和Destroy
事件的目标。 SetWinEventHook
for LocationChange
的callbackSetWinEventHook
,我重新定位我的Overlay
实例以匹配目标窗口的矩形。 问题是我的Overlay
实例出现在z轴的目标窗口后面。 我可以通过设置Topmost = true
解决这个问题,但是我的窗口位于所有窗口之上,而不仅仅是目标。
我试图调用SetParent( new WindowInteropHelper( overlay ).Handle, targetWindowHandle )
但是当这种情况发生我覆盖窗口消失。 调用overlay.Show()
不起作用。 我也试过用SetWindowLongPtr
(虽然MSDN说不要用GWL_HWNDPARENT
调用这个)无济于事。
为什么SetParent
使我的窗口不可见,以及为了确保我的窗口保持在另一个特定窗口之上,最好的方法是什么(如果不是这样的话)?