Получу ли я баллы за ответы на свой вопрос?
По сути, я использовал SPY ++, чтобы увидеть, что зритель открывает дочерние окна. Дочернее окно было окном, которое я хотел ввести в свое приложение, поэтому я использовал следующие вызовы API, чтобы получить дескриптор дочернего окна.
[DllImport ( "user32.dll")]
static extern IntPtr SetParent (IntPtr hWndChild, IntPtr hWndNewParent);
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool EnumChildWindows(IntPtr window, EnumWindowProc callback, IntPtr i);
С файлами PPT 2003 или ниже это работало нормально (только для просмотра первого слайда), но с PPT 2007 оно все еще открывалось за пределами моей формы. Это было очень быстро, но ....
В итоге мы решили не воспроизводить PPT в собственном формате, потому что Microsoft не делает легкий элемент управления .net для воспроизведения PPT. Мы также не хотим запускать PPT за кулисами, а запуск файлов PPT с помощью этого метода занимает несколько секунд, что является неприемлемой производительностью.
Итак, мы преобразуем PPT во Flash и используем элемент управления Flash active X (который очень быстрый) для воспроизведения оригинального содержимого PPT.
Это похоже на лучшее решение.