2

SetParentアプリで外部アプリをホストするために使用しています(を使用WindowsFormHost)。
流れはこんな感じです。

  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);
4

1 に答える 1

2

ウィンドウ ハンドルがわからない限り、SetParent() を呼び出すことはできません。ウィンドウを作成するアプリでは、必然的にタスクバー ボタンも作成されます。これをオーバーライドする方法はありません。ProcessStartInfo.WindowStyleは、大部分のアプリがこの要求を無視することを除いて、Hidden を要求する際の回避策になる可能性があります。

シェルがウィンドウの作成を通知するために使用するのと同じメカニズムを使用して、迅速に対処することしかできません。SetWindowsHookEx() が必要です。.NET アプリから実行するのは非常に面倒です。WH_SHELL フックは、プロセスに挿入できる DLL を必要とするため、C# で記述できません。役立つ Codeproject.com プロジェクトがここにあります。かなり時代遅れです、YMMV。

于 2015-06-16T22:50:15.430 に答える