C# 窗体所有者窗口无法从任务栏获取焦点

C# 窗体所有者窗口无法从任务栏获取焦点,c#,winforms,focus,C#,Winforms,Focus,我正在尝试将我的表单“链接”到另一个窗口。我已经用这个方法做了。这是非常好的工作,除了一个例外…当所有者窗口有焦点,我点击它的图标在任务栏,所有者窗口和我的窗口最小化很好 但是,当我的窗体具有焦点,并且我单击任务栏中所有者窗口的图标时,我希望所有者窗口能够重新获得焦点,但事实并非如此。我的窗体边框闪烁,表示它有焦点。我可以通过单击“所有者”窗口边界中的某个位置,将焦点从窗体上移开,但我认为单击任务栏中的图标也可以做到这一点 是否有其他方法可以将我的表单“链接”到另一个窗口而不存在焦点问题? .S

我正在尝试将我的表单“链接”到另一个窗口。我已经用这个方法做了。这是非常好的工作,除了一个例外…当所有者窗口有焦点,我点击它的图标在任务栏,所有者窗口和我的窗口最小化很好

但是,当我的窗体具有焦点,并且我单击任务栏中所有者窗口的图标时,我希望所有者窗口能够重新获得焦点,但事实并非如此。我的窗体边框闪烁,表示它有焦点。我可以通过单击“所有者”窗口边界中的某个位置,将焦点从窗体上移开,但我认为单击任务栏中的图标也可以做到这一点

是否有其他方法可以将我的表单“链接”到另一个窗口而不存在焦点问题? .ShowDialogIWIN32窗口不是我想要的,我想因为它需要始终保持焦点,我希望我的表单始终保持在顶部,但不总是有焦点

我使用的是无边框窗体,所以除非禁用无边框,否则我看不到表示窗体有焦点的“闪烁”。如果没有办法以不同的方式“链接”我的表单,是否有办法捕获此窗口消息,以便我可以实现自己的“闪烁”

public class ParentWndWrapper : IWin32Window
{
    IntPtr m_Handle;

    public ParentWndWrapper(IntPtr pParent){m_Handle = pParent;}

    public IntPtr Handle{get { return m_Handle; }}
}

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        Process[] processArray = Process.GetProcessesByName("Photoshop");
        Process photoshopProcess = processArray[0];
        IntPtr photoshopHWND = photoshopProcess.MainWindowHandle;

        var win32Wrapper = new ParentWndWrapper(photoshopHWND);

        Show(win32Wrapper);
    }
}

链接的目的是什么?为什么不能一起显示,这样你就可以自由控制Photoshop窗口或表单?关于焦点指示,您可以提供一些信息,例如,更改表单的背景或激活文本的标签(您称之为焦点)。寻找方法。@Sinatr难道Photoshop不会在我的表单上绘图吗?让我的表格隐形?我链接它的原因是因为我希望能够做到这一点:。是否有其他方法可以做到这一点?Windows中的窗口听起来很有趣,可以调整大小,您的窗体可以位于其他窗口的顶部或其附近。您想做什么还不是很清楚。@Sinatr我的程序应该像Photoshop的浮动子窗口一样工作。所以当Photoshop最小化时,我的表单应该最小化。它应该总是在Photoshop上,但不应该总是有焦点。焦点部分是问题所在,因为Photoshop无法通过单击任务栏PS图标恢复焦点。不过,我可以通过在Photoshop的窗口内单击来恢复Photoshop的焦点。除了这个焦点问题,一切都正常,这是很小的问题,但我想我可能遗漏了一些简单的东西:。我希望这能让事情更清楚一些?