C# 多进程打开PPT的示例教程

1、背景

PPT文件打开和操作是在一个进程中进行的,如果对多个PPT进行操作,PowerPoint进程默认会以阻塞的方式依次进行,如果打开的PPT特别大(比如超过1GB)很容易造成PPT无响应,这样几乎所有的PPT操作都无法进行。

解决PPT无响应的一种方式是定时检测PPT进程(POWERPNT.exe)是否无响应,如果无响应就将POWERPNT.exe进程Kill掉,重新打开PPT。这种方式并不能解决需要多个PPT操作的问题,如果多个PPT文件都很大,操作多个PPT会频繁出现PPT无响应的情况。

解决PPT无响应的另一种方式是使用多进程方式打开PPT。PPT默认是无法使用多个进程打开的,在使用不同用户打开PPT的情况下,可以打开不同的PPT进程,其原因见参考文档。

2、具体方法

使用多用户打开PPT的方法,首先需要内置不同的用户,这可以通过代码实现(需要管理员权限),也能通过Windows用户设置添加指定的用户。使用代码操作用户稍后会有参考代码。

其次是使用指定用户(及密码)启动封装好PPT操作的进程,然后通过进程间通信的方式(管道、COPYDATA 消息、MQTT,推荐管道或者COPYDATA消息,不用依赖第三方库)进行PPT控制(打开、翻页、跳转、媒体控制等)。

3、参考代码

(1)使用指定用户打开进程的代码片段(args参数可以传递管道名称或者自定义消息)

public void StartProcess(string fileName, string userName, string password, string args)
{
 var pwd = new SecureString();
 if (!string.IsNullOrEmpty(password))
 {
  password.ToCharArray().ToList().ForEach(c => pwd.AppendChar(c));
 }

 try
 {
  var process = new Process
  {
   StartInfo =
   {
    UseShellExecute = false,
    LoadUserProfile = true,
    UserName = userName,
    Password = pwd,
    Domain = ".",
    FileName = $"\"{fileName}\"",
    Arguments = args
   }
  };
  process.Start();
 }
 finally
 {
  pwd.Dispose();
 }
}

(2)PPT操作片段

private void OpenPpt()
{
 var app = new Microsoft.Office.Interop.PowerPoint.Application();
}

private void ClosePpt(ref Application app)
{
 try
 {
  app?.Quit();
 }
 catch (Exception e)
 {
  Console.WriteLine(e.Message);
 }

 app = null;
 GC.Collect();
}

public void Open(object app, string filePath)
{
 var ppt = app as Microsoft.Office.Interop.PowerPoint.Application;
 if (ppt == null)
 {
  return;
 }

 //正斜杠替换为反斜杠
 filePath = filePath.Replace('/', '\\');

 try
 {
  //以只读方式打开,方便操作结束后保存
  //使用一个不可能为密码的值(AssemblyGuid)作为密码打开PPT,保证有密码时打开失败
  var presentation = ppt.Presentations.Open(
   $"{filePath}::{Password}",
   MsoTriState.msoTrue, //ReadOnly: true
   MsoTriState.msoTrue, //Untitled: true
   MsoTriState.msoFalse); //WithWindow: false

  //获取真实宽高
  var officeWidth = presentation.PageSetup.SlideWidth;
  var officeHeight = presentation.PageSetup.SlideHeight;

  //获取页数
  var pageNumber = presentation.Slides.Count;

  var slideShowSettings = presentation?.SlideShowSettings;
  if (slideShowSettings == null)
  {
   return;
  }

  var window = slideShowSettings.Run();
 }
 catch (Exception e)
 {
  Console.WriteLine(e.Message);
 }
}

public void Close(SlideShowWindow window)
{
 try
 {
  window?.View.Exit();
 }
 catch (Exception e)
 {
  Console.WriteLine(e.Message);
 }
}

public void GotoSlide(SlideShowWindow window, int index)
{
 try
 {
  window?.View.GotoSlide(index);
 }
 catch (Exception e)
 {
  Console.WriteLine(e.Message);
 }
}

public void Next(SlideShowWindow window)
{
 try
 {
  window?.View.Next();
 }
 catch (Exception e)
 {
  Console.WriteLine(e.Message);
 }
}

public void Previous(SlideShowWindow window)
{
 try
 {
  window?.View.Previous();
 }
 catch (Exception e)
 {
  Console.WriteLine(e.Message);
 }
}

以上就是C# 多进程打开PPT的示例教程的详细内容,更多关于C# 多进程打开PPT的资料请关注我们其它相关文章!

(0)

相关推荐

  • C#向PPT文档插入图片以及导出图片的实例

    PowerPoint演示文稿是我们日常工作中常用的办公软件之一,而图片则是PowerPoint文档的重要组成部分,那么如何向幻灯片插入图片以及导出图片呢?本文我将给大家分享如何使用一个免费版PowerPoint组件-Free Spire.Presentation,以C#/VB.NET编程的方式来快速地实现这两个功能.我们可以从官网下载Free Spire.Presentation,创建项目后添加此DLL作为引用. 插入图片 向PPT文档插入图片时,这里我选择插入两张图片到不同的两张幻灯片中. 具

  • C# 使用Free Spire.Presentation 实现对PPT插入、编辑、删除表格

    现代学习和办公当中,经常会接触到对表格的运用,像各种单据.报表.账户等等.在PPT演示文稿中同样不可避免的应用到各种数据表格.对于在PPT中插入表格,我发现了一个新方法,不过我用到了一款免费的.NET组件--Free Spire.Presentation,在C#中添加该产品DLL文件,可以简单快速地实现对演示文稿的表格插入.编辑和删除等操作.有需要的话可以在下面的网址下载:https://www.e-iceblue.cn/Downloads/Free-Spire-Presentation-NET

  • C#如何添加PPT背景

    我们在创建Powerpoint文档时,系统默认的幻灯片是空白背景的,很多时候我们需要自定义幻灯片背景,以达到美观的文档效果.在下面的示例中将介绍给PowerPoint幻灯片设置背景的方法,主要包含以下三个部分: 添加纯色背景 添加渐变色背景 添加图片作为背景 所需工具 Free Spire.Presentation for .NET 版本3.3 (社区版) 示例代码(供参考) 步骤 1 :添加如下using指令 using Spire.Presentation; using Spire.Pres

  • C#提取PPT文本和图片的实现方法

    在图文混排的文档中,我们可以根据需要将文档中的文字信息或者图片提取出来,通过C#代码可以提取Word和PDF文件中的文本和图片,那么同样的,我们也可以提取PPT幻灯片当中的文本和图片.本篇文档将讲述如何使用C#来实现提取PPT文本和图片的操作.首先也是需要安装组件Spire.Presentation,然后添加引用dll文件到项目中.下面是主要的代码步骤. 原文档: 1. 提取文本 步骤一:创建一个Presentation实例并加载文档 Presentation presentation = ne

  • 在C#里面给PPT文档添加注释的实现代码

    平常开会或者做总结报告的时候我们通常都会用到PowerPoint演示文稿,我们可以在单个幻灯片或者全部幻灯片里面添加注释,这样观众可以从注释内容里面获取更多的相关信息. 有些朋友不清楚如何在幻灯片里面添加注释,下面我跟大家分享一下如何在C#里面为幻灯片添加注释. 在这里我使用了一个免费控件--Free Spire.Presentation,有兴趣的朋友可以下载使用. 需要添加的命名空间: using Spire.Presentation; using System.Drawing; 详细步骤和代

  • C# 实现对PPT文档加密、解密及重置密码的操作方法

    工作中我们会使用到各种各样的文档,其中,PPT起着不可或缺的作用.一份PPT文档里可能包含重要商业计划.企业运营资料或者公司管理资料等.因此,在竞争环境里,企业重要资料的保密工作就显得尤为重要,而对于重要资料我们可以选择添加密码的形式来进行文档保护.本文将介绍如何通过C#来给PPT添加密码,当然你也可以根据需要来修改密码或者解除密码.下面将对三种操作方法进行具体讲述. 所用工具: Spire.Presentation for. NET Visual Studio 2013 工具使用说明:Spir

  • C#将PPT文件转换成PDF文件

    这里在提供C#代码,将PPT转成PDF.直接上代码: 要引入Microsoft.Office.Interop.PowerPoint; 版本12.0.0.0: using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Runtime.InteropServices; using Microsoft.Office.Interop

  • C# 实现PPT 每一页转成图片过程解析

    要实现PPT转图片,首先需要引用两个DLL. 我这里用的这个这个版本 Microsoft.Office.Interop.PowerPoint 12.0 Microsoft Office 12.0 object Library 如下图: 代码如下: private void pptToImg(string pptPath, string imgPath) { var app = new Microsoft.Office.Interop.PowerPoint.Application(); var p

  • C#实现将PPT转换成HTML的方法

    本文是一个C#的小程序,主要实现将ppt转换成html的功能,方法很多,此处与大家分享一下,希望能对大家的项目开发起到一定的借鉴作用. 主要功能代码如下: using System; using System.Collections.Generic; using System.Text; using System.IO; using PPT = Microsoft.Office.Interop.PowerPoint; using System.Reflection; namespace Writ

  • word ppt excel文档转换成pdf的C#实现代码

    复制代码 代码如下: using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms; using Word = Microsoft.Office.Interop.Word;using Excel = Micro

  • C# / VB.NET 在PPT中创建、编辑PPT SmartArt图形的方法详解

    本文介绍通过C#和VB.NET程序代码来创建和编辑PPT文档中的SmartArt图形.文中将分两个操作示例来演示创建和编辑结果. 使用工具:Spire.Presentation for .NET hotfix 5.9.5 Dll文件引用: 方式1:下载包.下载后,解压,打开Bin文件夹,根据自己用的.NET Framework选择相应的文件夹,如:此示例中使用的是NET4.0,即打开NET4.0文件,找到Spire.Presentation.dll文件.找到dll文件后,在vs程序中添加引用该d

随机推荐