C# 确定Powerpoint是否处于演示模式

C# 确定Powerpoint是否处于演示模式,c#,wpf,.net-3.5,powerpoint,C#,Wpf,.net 3.5,Powerpoint,我编写了一个程序,当用户可以自己设置间隔时,它会弹出并播放声音 现在,我希望当Powerpoint在演示模式下运行且间隔时间已过时,它保持沉默,这样当与外部观众进行演示时,程序不会出现在屏幕顶部并播放声音 使用的PowerPoint版本是07/10/13(12.0/14.0/15.0)。我无法确定演示模式是否正在运行 这个程序不是PowerPoint插件或类似的东西,只是一个普通的WPF桌面应用程序。这可能会有帮助。。。“如何自动控制PowerPoint幻灯片”这可能会有帮助。。。“如何自动控制

我编写了一个程序,当用户可以自己设置间隔时,它会弹出并播放声音

现在,我希望当Powerpoint在演示模式下运行且间隔时间已过时,它保持沉默,这样当与外部观众进行演示时,程序不会出现在屏幕顶部并播放声音

使用的PowerPoint版本是07/10/13(12.0/14.0/15.0)。我无法确定演示模式是否正在运行


这个程序不是PowerPoint插件或类似的东西,只是一个普通的WPF桌面应用程序。

这可能会有帮助。。。“如何自动控制PowerPoint幻灯片”

这可能会有帮助。。。“如何自动控制PowerPoint幻灯片”

您可以检测是否有任何其他程序(不仅仅是PowerPoint)正在全屏运行。
下面是您想要的答案,您可以检测到是否有任何其他程序(不仅仅是PowerPoint)正在全屏运行。
下面是您想要的答案,请访问下面的链接。我想这会有帮助的


访问下面的链接。我想这会有帮助的


如果回答我自己的问题有点贪心,那就很抱歉了,但我认为这个答案会帮助有同样问题的人:

只需添加名为“Microsoft PowerPoint 15.0对象库”的COM引用,它在引用列表中显示为“Microsoft.Office.Interop.PowerPoint”

以下代码测试运行演示文稿,并在2007/10/13版本(12.0/14.0/15.0)下测试:

编辑: 一些错误报告显示,如果PowerPoint根本没有运行或演示模式未处于活动状态,仅以上述方式执行可能会导致异常,因此我稍微修改了代码:

private bool IsPPTPresentationRunning()
{
    Process[] prozesse = Process.GetProcesses();
    foreach (Process p in prozesse)
    {//searches for a running PowerPoint process
        if (p.ProcessName == "POWERPNT")
        {
            try
            {
                Microsoft.Office.Interop.PowerPoint.Application PPT = 
                new Microsoft.Office.Interop.PowerPoint.Application();
                if (PPT.SlideShowWindows.Count > 0)
                 return true; 
                else
                 return false; 
            }
            //Catches any exception that seems to get thrown when
            // powerpoint is not in Presentation mode
            catch (Exception) 
            {
                return false;
            }
        }
    }
    return false;
}

很抱歉,如果回答我自己的问题看起来有点贪婪,但我认为这个答案会帮助有同样问题的人:

只需添加名为“Microsoft PowerPoint 15.0对象库”的COM引用,它在引用列表中显示为“Microsoft.Office.Interop.PowerPoint”

以下代码测试运行演示文稿,并在2007/10/13版本(12.0/14.0/15.0)下测试:

编辑: 一些错误报告显示,如果PowerPoint根本没有运行或演示模式未处于活动状态,仅以上述方式执行可能会导致异常,因此我稍微修改了代码:

private bool IsPPTPresentationRunning()
{
    Process[] prozesse = Process.GetProcesses();
    foreach (Process p in prozesse)
    {//searches for a running PowerPoint process
        if (p.ProcessName == "POWERPNT")
        {
            try
            {
                Microsoft.Office.Interop.PowerPoint.Application PPT = 
                new Microsoft.Office.Interop.PowerPoint.Application();
                if (PPT.SlideShowWindows.Count > 0)
                 return true; 
                else
                 return false; 
            }
            //Catches any exception that seems to get thrown when
            // powerpoint is not in Presentation mode
            catch (Exception) 
            {
                return false;
            }
        }
    }
    return false;
}


Powerpoint版本不是日期。有上百个关于Office开发的网站和文章,甚至有一个关于MSDN中Office的完整DevCenter。检查Office互操作,特别是关于Powerpoint@PanagiotisKanavos我知道,但它是版本()的名称,所以我需要处理版本12.0/14.0/15.0。我不确定互操作,我从来没有使用过互操作,这不是一种控制东西的方式吗?因为我不想控制任何东西,我只需要知道演示模式是否正在运行。Powerpoint版本不是日期。有上百个关于Office开发的网站和文章,甚至有一个关于MSDN中Office的完整DevCenter。检查Office互操作,特别是关于Powerpoint@PanagiotisKanavos我知道,但它是版本()的名称,所以我需要处理版本12.0/14.0/15.0。我不确定互操作,我从来没有使用过互操作,这不是一种控制东西的方式吗?因为我不想控制任何东西,我只需要知道演示模式是否在运行。全屏是否意味着游戏的全屏工作方式?或者它也包括最大化的窗口应用程序?全屏是指游戏全屏运行的方式吗?或者它是否也包括最大化的窗口应用程序?PowerPoint幻灯片通常但不总是全屏模式,因此仅进行测试通常但不总是有效。如果您获得对PPT应用程序的引用,它的SlideShowWindows.Count属性将告诉您slideshow视图中演示文稿的数量。如果>0,则有一个正在进行的节目。@SteveRindsberg如果您将此作为一个答案发布(据我所知,测试尚未全部完成),我将接受此问题的答案。谢谢@马尔夫:不用担心;您发布了一个直接回答问题的代码片段。这更好。PowerPoint幻灯片放映通常但不总是全屏模式,所以测试通常但不总是有效的。如果您获得对PPT应用程序的引用,它的SlideShowWindows.Count属性将告诉您slideshow视图中演示文稿的数量。如果>0,则有一个正在进行的节目。@SteveRindsberg如果您将此作为一个答案发布(据我所知,测试尚未全部完成),我将接受此问题的答案。谢谢@马尔夫:不用担心;您发布了一个直接回答问题的代码片段。那更好。首先谢谢你,看来我必须使用互操作。。但我试图为我的3个PPT版本添加3个互操作引用,但Visual Studio一直告诉我只能有其中一个引用。那么,使用3个不同版本的PPT是否可能实现这一点呢?仅使用1个支持最新PPT版本的interop。它还应该有向后支持…我正在尝试,但现在遇到了一个新问题:我能找到的PowerPoint 15(PPT 2013)的唯一参考是COM参考(“Microsoft PowerPoint 15.0对象库”),而不是.net参考(那里最新的版本是14(Microsoft.Office.Interop.PowerPoint)我只能在MSDN上找到VBA的例子。问题是,我甚至可以不使用VBA而使用COM引用吗?如果这个问题听起来很狭隘,很抱歉,但我是一个初学者。在.NET中使用COM对象没有问题。只需转到工具箱并添加所选的COM对象。谢谢,我成功地做了一些适用于15.0版本的事情我已经在12.0版和14.0版上进行了测试。但我目前不确定这三个版本的兼容性