[feat] 新增 PPT 清屏 / 翻页截图

优化截图文件名, 以 PPT 文件名进行分类
清屏时增加时间戳区分, 确保保存所有内容
This commit is contained in:
kengwang 2023-02-05 00:57:28 +08:00
parent 1912965309
commit 80d2104447
No known key found for this signature in database
GPG Key ID: 9ED4CB8A0CF42B18
3 changed files with 49 additions and 11 deletions

View File

@ -442,6 +442,7 @@
<ui:ToggleSwitch Name="ToggleSwitchAutoSaveStrokesAtScreenshot" Header="截图时自动保存墨迹" IsOn="False" FontFamily="Microsoft YaHei UI" OnContent="开" OffContent="关" Toggled="ToggleSwitchAutoSaveStrokesAtScreenshot_Toggled"/> <ui:ToggleSwitch Name="ToggleSwitchAutoSaveStrokesAtScreenshot" Header="截图时自动保存墨迹" IsOn="False" FontFamily="Microsoft YaHei UI" OnContent="开" OffContent="关" Toggled="ToggleSwitchAutoSaveStrokesAtScreenshot_Toggled"/>
<ui:ToggleSwitch Name="ToggleSwitchAutoSaveStrokesAtClear" Header="清屏时自动截图" IsOn="False" FontFamily="Microsoft YaHei UI" OnContent="开" OffContent="关" Toggled="ToggleSwitchAutoSaveStrokesAtClear_Toggled"/> <ui:ToggleSwitch Name="ToggleSwitchAutoSaveStrokesAtClear" Header="清屏时自动截图" IsOn="False" FontFamily="Microsoft YaHei UI" OnContent="开" OffContent="关" Toggled="ToggleSwitchAutoSaveStrokesAtClear_Toggled"/>
<ui:ToggleSwitch Name="ToggleSwitchClearExitingWritingMode" Header="切换到鼠标模式后自动清屏" IsOn="False" FontFamily="Microsoft YaHei UI" OnContent="开" OffContent="关" Toggled="ToggleSwitchExitingWritingMode_Toggled"/> <ui:ToggleSwitch Name="ToggleSwitchClearExitingWritingMode" Header="切换到鼠标模式后自动清屏" IsOn="False" FontFamily="Microsoft YaHei UI" OnContent="开" OffContent="关" Toggled="ToggleSwitchExitingWritingMode_Toggled"/>
<ui:ToggleSwitch Name="ToggleSwitchAutoSaveScreenShotInPowerPoint" Header="自动幻灯片截屏" IsOn="True" FontFamily="Microsoft YaHei UI" OnContent="开" OffContent="关" Toggled="ToggleSwitchAutoSaveScreenShotInPowerPoint_Toggled"/>
<TextBlock Text="开启后将在结束幻灯片放映时自动将已有墨迹保存至此电脑,并在下次打开时自动加载(文件名和幻灯片页数都要相同)" TextWrapping="Wrap" Foreground="#666666"/> <TextBlock Text="开启后将在结束幻灯片放映时自动将已有墨迹保存至此电脑,并在下次打开时自动加载(文件名和幻灯片页数都要相同)" TextWrapping="Wrap" Foreground="#666666"/>
<ui:ToggleSwitch Name="ToggleSwitchAutoSaveStrokesInPowerPoint" Header="自动保存幻灯片墨迹" IsOn="True" FontFamily="Microsoft YaHei UI" OnContent="开" OffContent="关" Toggled="ToggleSwitchAutoSaveStrokesInPowerPoint_Toggled"/> <ui:ToggleSwitch Name="ToggleSwitchAutoSaveStrokesInPowerPoint" Header="自动保存幻灯片墨迹" IsOn="True" FontFamily="Microsoft YaHei UI" OnContent="开" OffContent="关" Toggled="ToggleSwitchAutoSaveStrokesInPowerPoint_Toggled"/>
</ui:SimpleStackPanel> </ui:SimpleStackPanel>

View File

@ -37,6 +37,7 @@ using System.Windows.Media.Animation;
using System.Windows.Ink.AnalysisCore; using System.Windows.Ink.AnalysisCore;
using Ink_Canvas.Helpers; using Ink_Canvas.Helpers;
using Microsoft.Win32; using Microsoft.Win32;
using Path = System.IO.Path;
namespace Ink_Canvas namespace Ink_Canvas
{ {
@ -723,6 +724,15 @@ namespace Ink_Canvas
{ {
ToggleSwitchAutoSaveStrokesInPowerPoint.IsOn = false; ToggleSwitchAutoSaveStrokesInPowerPoint.IsOn = false;
} }
if (Settings.Automation.IsAutoSaveScreenShotInPowerPoint)
{
ToggleSwitchAutoSaveScreenShotInPowerPoint.IsOn = true;
}
else
{
ToggleSwitchAutoSaveScreenShotInPowerPoint.IsOn = false;
}
} }
else else
{ {
@ -1952,11 +1962,16 @@ namespace Ink_Canvas
pptApplication.SlideShowEnd -= PptApplication_SlideShowEnd; pptApplication.SlideShowEnd -= PptApplication_SlideShowEnd;
pptApplication = null; pptApplication = null;
timerCheckPPT.Start(); timerCheckPPT.Start();
Application.Current.Dispatcher.Invoke(() =>
{
BtnPPTSlideShow.Visibility = Visibility.Collapsed; BtnPPTSlideShow.Visibility = Visibility.Collapsed;
BtnPPTSlideShowEnd.Visibility = Visibility.Collapsed; BtnPPTSlideShowEnd.Visibility = Visibility.Collapsed;
});
} }
bool isPresentationHaveBlackSpace = false; bool isPresentationHaveBlackSpace = false;
private string pptName = null;
//bool isButtonBackgroundTransparent = true; //此变量仅用于保存用于幻灯片放映时的优化 //bool isButtonBackgroundTransparent = true; //此变量仅用于保存用于幻灯片放映时的优化
private void PptApplication_SlideShowBegin(SlideShowWindow Wn) private void PptApplication_SlideShowBegin(SlideShowWindow Wn)
{ {
@ -1996,6 +2011,7 @@ namespace Ink_Canvas
previousSlideID = 0; previousSlideID = 0;
memoryStreams = new MemoryStream[slidescount + 2]; memoryStreams = new MemoryStream[slidescount + 2];
pptName = Wn.Presentation.Name;
LogHelper.NewLog("Name: " + Wn.Presentation.Name); LogHelper.NewLog("Name: " + Wn.Presentation.Name);
LogHelper.NewLog("Slides Count: " + slidescount.ToString()); LogHelper.NewLog("Slides Count: " + slidescount.ToString());
@ -2243,6 +2259,9 @@ namespace Ink_Canvas
ms.Position = 0; ms.Position = 0;
memoryStreams[previousSlideID] = ms; memoryStreams[previousSlideID] = ms;
if (inkCanvas.Strokes.Count > 0 && Settings.Automation.IsAutoSaveScreenShotInPowerPoint)
SaveScreenShot(true, Wn.Presentation.Name + "/" + Wn.View.CurrentShowPosition);
BtnRedo.IsEnabled = false; BtnRedo.IsEnabled = false;
BtnRedo.Visibility = Visibility.Collapsed; BtnRedo.Visibility = Visibility.Collapsed;
@ -2637,6 +2656,13 @@ namespace Ink_Canvas
SaveSettingsToFile(); SaveSettingsToFile();
} }
private void ToggleSwitchAutoSaveScreenShotInPowerPoint_Toggled(object sender, RoutedEventArgs e)
{
if (!isLoaded) return;
Settings.Automation.IsAutoSaveScreenShotInPowerPoint = ToggleSwitchAutoSaveScreenShotInPowerPoint.IsOn;
SaveSettingsToFile();
}
#endregion #endregion
#region Gesture #region Gesture
@ -5508,7 +5534,13 @@ namespace Ink_Canvas
Thread.Sleep(20); Thread.Sleep(20);
try try
{ {
Application.Current.Dispatcher.Invoke(() => { SaveScreenShot(isHideNotification); }); Application.Current.Dispatcher.Invoke(() =>
{
if (BtnPPTSlideShowEnd.Visibility == Visibility.Visible)
SaveScreenShot(isHideNotification, $"{pptName}/{previousSlideID}_{DateTime.Now:HH-mm-ss}");
else
SaveScreenShot(isHideNotification);
});
} }
catch catch
{ {
@ -5538,7 +5570,7 @@ namespace Ink_Canvas
})).Start(); })).Start();
} }
private void SaveScreenShot(bool isHideNotification) private void SaveScreenShot(bool isHideNotification, string fileName = null)
{ {
System.Drawing.Rectangle rc = System.Windows.Forms.SystemInformation.VirtualScreen; System.Drawing.Rectangle rc = System.Windows.Forms.SystemInformation.VirtualScreen;
var bitmap = new System.Drawing.Bitmap(rc.Width, rc.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb); var bitmap = new System.Drawing.Bitmap(rc.Width, rc.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
@ -5548,19 +5580,22 @@ namespace Ink_Canvas
memoryGrahics.CopyFromScreen(rc.X, rc.Y, 0, 0, rc.Size, System.Drawing.CopyPixelOperation.SourceCopy); memoryGrahics.CopyFromScreen(rc.X, rc.Y, 0, 0, rc.Size, System.Drawing.CopyPixelOperation.SourceCopy);
} }
if (!Directory.Exists(Environment.GetFolderPath(Environment.SpecialFolder.MyPictures) + @"\Ink Canvas Screenshots")) if (string.IsNullOrWhiteSpace(fileName))
fileName = DateTime.Now.ToString("HH-mm-ss");
var savePath =
$@"{Environment.GetFolderPath(Environment.SpecialFolder.MyPictures)}\Ink Canvas Screenshots\{DateTime.Now.Date:yyyyMMdd}\{fileName}.png";
if (!Directory.Exists(Path.GetDirectoryName(savePath)))
{ {
Directory.CreateDirectory(Environment.GetFolderPath(Environment.SpecialFolder.MyPictures) + Directory.CreateDirectory(Path.GetDirectoryName(savePath));
@"\Ink Canvas Screenshots");
} }
bitmap.Save(Environment.GetFolderPath(Environment.SpecialFolder.MyPictures) + bitmap.Save(savePath, ImageFormat.Png);
@"\Ink Canvas Screenshots\" + DateTime.Now.ToString("u").Replace(':', '-') + ".png", ImageFormat.Png);
if (!isHideNotification) if (!isHideNotification)
{ {
ShowNotification("截图成功保存至 " + Environment.GetFolderPath(Environment.SpecialFolder.MyPictures) + ShowNotification("截图成功保存至 " + savePath);
@"\Ink Canvas Screenshots\" + DateTime.Now.ToString("u").Replace(':', '-') + ".png");
} }
} }

View File

@ -97,6 +97,8 @@ namespace Ink_Canvas
public bool IsAutoSaveStrokesAtClear { get; set; } = false; public bool IsAutoSaveStrokesAtClear { get; set; } = false;
[JsonProperty("isAutoSaveStrokesInPowerPoint")] [JsonProperty("isAutoSaveStrokesInPowerPoint")]
public bool IsAutoSaveStrokesInPowerPoint { get; set; } = true; public bool IsAutoSaveStrokesInPowerPoint { get; set; } = true;
[JsonProperty("isAutoSaveScreenShotInPowerPoint")]
public bool IsAutoSaveScreenShotInPowerPoint { get; set; } = false;
[JsonProperty("isAutoClearWhenExitingWritingMode")] [JsonProperty("isAutoClearWhenExitingWritingMode")]
public bool IsAutoClearWhenExitingWritingMode { get; set; } = false; public bool IsAutoClearWhenExitingWritingMode { get; set; } = false;