[C# 开发技巧系列] 使用C#操作幻灯片

2023-11-07

本专题概要

  • 引言

  • 实现思路

  • 遥控幻灯片程序的实现

  • 小结


一、引言

记得老师讲课的时候,经常会用PPT遥控翻页笔来遥控幻灯片来给我们讲课,当时觉得非常有趣,由于这段时间接触了VSTO相关的开发,了解到了Office的相关产品都公开了一些API来让我们对Office产品进行二次开发,这时候我就想,能不能用PowerPoint公开的对象来制作一个遥控幻灯片的程序呢?在本专题就向大家介绍下这个小工具的实现思路和效果。

二、实现思路

  1. 既然要实现的程序是遥控幻灯片,这样我们就需要先获得幻灯片应用程序的,在PowerPoint对象模型中,Microsoft.Office.Interop.PowerPoint.Application代表Powerpoint应用程序,这点和Word、Excel和Outlook都是一样的。

  2. 获得了幻灯片应用程序对象之后,之后我们就需要获得幻灯片对象,因为我们遥控的是幻灯片,在PowerPoint对象模型中也提供了幻灯片对象,即Microsoft.Office.Interop.PowerPoint.Slide。由于幻灯片又是存在于演示文稿中的,所以我们要想获得幻灯片对象,就需要先获得演示文稿对象,Microsoft.Office.Interop.PowerPoint.Presentation 就是代表演示文稿对象。

  3. 获得幻灯片对象之后,我们就可以利用幻灯片对象的Select方法来进行幻灯片的切换,然而在阅读模式的情况下,不能用Select方法来进行翻页,此时需要另一种方式来实现,即调用 Microsoft.Office.Interop.PowerPoint.SlideShowView对象的First,Next,Last,Previous方法来进行幻灯片翻页。

上面列出来的就是该工具的实现思路,其实思路非常的简单,为了帮助大家更形象地理解PowerPoint的对象模型,下面就用一张图来介绍PowerPoint中对象与真真的幻灯片的一个对象关系(从下面的图中也可以体会到面向对象编程,就是把看到的东西抽象出一个个对象):

18221014-d320b65417244657b41e620f98984bcf.jpg

下面一张是阅读模式下程序中实现翻页功能与在幻灯片中的对应关系:

18221131-a56b0c4c4cf84c36841193cfdb569e84.jpg

三、遥控幻灯片程序的实现

有了上面的解释,我们再看下面的实现代码时,相信大家肯定不会觉得有任何难道了,下面就直接贴出部分的实现的代码(这样可以让大家参看代码自己去实现剩余的部分,当然在文章的最后也会提供全部源码的下载):

 
 
  1. /// <summary>

  2. /// 检查是否打开幻灯片程序

  3. /// </summary>

  4. /// <param name="sender"></param>

  5. /// <param name="e"></param>

  6. privatevoid btnCheck_Click(object sender, EventArgs e)

  7. {

  8. // 必须先运行幻灯片,下面才能获得PowerPoint应用程序,否则会出现异常

  9. // 获得正在运行的PowerPoint应用程序

  10. try

  11.    {

  12.        pptApplication = Marshal.GetActiveObject("PowerPoint.Application") as PPt.Application;

  13. // 成功获取了PowerPoint程序时,使UI按钮可用

  14. this.btnFirst.Enabled = true;

  15. this.btnNext.Enabled = true;

  16. this.btnPrev.Enabled = true;

  17. this.btnLast.Enabled = true;

  18.    }

  19. catch

  20.    {

  21.        MessageBox.Show("请先启动遥控的幻灯片", "Error", MessageBoxButtons.OKCancel, MessageBoxIcon.Error);

  22.    }

  23. if (pptApplication != null)

  24.    {

  25. //获得演示文稿对象

  26.        presentation = pptApplication.ActivePresentation;

  27. // 获得幻灯片对象集合

  28.        slides = presentation.Slides;

  29. // 获得幻灯片的数量

  30.        slidescount = slides.Count;

  31. // 获得当前选中的幻灯片

  32. try

  33.        {

  34. // 在普通视图下这种方式可以获得当前选中的幻灯片对象

  35. // 然而在阅读模式下,这种方式会出现异常

  36.            slide = slides[pptApplication.ActiveWindow.Selection.SlideRange.SlideNumber];

  37.        }

  38. catch

  39.        {

  40. // 在阅读模式下出现异常时,通过下面的方式来获得当前选中的幻灯片对象

  41.            slide = pptApplication.SlideShowWindows[1].View.Slide;

  42.        }

  43.    }

  44. }

  45. // 第一页事件

  46. privatevoid btnFirst_Click(object sender, EventArgs e)

  47. {        

  48. try

  49.    {

  50. // 在普通视图中调用Select方法来选中第一张幻灯片

  51.        slides[1].Select();          

  52.        slide = slides[1];

  53.    }

  54. catch

  55.    {

  56. // 在阅读模式下使用下面的方式来切换到第一张幻灯片

  57.        pptApplication.SlideShowWindows[1].View.First();

  58.        slide = pptApplication.SlideShowWindows[1].View.Slide;

  59.    }

  60. }


下面就看看该遥控程序的运行效果是如何的:

18221836-03799c65bed44afda54581f2ee0a41d5.gif


四、小结

  到这里本专题的介绍就介绍就结束,其实本程序最好是放在手机客户端,这样我们就可以利用手机来对我们的幻灯片进行翻页了,这样就和激光笔的效果就是一样的了,这里就给大家先提供一个思路吧,我相信如果要在手机客户端实现的话,肯定就需要蓝牙编程的技术或者WiFi编程的技术来获取笔记本电脑的幻灯片应用程序,只要我们成功在手机客户端获取了PowerPoint应用程序对象的话,后面的实现过程就和本程序的实现方式就基本一样的,然而我们同时打开笔记本的蓝牙和手机的蓝牙(也可以利用WiFi),这样我们就可以轻松实现用手机来遥控我们演讲文稿了,如果有时间的话,也会研究下手机的蓝牙编程技术,实现了肯定会在博客中向大家分享的,如果其他朋友提前实现了的,也不要忘记在博客分享给大家了。



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[C# 开发技巧系列] 使用C#操作幻灯片 的相关文章

  • Python学习笔记--exe文件打包与UI界面设计

    exe文件打包与UI界面设计 前言 一 基于tkinter实现的UI设计 1 1 库的选择及思路 1 2 定位方法的选用 1 3 Frame控件 1 4 变量设置 1 5 批量设置 1 6 Text文本框 1 7 总体界面设计 1 8 功能
  • unity制作血条

    unity制作血条 在hierarchy中create gt UI gt image 重命名为border 将血条框拖入Source Image Set Native Size 防止变形 在Canvas下create empty 命名为He
  • UI设计师有钱途还是平面设计师或者是网页设计师呢?

    UI设计 平面设计和网页设计 哪个前景更好呢 其实ui和网页设计都属于平面设计里的一个分支 举个例子 设计一份饭店的点菜单 一样的图案 印刷出来是传统平面设计 放网站上是网页设计 放手机上显示是UI 其实都是一样的平面美术设计 那么有人要问
  • Qt信号与槽的链接3种方法详解

    转载自 14条消息 Qt5 9 2 VS2017入门实例 透彻解析 冯爽朗的博客 CSDN博客 vs qt 示例 由于现在书上介绍的大部分都是Qt Creator 并没有介绍Qt VS的教程 虽然说很相似 但是也有很多地方不同 对于初学者特
  • Unity中Shader实现UI去色功能的实现思路

    文章目录 前言 一 在开发过程中 在UI中会涉及一些需要置灰UI的需求 有很多实现的方法 1 做两套纹理 通过程序控制切换 2 使用shader实现对纹理去色 二 这里主要记录用shader实现的思路 1 基础纹理的采样 2 支持组件中的调
  • 如何创建项目

    1 MvvmLight框架的引用 引用 头部选项卡的 工具栏 NuGet 包管理器 管理解决方案的NuGet 程序包 搜索 MVVM Light MvvmLight 作者 Laurent Bugnion GalaSoft 勾选项目 Do n
  • Unity的三级排序层级渲染Layer,sorting layer,order in layer

    一 前言 Unity游戏开发中 模型 界面 特效等等 需要规划好层的概念 涉及到摄像机 Camera 画布 Canvas Shader等相关内容 Unity大致按照三级排序进行层级渲染 Camera的Depth CullingMask gt
  • element-ui中日期区间组件

    elementui中日期组件使用 最长只能选择3个月 不限制禁用日期 描述 时间组件代码 描述 点击 确定 按钮进行验证 点击 清空 按钮 清空输入框中的数据 时间范围不能超过3个月 并添加快捷选择今天 最近一周 最近一月 最近3个月 以下
  • UI图片移动

    local x y 0 149 local run 0 local pi0 20 ui 图片2 右移动3 左移动4 ui 7266427303413860920 7266427303413860920 2 72664273034138609
  • QPainter::setPen: Painter not active 解决方案

    今天在写代码的时候用到QPainter在窗口中绘制一些图形 出现错误 QPainter setPen Painter not active 百度上搜了也问了chatGPT没有很好的答案 无奈只好打开Qt API找问题 在Qt 文档中发现如下
  • 【前端】Vue+Element UI案例:通用后台管理系统-项目总结

    文章目录 相关链接 前言 效果 登录页 首页 管理员的首页 xiaoxiao的首页 用户管理 总结 项目搭建 左侧 CommonAside 上侧 CommonHeader和CommonTag 首页 Home vue 用户管理 User vu
  • 蓝牙App设计2:使用Android Studio制作一个蓝牙软件(包含:代码实现等)

    前言 蓝牙聊天App设计全部有三篇文章 一 UI界面设计 二 蓝牙搜索配对连接实现 三 蓝牙连接聊天 这篇文章是 二 蓝牙搜索配对连接实现 课程1 Android Studio小白安装教程 以及第一个Android项目案例 Hello Wo
  • 数理统计知识整理——回归分析与方差分析

    题记 时值我的北科研究生第一年下 选学 统计优化 课程 备考促学 成此笔记 以谨记 1 线性回归 1 1 原理分析 要研究最大积雪深度x与灌溉面积y之间的关系 测试得到近10年的数据如下表 使用线性回归的方法可以估计x与y之间的线性关系 线
  • 如何启用 CSF 防火墙 Web UI

    ConfigServer 安全和防火墙 CSS 是适用于 Linux 系统的基于 iptables 的防火墙 在我们之前的教程中阅读了CSF在Linux系统上的安装教程 CSF 还提供内置 Web UI 用于从 Web 界面管理防火墙 在本
  • Swift 响应式编程:简化 KVO 观察与 UI 事件处理 | 开源日报 No.110

    ReactiveX RxSwift Stars 23 8k License MIT RxSwift 是 Reactive Extensions 标准的 Swift 特定实现 它提供了 Observable 接口来表达计算的通用抽象 该项目旨
  • UI 易用性测试 以及自动化实现!

    GUI 是指图形用户界面 UI 是指用户界面 对于纯软件系统 这两者没有本质的区别 GUI易用性测试与 UI 易用性测试内容一致 但是如果测试的对象是一个产品 这两者则存在区别 对于产品 UI 则不仅仅包括 GUI 还包括产品硬件部分的测试
  • Axure RP 8 for Mac/win中文版:打造完美交互式原型设计体验

    Axure RP 8 一款引领潮流的交互式原型设计工具 为设计师提供了无限的可能性 让他们能够创造出逼真的原型 从而更好地展示和测试他们的设计 Axure RP 8拥有丰富的功能和工具 让设计师可以轻松地创建出复杂的交互式原型 从简单的按钮
  • 创意无限,绘图轻松——Sketch for Mac矢量绘图软件全面介绍

    在现代设计领域 矢量绘图软件是设计师们必不可少的工具之一 而在众多矢量绘图软件中 Sketch for Mac凭借其强大的功能和友好的用户界面脱颖而出 成为众多设计师的首选 Sketch for Mac是一款专为Mac用户开发的矢量绘图软件
  • Mac版 Photoshop 2021---PS2021

    Adobe Photoshop 2021是一款强大的图像处理软件 它可以帮助用户进行各种图像编辑 修饰和合成工作 这款软件拥有先进的图像处理技术 支持多种图像格式 可以轻松实现各种复杂的图像处理任务 它还提供了丰富的滤镜和工具 使用户可以自
  • 一文让你了解UI自动化测试

    测试都起什么作用 是项目的保险 但不是项目的救命草 测试无实际产出 但作用远大于实际产出 测试是从项目维度保证质量 而不是测试阶段 UI自动化 下面简称自动化 基于UI进行自动功能测试 以Web端作为例子 一般的UI功能自动化都是基于HTM

随机推荐

  • [js] : js 设置 style 的 important

    const div document getElementById xxx div style setProperty height 100px important api 详情 参见 CSSStyleDeclaration getProp
  • 论文笔记:Blockchain in Industries: A Survey

    一 基本信息 论文题目 Blockchain in Industries A Survey 发表时间 IEEE Access 2019 作者及单位 二 摘要 区块链技术近来已成为研究和工业界的最前沿 因为它们为许多行业带来了潜在的好处 这是
  • 02_Numpy学习笔记(下):随机采样

    02 Numpy学习笔记 下 随机采样 文章目录 02 Numpy学习笔记 下 随机采样 一 离散型随机变量的分布 1 二项分布 2 泊松分布 3 超几何分布 二 连续型随机变量的分布 1 均匀分布 2 正态分布 3 指数分布 三 其他随机
  • 华为OD机试真题 Java 实现【日志采集系统】【2023Q1 100分】,附详细解题思路

    目录 一 题目描述 二 输入描述 三 输出描述 四 解题思路 五 Java算法源码 六 效果展示 1 输入 2 输出 3 说明 一 题目描述 日志采集是运维系统的的核心组件 日志是按行生成 每行记做一条 由采集系统分批上报 如果上报太频繁
  • Python装饰器探究

    说在前边 装饰器作为Python中的一个比较实用的东西 在我们日常库的使用过程中经常使用 但是其细节问题我们却常常忘记考虑 本文章就此问题写建装饰器代码来进行一步一步分析 装饰器实验 1 我们常见的装饰器使用方式 from functool
  • ROS激光SLAM导航理解

    ROS激光SLAM导航理解 注 最近学习ROS的激光导航知识 需要理清ROS的SLAM 环境感知 costmap 与导航算法 为防止自己忘记 将觉得有价值的内容收集于此 对AGV来说 SLAM是个大大坑 环境感知和局部运动控制也是大坑 学习
  • 数据库添加/删除/修改 表字段(超详细)

    Oracle 添加 删除 修改 表字段 超详细 1 添加表字段 1 1 语法结构 1 2 举例说明 1 新建学生信息表 该步骤可忽略 2 初始表样子 3 语法解释 2 修改表字段 2 1 语法结构 1 修改字段属性 2 修改字段名 2 2
  • games101课程作业,在Vs2019环境下的配置环境(不使用虚拟机)

    为什么不使用虚拟机 因为虚拟机使用ubuntu x64版本系统 是一个从未接触过的系统 不好使用 虚拟机中无法使用中文输入法 无法对代码进行注释 不利于学习 虚拟机性能差 打开两三个文件就卡 令人抓狂 要使用终端进行编译 很是麻烦 还是喜欢
  • 面试经典-不被忽略的@property

    我们都知道 property是用来声明属性的 可以保存类的状态或信息 而与其相关的内容 诸如copy weak 深拷贝等 经常会在面试的过程中出现 接下来深入下这些模糊 熟悉的内容 理理顺 内容概要 1 property的本质 2 自动合成
  • Profinet 的交互流程

    Profinet 的交互流程 启动过程 在启动Profinet IO设备时 在设置IP地址之前 使用DCP协议 该协议类似于DHCP协议 PLC发送DCP广播消息 Identify 子网上的所有IO设备都使用本身的MAC地址进行应答 PLC
  • 机器学习算法与Python实践之(六)二分k均值聚类

    机器学习算法与Python实践之 六 二分k均值聚类 zouxy09 qq com http blog csdn net zouxy09 机器学习算法与Python实践这个系列主要是参考 机器学习实战 这本书 因为自己想学习Python 然
  • 基于IDEA的Java学生管理系统

    1 创建学生类 package studentManager public class Student 定义成员变量 private String num 学号 private String name 姓名 private String a
  • 善用Linux内核中的各种数据结构和算法

    1 介绍 在数据结构和算法一文中经常就信手拈来一些基本数据结构和算法 如链表 队列 栈 二叉树等等 但是在C的标准库中并没有自带这些 C 通过STL 类程序库等等会带这些 那么在嵌入式开发里面怎么快速方便使用这些数据结构和算法咧 答案就是从
  • OpenGL 理解GL_TRIANGLE_STRIP等绘制三角形序列的三种方式

    OpenGL 理解GL TRIANGLE STRIP等绘制三角形序列的三种方式 2012 04 12 20 19 19389人阅读 评论 7 收藏 举报 GL TRIANGLE STRIP绘制三角形方式很多时候令人疑惑 在这里对其运作机理进
  • 【Java基础·Comparator多字段排序】

    Java基础 Comparator多字段排序 需求 对指定List按照 身份证号 姓名 入学时间倒序排列 版本1 package com biaogexf tools import lombok Data import java util
  • 游戏开发unity杂项知识系列:GameObject组件的SetActive、active、activeSelf与activeInHierarchy

    SetActive 控制物体的显示状态 SetActive true 物体设置为可显示状态 但是仍然依赖上层的显示状态 上层显示状态为可显示才能显示 SetActive false 物体设置为不可显示状态 active 在某个版本后已经弃用
  • Python标准库----random

    目录 一 简单认识random模块 二 本人对计算机中 随机 伪随机数 的理解和认识 三 random模块的常用方法 1 random seed 2 其余一些常用方法 四 参考文献 一 简单认识random模块 Python官网的解释 该模
  • SASS用法指南

    学过CSS的人都知道 它不是一种编程语言 你可以用它开发网页样式 但是没法用它编程 也就是说 CSS基本上是设计师的工具 不是程序员的工具 在程序员眼里 CSS是一件很麻烦的东西 它没有变量 也没有条件语句 只是一行行单纯的描述 写起来相当
  • 基于DC-DC的PWM控制器simulink仿真,包括abc转dq,PI控制器等

    目录 1 算法仿真效果 2 MATLAB源码 3 算法概述 1 引言 2 基本原理 2 1 脉宽调制 PWM
  • [C# 开发技巧系列] 使用C#操作幻灯片

    本专题概要 引言 实现思路 遥控幻灯片程序的实现 小结 一 引言 记得老师讲课的时候 经常会用PPT遥控翻页笔来遥控幻灯片来给我们讲课 当时觉得非常有趣 由于这段时间接触了VSTO相关的开发 了解到了Office的相关产品都公开了一些API