Запуск PowerpointViewer.exe внутри формы .Net - PullRequest
1 голос
/ 21 января 2009

у меня есть:

1 Форма 1 панель

Я делаю это без проблем: Запустите notepad.exe и запустите его внутри панели, без проблем. однако, запустив программу просмотра 2003 или 2007, я запускаю ее, но не внутри формы. (пример кода ниже)

 //DLL Import
    using System.Runtime.InteropServices;

    [DllImport("user32.dll")]
    static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);


  string ppviewer = @"C:\Program Files\Microsoft Office\Office12\PPTVIEW.EXE";

        System.Diagnostics.ProcessStartInfo startinfo = new System.Diagnostics.ProcessStartInfo(ppviewer);
        startinfo.Arguments = @"D:\Test.pps /s";

        System.Diagnostics.Process pptprocess = System.Diagnostics.Process.Start(startinfo);

        pptprocess.WaitForInputIdle();

        SetParent(pptprocess.MainWindowHandle, this.panel1.Handle);

Я пытаюсь сделать то же самое с PPTViewer.exe и не могу запустить слайд Powerpoint внутри формы. Он запускает зрителя, но за пределами формы.

Не уверен, должен ли я сделать что-то особенное здесь.

1 Ответ

2 голосов
/ 23 января 2009

Получу ли я баллы за ответы на свой вопрос?

По сути, я использовал 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.

Это похоже на лучшее решение.

...