fix:只读状态下无法识别的问题

This commit is contained in:
CJK_mkp
2025-06-12 14:26:01 +08:00
parent 8e8f4256ac
commit d250e83df9
+43 -32
View File
@@ -31,7 +31,24 @@ namespace Ink_Canvas {
try { try {
if (pptApplication != null) { if (pptApplication != null) {
//获得演示文稿对象 //获得演示文稿对象
presentation = pptApplication.ActivePresentation; try {
presentation = pptApplication.ActivePresentation;
}
catch (COMException) {
// ActivePresentation 可能因只读等原因抛异常,遍历 Presentations
presentation = null;
foreach (Presentation pres in pptApplication.Presentations) {
try {
if (pres.ReadOnly == MsoTriState.msoFalse) {
presentation = pres;
break;
}
} catch { }
}
// 如果没有可编辑的,选择第一个只读的
if (presentation == null && pptApplication.Presentations.Count > 0)
presentation = pptApplication.Presentations[1];
}
pptApplication.SlideShowBegin += PptApplication_SlideShowBegin; pptApplication.SlideShowBegin += PptApplication_SlideShowBegin;
pptApplication.SlideShowNextSlide += PptApplication_SlideShowNextSlide; pptApplication.SlideShowNextSlide += PptApplication_SlideShowNextSlide;
pptApplication.SlideShowEnd += PptApplication_SlideShowEnd; pptApplication.SlideShowEnd += PptApplication_SlideShowEnd;
@@ -90,45 +107,37 @@ namespace Ink_Canvas {
// 检查是否已有初始化的 PowerPoint 实例 // 检查是否已有初始化的 PowerPoint 实例
if (!isPowerPointInitialized) if (!isPowerPointInitialized)
{ {
// 检查 WPS 进程(如果不支持则返回) // 优先检测WPS进程
var wpsProcesses = Process.GetProcessesByName("wpp"); var wpsProcesses = Process.GetProcessesByName("wpp");
if (wpsProcesses.Length > 0 && !isWPSSupportOn) var pptProcesses = Process.GetProcessesByName("POWERPNT");
return;
try // 优先获取WPS实例
if (isWPSSupportOn && wpsProcesses.Length > 0)
{ {
if (isWPSSupportOn && wpsProcesses.Length > 0) try
{ {
// 优先获取WPS实例 pptApplication = (Microsoft.Office.Interop.PowerPoint.Application)Marshal.GetActiveObject("wpp.Application");
try
{
pptApplication = (Microsoft.Office.Interop.PowerPoint.Application)Marshal.GetActiveObject("wpp.Application");
}
catch (COMException)
{
// WPS未启动或未注册
pptApplication = null;
}
} }
if (pptApplication == null) catch (COMException)
{ {
// 获取PowerPoint实例 pptApplication = null;
try
{
pptApplication = (Microsoft.Office.Interop.PowerPoint.Application)Marshal.GetActiveObject("PowerPoint.Application");
}
catch (COMException)
{
pptApplication = null;
}
} }
} }
catch (Exception)
// 如果未获取到WPS实例,尝试获取PowerPoint实例
if (pptApplication == null && pptProcesses.Length > 0)
{ {
pptApplication = null; try
{
pptApplication = (Microsoft.Office.Interop.PowerPoint.Application)Marshal.GetActiveObject("PowerPoint.Application");
}
catch (COMException)
{
pptApplication = null;
}
} }
// 如果没有找到运行中的实例,则自动创建PowerPoint进程(仅在未启用WPS支持时) // 如果没有找到,且未启用WPS支持,则自动创建PowerPoint进程
if (pptApplication == null && !isWPSSupportOn) if (pptApplication == null && !isWPSSupportOn)
{ {
try try
@@ -145,11 +154,13 @@ namespace Ink_Canvas {
return; return;
} }
// 检查 PowerPoint 进程是否还在 // 检查进程是否还在
var pptProcesses = Process.GetProcessesByName("POWERPNT"); var pptProcessesCheck = Process.GetProcessesByName("POWERPNT");
var wpsProcessesCheck = Process.GetProcessesByName("wpp"); var wpsProcessesCheck = Process.GetProcessesByName("wpp");
bool isWpsMode = isWPSSupportOn && wpsProcessesCheck.Length > 0; bool isWpsMode = isWPSSupportOn && wpsProcessesCheck.Length > 0;
if ((isWpsMode && wpsProcessesCheck.Length == 0) || (!isWpsMode && pptProcesses.Length == 0)) bool isPptMode = !isWPSSupportOn && pptProcessesCheck.Length > 0;
if ((isWpsMode && wpsProcessesCheck.Length == 0) || (!isWpsMode && pptProcessesCheck.Length == 0))
{ {
// 进程已关闭,清理对象 // 进程已关闭,清理对象
if (pptApplication != null) if (pptApplication != null)