首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >窗口打开前的SetParent

窗口打开前的SetParent
EN

Stack Overflow用户
提问于 2015-06-14 17:19:05
回答 1查看 565关注 0票数 2

我使用SetParent在我的应用程序中托管外部应用程序(使用WindowsFormHost)。

流动是这样的:

  1. 我打开我的应用
  2. 我打开外部应用程序programmaticly
  3. 我使用SetParent在我的应用程序中托管它。

由于上面的流,当外部应用程序打开时,我可以在任务栏/任务管理器中看到它一秒(直到父程序被设置)。

我能改变它先设置父程序然后打开应用程序的顺序吗?我只想避免我刚才描述的..。

如果你对我的问题有别的解决办法,我很乐意接受。

编辑:

这是我的密码

代码语言:javascript
复制
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);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-16 22:50:15

只有知道窗口句柄,才能调用SetParent()。创建窗口的应用程序也不可避免地会导致任务栏按钮被创建,无法覆盖此按钮。当您请求隐藏时,ProcessStartInfo.WindowStyle可能是一个解决方案,但绝大多数应用程序忽略了这个请求。

您只能快速地处理它,并使用shell用来注意创建窗口的相同机制。并且领先,这需要SetWindowsHookEx()。从.NET应用程序中执行非常痛苦的操作,WH_SHELL钩子需要一个可以注入到进程中的DLL,这样就不能用C#编写它。有一个Codeproject.com项目帮助我,就在这里。太过时了,YMMV。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30832311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档