improve:issue #5
This commit is contained in:
@@ -85,9 +85,10 @@ namespace Ink_Canvas {
|
|||||||
public static bool IsShowingRestoreHiddenSlidesWindow = false;
|
public static bool IsShowingRestoreHiddenSlidesWindow = false;
|
||||||
private static bool IsShowingAutoplaySlidesWindow = false;
|
private static bool IsShowingAutoplaySlidesWindow = false;
|
||||||
|
|
||||||
// WPS 相关变量
|
// WPP 相关变量
|
||||||
private static Process wpsProcess = null;
|
private static Process wppProcess = null;
|
||||||
private static bool hasWpsProcessID = false;
|
private static bool hasWppProcessID = false;
|
||||||
|
private static System.Timers.Timer wppProcessCheckTimer = null;
|
||||||
|
|
||||||
|
|
||||||
private void TimerCheckPPT_Elapsed(object sender, ElapsedEventArgs e) {
|
private void TimerCheckPPT_Elapsed(object sender, ElapsedEventArgs e) {
|
||||||
@@ -549,13 +550,14 @@ namespace Ink_Canvas {
|
|||||||
try {
|
try {
|
||||||
if (isFloatingBarFolded) await UnFoldFloatingBar(new object());
|
if (isFloatingBarFolded) await UnFoldFloatingBar(new object());
|
||||||
|
|
||||||
// 对于延迟未关闭的 WPP,先记录进程 ID,待所有结束事件处理完毕后强制关闭
|
// 记录 WPP 进程 ID,用于后续检测未关闭的进程
|
||||||
if (pptApplication != null && pptApplication.Path.Contains("Kingsoft\\WPS Office\\") && pptApplication.Presentations.Count <= 1)
|
if (pptApplication != null && pptApplication.Path.Contains("Kingsoft\\WPS Office\\"))
|
||||||
{
|
{
|
||||||
uint processId;
|
uint processId;
|
||||||
GetWindowThreadProcessId((IntPtr)pptApplication.HWND, out processId);
|
GetWindowThreadProcessId((IntPtr)pptApplication.HWND, out processId);
|
||||||
wpsProcess = Process.GetProcessById((int)processId);
|
wppProcess = Process.GetProcessById((int)processId);
|
||||||
hasWpsProcessID = true;
|
hasWppProcessID = true;
|
||||||
|
LogHelper.WriteLogToFile($"记录 WPP 进程 ID: {processId}", LogHelper.LogType.Trace);
|
||||||
}
|
}
|
||||||
|
|
||||||
LogHelper.WriteLogToFile(string.Format("PowerPoint Slide Show End"), LogHelper.LogType.Event);
|
LogHelper.WriteLogToFile(string.Format("PowerPoint Slide Show End"), LogHelper.LogType.Event);
|
||||||
@@ -646,6 +648,12 @@ namespace Ink_Canvas {
|
|||||||
await Application.Current.Dispatcher.InvokeAsync(() => {
|
await Application.Current.Dispatcher.InvokeAsync(() => {
|
||||||
ViewboxFloatingBarMarginAnimation(100, true);
|
ViewboxFloatingBarMarginAnimation(100, true);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// 启动 WPP 进程检测定时器
|
||||||
|
if (hasWppProcessID && wppProcess != null)
|
||||||
|
{
|
||||||
|
StartWppProcessCheckTimer();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex) {
|
catch (Exception ex) {
|
||||||
LogHelper.WriteLogToFile(ex.ToString(), LogHelper.LogType.Error);
|
LogHelper.WriteLogToFile(ex.ToString(), LogHelper.LogType.Error);
|
||||||
@@ -1000,5 +1008,73 @@ namespace Ink_Canvas {
|
|||||||
private void ImagePPTControlEnd_MouseUp(object sender, MouseButtonEventArgs e) {
|
private void ImagePPTControlEnd_MouseUp(object sender, MouseButtonEventArgs e) {
|
||||||
BtnPPTSlideShowEnd_Click(BtnPPTSlideShowEnd, null);
|
BtnPPTSlideShowEnd_Click(BtnPPTSlideShowEnd, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void StartWppProcessCheckTimer()
|
||||||
|
{
|
||||||
|
if (wppProcessCheckTimer != null)
|
||||||
|
{
|
||||||
|
wppProcessCheckTimer.Stop();
|
||||||
|
wppProcessCheckTimer.Dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
wppProcessCheckTimer = new System.Timers.Timer(2000); // 2秒检查一次
|
||||||
|
wppProcessCheckTimer.Elapsed += WppProcessCheckTimer_Elapsed;
|
||||||
|
wppProcessCheckTimer.Start();
|
||||||
|
LogHelper.WriteLogToFile("启动 WPP 进程检测定时器", LogHelper.LogType.Trace);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void WppProcessCheckTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (wppProcess == null || hasWppProcessID == false)
|
||||||
|
{
|
||||||
|
StopWppProcessCheckTimer();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 刷新进程状态
|
||||||
|
wppProcess.Refresh();
|
||||||
|
|
||||||
|
if (wppProcess.HasExited)
|
||||||
|
{
|
||||||
|
LogHelper.WriteLogToFile("WPP 进程已正常关闭", LogHelper.LogType.Trace);
|
||||||
|
StopWppProcessCheckTimer();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// 检查是否超过 5 秒仍未关闭
|
||||||
|
var processStartTime = wppProcess.StartTime;
|
||||||
|
var timeSinceStart = DateTime.Now - processStartTime;
|
||||||
|
|
||||||
|
if (timeSinceStart.TotalSeconds > 5)
|
||||||
|
{
|
||||||
|
LogHelper.WriteLogToFile("检测到长时间未关闭的 WPP 进程,开始强制关闭", LogHelper.LogType.Event);
|
||||||
|
wppProcess.Kill();
|
||||||
|
LogHelper.WriteLogToFile("强制关闭 WPP 进程成功", LogHelper.LogType.Event);
|
||||||
|
StopWppProcessCheckTimer();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
LogHelper.WriteLogToFile($"WPP 进程检测失败: {ex.ToString()}", LogHelper.LogType.Error);
|
||||||
|
StopWppProcessCheckTimer();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void StopWppProcessCheckTimer()
|
||||||
|
{
|
||||||
|
if (wppProcessCheckTimer != null)
|
||||||
|
{
|
||||||
|
wppProcessCheckTimer.Stop();
|
||||||
|
wppProcessCheckTimer.Dispose();
|
||||||
|
wppProcessCheckTimer = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
wppProcess = null;
|
||||||
|
hasWppProcessID = false;
|
||||||
|
LogHelper.WriteLogToFile("停止 WPP 进程检测定时器", LogHelper.LogType.Trace);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user