C# 多進程打開PPT的示例教程
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);
}
}
以上就是C# 多進程打開PPT的示例教程的詳細內(nèi)容,更多關于C# 多進程打開PPT的資料請關注腳本之家其它相關文章!
- C# / VB.NET 在PPT中創(chuàng)建、編輯PPT SmartArt圖形的方法詳解
- C# 實現(xiàn)PPT 每一頁轉成圖片過程解析
- C#將PPT文件轉換成PDF文件
- C#如何添加PPT背景
- C# 實現(xiàn)對PPT文檔加密、解密及重置密碼的操作方法
- C#提取PPT文本和圖片的實現(xiàn)方法
- C# 使用Free Spire.Presentation 實現(xiàn)對PPT插入、編輯、刪除表格
- 在C#里面給PPT文檔添加注釋的實現(xiàn)代碼
- C#向PPT文檔插入圖片以及導出圖片的實例
- C#實現(xiàn)將PPT轉換成HTML的方法
- word ppt excel文檔轉換成pdf的C#實現(xiàn)代碼
- C#/VB.NET 自定義PPT動畫路徑的步驟

