VSTO PowerPoint 对放映的控制

最后更新:2 年前

写在前面

VSTO[1] 在当前真的是个比较冷门的技术,网络上搜寻到的 VSTO 资源大多都是针对诸如 Excel 、 OutLook 之类, PowerPoint 在其中更是冷门,而关于 PowerPoint 的资源又基本都是修改 PowerPoint 文档内容的,针对放映的真是凤毛麟角。

所幸,针对 PowerPoint 放映的相关文献,质量还是相对比较高的,没有什么营销号的文章 (估计营销号也看不起这个技术吧,呵) ,所以本人能够在现在开发出自己的 VSTO 软件,并且将部分技术内容写在这里,成为本文章。

一个契机

我们学校里的鸿合一体机,显示屏是非常的 垃圾 不好用啊,老师上课点个课件得费大半节课(主要是我上课天天下位给老师调课件,怎么说也不太合适),于是我就突发奇想,既然我 懒得下位 觉得下位不合适,那么为什么不开发一个工具让它代替 谋权篡位 我呢?

正片开始

因为冷门的偏偏是 C# , 而我是写 C# 的,所以本篇都是 C# ,不过微软的 API 大抵也都是互通的, Javascript 的朋友们也可以凑合看看。

几个 global 变量

1
2
3
4
5
PPT.Application pptApplication = null; // 当前运行 PPT 的 Application
Presentation presentation; // 当前打开的 PPT 文档
Slides slides; // 当前打开的 PPT 文档的所有页面
Slide slide; // 当前查看的页面
int slidesCount; // 页面总数

检查是否打开 PowerPoint 文档

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
private bool check()
{
bool result;
try
{
pptApplication = Marshal.GetActiveObject("PowerPoint.Application") as PPT.Application;
result = true;
}
catch
{
result = false;
}

if (pptApplication != null)
{
//获得演示文稿对象
presentation = pptApplication.ActivePresentation;

// 获得幻灯片对象集合
slides = presentation.Slides;

// 获得幻灯片的数量
slidesCount = slides.Count;

// 获得当前选中的幻灯片
try
{
// 在普通视图下这种方式可以获得当前选中的幻灯片对象
// 然而在阅读模式下,这种方式会出现异常
slide = slides[pptApplication.ActiveWindow.Selection.SlideRange.SlideNumber];
}
catch
{
// 在阅读模式下出现异常时,通过下面的方式来获得当前选中的幻灯片对象
slide = pptApplication.SlideShowWindows[1].View.Slide;
}
}
return result;
}

本方法会返回一个bool值,若为true,则代表用户打开了一个 Powerpoint 文档, 若为false则反之。

切换到相对于当前的某一页

1
2
3
4
5
6
7
8
9
10
11
12
13
14
private void slideGoTo(int where = 0)
{
// 这里可以结合 slidesCount 来加一个 if ,判断能否 Goto 到 目标页面
try
{
slide = slides[pptApplication.ActiveWindow.Selection.SlideRange.SlideNumber + where];
slide.Select();
}
catch
{
pptApplication.SlideShowWindows[1].View.GotoSlide(slide.SlideNumber + where);
slide = pptApplication.SlideShowWindows[1].View.Slide;
}
}

应用:
slideGoTo(1); 表示切换到下一页
slideGoTo(-1);表示切换到上一页

开始/结束放映

presentation.SlideShowWindow.Activate(); 表示开始放映。(本方法没有经过实践,纯属个人猜测,可能是错误、不成立的
presentation.SlideShowWindow.View.Exit(); 表示结束放映。

指针样式

presentation.SlideShowWindow.View.PointerType 这是 PowerPoint 中掌管指针样式的对象。我们对其进行get/set,可以判断/设置当前指针样式。

PpSlideShowPointerType.ppSlideShowPointerPen 这是笔的样式常量。将上面的对象赋值为这个的时候,我们在放映的幻灯片里就可以写写画画了。

PpSlideShowPointerType.ppSlideShowPointerArrow 这是鼠标指针的样式常量。这是默认的样式常量。将上面的对象赋值为这个的时候,我们在放映的幻灯片里就可以恢复正常操作了。

写在最后

互联网之大,不是任何冷门资源都挖掘不到的。当我们仔细找找,还是能找到的。本人也是初次接触 VSTO 的开发,若有不正确之处,欢迎联系我。


  1. 1.Visual Studio Tools for Office,是开发Office应用程序的一种办法。 BaiduBaike>>

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!