gpt4 book ai didi

c# - 将窗口附加到另一个进程的窗口

转载 作者:行者123 更新时间:2023-12-02 08:36:22 25 4
gpt4 key购买 nike

我的 WPF 应用程序有多个窗口,我想将其中一些窗口附加到另一个进程的窗口。我的问题是,一旦我附加了窗口,它就变得不可见。

我正在尝试使用以下代码:

public static bool setParentWindow(IntPtr hWndChild, IntPtr hWndNewParent)
{
IntPtr previousParent = SetParent(hWndChild, hWndNewParent);
return (previousParent == null ? false : true);
}

[DllImport("user32.dll", SetLastError = true)]
private static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);

setParentWindow(myWindowHwnd, newParentHwnd);

因此,上面的代码成功附加了窗口,但不幸的是使其不可见。

我这样做的原因是我试图通过为其构建“小部件”来扩展应用程序,我的小部件将 Hook 并向用户显示额外信息。

两个窗口都具有以下样式:WS_OVERLAPPEDWINDOW、WS_OVERLAPPED、WS_VISIBLE、WS_CLIPSIBLINGS、WS_CLIPCHILDREN。

最佳答案

我发现我什至不需要使用 setParent 调用就可以做到这一点。我使用 HwndSource 类如下:

MyWindow window = new MyWindow();
window.ShowActivated = true;

HwndSourceParameters parameters = new HwndSourceParameters();

parameters.WindowStyle = 0x10000000 | 0x40000000;
parameters.SetPosition(0, 0);
parameters.SetSize((int)window.Width, (int)window.Height);
parameters.ParentWindow = newParent;
parameters.UsesPerPixelOpacity = true;
HwndSource src = new HwndSource(parameters);

src.CompositionTarget.BackgroundColor = Colors.Transparent;
src.RootVisual = (Visual)window.Content;

现在运行良好,没有任何问题。

关于c# - 将窗口附加到另一个进程的窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10676649/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com