真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

怎么在C#中利用多進程打開PPT-創(chuàng)新互聯(lián)

怎么在C#中利用多進程打開PPT?相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。

堅守“ 做人真誠 · 做事靠譜 · 口碑至上 · 高效敬業(yè) ”的價值觀,專業(yè)網(wǎng)站建設服務10余年為成都葡萄架小微創(chuàng)業(yè)公司專業(yè)提供成都企業(yè)網(wǎng)站建設營銷網(wǎng)站建設商城網(wǎng)站建設手機網(wǎng)站建設小程序網(wǎng)站建設網(wǎng)站改版,從內(nèi)容策劃、視覺設計、底層架構、網(wǎng)頁布局、功能開發(fā)迭代于一體的高端網(wǎng)站建設服務。

1、背景

PPT文件打開和操作是在一個進程中進行的,如果對多個PPT進行操作,PowerPoint進程默認會以阻塞的方式依次進行,如果打開的PPT特別大(比如超過1GB)很容易造成PPT無響應,這樣幾乎所有的PPT操作都無法進行。

解決PPT無響應的一種方式是定時檢測PPT進程(POWERPNT.exe)是否無響應,如果無響應就將POWERPNT.exe進程Kill掉,重新打開PPT。這種方式并不能解決需要多個PPT操作的問題,如果多個PPT文件都很大,操作多個PPT會頻繁出現(xiàn)PPT無響應的情況。

解決PPT無響應的另一種方式是使用多進程方式打開PPT。PPT默認是無法使用多個進程打開的,在使用不同用戶打開PPT的情況下,可以打開不同的PPT進程,其原因見參考文檔。

2、具體方法

使用多用戶打開PPT的方法,首先需要內(nèi)置不同的用戶,這可以通過代碼實現(xiàn)(需要管理員權限),也能通過Windows用戶設置添加指定的用戶。使用代碼操作用戶稍后會有參考代碼。

其次是使用指定用戶(及密碼)啟動封裝好PPT操作的進程,然后通過進程間通信的方式(管道、COPYDATA 消息、MQTT,推薦管道或者COPYDATA消息,不用依賴第三方庫)進行PPT控制(打開、翻頁、跳轉、媒體控制等)。

3、參考代碼

(1)使用指定用戶打開進程的代碼片段(args參數(shù)可以傳遞管道名稱或者自定義消息)

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;

  //獲取頁數(shù)
  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);
 }
}

看完上述內(nèi)容,你們掌握怎么在C#中利用多進程打開PPT的方法了嗎?如果還想學到更多技能或想了解更多相關內(nèi)容,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!


分享題目:怎么在C#中利用多進程打開PPT-創(chuàng)新互聯(lián)
當前地址:http://weahome.cn/article/dgjedd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部