设置窗口打开前窗口的父级
本文关键字:窗口 设置 | 更新日期: 2023-09-27 17:56:02
我正在使用SetParent
在我的应用程序中托管外部应用程序(使用WindowsFormHost
)。
流程是这样的:
- 我打开我的应用
- 我打开外部应用程序
programmaticly
- 我使用 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.WindowStyle 可能是请求 Hidden 时的解决方法,但绝大多数应用程序都会忽略此请求。
您只能快速使用它,并使用 shell 用于通知窗口创建的相同机制。 并且领先于它,这需要 SetWindowsHookEx()。 从 .NET 应用程序中执行此操作非常痛苦,WH_SHELL钩子需要一个可以注入到进程中的 DLL,因此无法用 C# 编写。 有一个 Codeproject.com 项目可以提供帮助,位于这里。 它已经过时了,YMMV。