Индивидуальное слайд-шоу Powerpoint - PullRequest
1 голос
/ 17 мая 2011

Я работаю с C # только несколько недель, и я застрял в потоке.

Я создавал собственное слайд-шоу, в котором реализована презентация .ppt, размещенная в winform, обработаннаянезависимый класс.Слайд-шоу отключается с другой программой, которая отображает динамические данные из цеха.Этой второй программе нужно отправить команду для входа в полноэкранный режим, поскольку у меня нет доступа к ее исходному коду.

Используя API Setforegroundwindow, я могу легко переключаться между двумя приложениями и управлять точкой электропитания с помощью COM.интерфейс, но переход изменчив с изменением размеров экранов.Я хотел бы наложить чистую черную форму, которая исчезает и исчезает во время этого перехода.До сих пор мне не удавалось сделать это гладко, я пытался запустить исчезающую форму и переход в отдельных потоках, но я не совсем понял это.Если у кого-то может быть какой-либо совет о том, как это сделать, он будет очень признателен.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 19 мая 2011

Проработав некоторый пример кода, я реализовал фоновый рабочий, который добился цели. Для получения дополнительной информации Из MSDN - Как: использовать фоновый рабочий .

Я пытаюсь найти более надежный способ, чтобы приложение F11 обрабатывалось приложением, но сейчас я добавил Thread.Sleep перед SendKeys.

Пожалуйста, не стесняйтесь оставлять комментарии или вопросы.

[DllImport("user32.dll")]
    [return: MarshalAs(UnmanagedType.Bool)]
    static extern bool SetForegroundWindow(IntPtr hWnd);

    Process p;
    //Process p is initialized: p = Process.Start(@"<path\application.exe>");
    Form2 oForm;

 private void transition()
    {
        BackgroundWorker bw = new BackgroundWorker();
        oForm = new Form2();

        bw.DoWork += new DoWorkEventHandler(bw_DoWork);
        bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);
        oForm.Show();
        if (bw.IsBusy != true)
        {
            bw.RunWorkerAsync();
        }

    }
    private void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {       
        oForm.closethis();
    }
    private void bw_DoWork(object sender, DoWorkEventArgs e)
    {
        BackgroundWorker worker = sender as BackgroundWorker;

            if ((worker.CancellationPending == true))
            {
                e.Cancel = true;                   
            }
            else
            {                   
                SetForegroundWindow(p.MainWindowHandle);
                p.WaitForInputIdle(3000);
                System.Threading.Thread.Sleep(500);
                SendKeys.SendWait("{F11}");    
                //Sends the application into full screen mode           
            }

    }

И код для формы, которая появляется и исчезает.

public partial class Form2 : Form
{
    public Form2()
    {
        this.Visible = false;
        this.Opacity = 0;

        InitializeComponent();

        this.TopMost = true; 
        this.Visible = true;

        while (this.Opacity < 1)
        {
           this.Opacity += .05;
           Thread.Sleep(5);
           this.TopMost = true;
        }       
    }
    private void closefade()
    {
        while (this.Opacity > 0)
        {
            this.Opacity -= .05;
            Thread.Sleep(5);
            this.TopMost = true;
        }
        this.Close();
    }

    delegate void CloseBack();
    public void closethis()
    {
        if (this.InvokeRequired)
        {
            CloseBack b = new CloseBack(closethis);
        }
        else
            closefade();
    }
}
0 голосов
/ 17 мая 2011

Одна мысль ...

Иметь два загрузчика ppt.

Текущий и новый, который вы загружаете.

Держите текущий видимым и активным, пока новый не будет готов. Затем, когда новый готов, скрыть текущий. Это должно дать вам хороший переход.

Так как будет два активных зрителя, это будет немного более ресурсоемким, но переключение должно быть более плавным.

Возможно, мы хотим отличить загрузку от начальной. Таким образом, вы можете загрузить за сцену и после загрузки показать и запустить ppt.

...