C# 在窗口打开之前设置窗口的父级

C# 在窗口打开之前设置窗口的父级,c#,wpf,setparent,windowsformshost,C#,Wpf,Setparent,Windowsformshost,我正在使用SetParent在我的应用程序中托管外部应用程序(使用WindowsFormHost)。 流程是这样的: 我打开我的应用程序 我以编程方式打开外部应用程序 我使用SetParent在我的应用程序中托管它 由于上面的流程,当外部应用程序打开时,我可以在任务栏/任务管理器中看到它一瞬间(直到设置了父应用程序) 我是否可以改变它首先设置父项然后打开应用程序的顺序?我只想避免我刚才描述的内容。 如果你对我的问题有其他的解决办法,我很乐意接受 编辑: 这是我的密码 string strPr

我正在使用
SetParent
在我的应用程序中托管外部应用程序(使用
WindowsFormHost
)。
流程是这样的:

  • 我打开我的应用程序
  • 我以编程方式打开外部应用程序
  • 我使用SetParent在我的应用程序中托管它
  • 由于上面的流程,当外部应用程序打开时,我可以在任务栏/任务管理器中看到它一瞬间(直到设置了父应用程序)

    我是否可以改变它首先设置父项然后打开应用程序的顺序?我只想避免我刚才描述的内容。
    如果你对我的问题有其他的解决办法,我很乐意接受


    编辑:
    这是我的密码

    string strPres = @"C:\Users\Ron\Desktop\Create an Office Mix.pptx";
    oPPT = new Microsoft.Office.Interop.PowerPoint.Application();
    oPPT.Visible = Microsoft.Office.Core.MsoTriState.msoTrue;
    objPresSet = oPPT.Presentations;
    objPres = objPresSet.Open(strPres, MsoTriState.msoFalse,
                MsoTriState.msoFalse, MsoTriState.msoTrue);
    objPres.SlideShowSettings.ShowType = Microsoft.Office.Interop.PowerPoint.PpSlideShowType.ppShowTypeWindow;
    objPres.SlideShowSettings.Run();
    
    objPres.Windows[1].Close();
    objPres.Saved = MsoTriState.msoTrue;
    
    uint oPPTID;
    GetWindowThreadProcessId(new IntPtr(oPPT.HWND),  out oPPTID);
    _process = Process.GetProcessById((int)oPPTID);
    _process.WaitForInputIdle();
    SetParent(_process.MainWindowHandle, _panel.Handle);
    
    在了解窗口句柄之前,不能调用SetParent()。创建窗口的应用程序不可避免地也会导致创建任务栏按钮,无法覆盖这一点。ProcessStartInfo.WindowsStyle在您请求隐藏时可能是一个解决方案,但绝大多数应用程序都会忽略此请求


    您只能快速地使用shell用于通知窗口创建的相同机制。而且,这需要SetWindowsHookEx()。从.NET应用程序执行此操作非常痛苦,WHU SHELL钩子需要一个可以注入进程的DLL,因此不能用C语言编写。有一个Codeproject.com项目可以帮助。它已经过时了,YMMV。

    我不确定你能否在打开应用程序之前隐藏该图标。如何以编程方式打开应用程序?