2015-06-14 156 views
2

我正在使用SetParent在我的应用中使用外部应用程序(使用WindowsFormHost)。
流程是这样的:窗口打开之前窗口的SetParent

  1. 我打开我的应用程序
  2. 我打开外部应用程序programmaticly
  3. 我用的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); 
+0

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

回答

2

你不能打电话的setparent(),直到你知道的窗口句柄。创建窗口的应用程序不可避免地会导致任务栏按钮被创建,无法覆盖它。 ProcessStartInfo.WindowStyle 可能是是一个解决方法,当您要求隐藏,除了绝大多数应用程序忽略此请求。

您只能快速了解它并使用shell用于注意窗口创建的相同机制。并领先于它,这需要SetWindowsHookEx()。使用.NET应用程序非常痛苦,WH_SHELL钩子需要一个可以注入进程的DLL,因此无法用C#编写。有一个Codeproject.com项目帮助,located here。这是相当过时的,YMMV。