[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="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="ToggleSwitchAutoSaveScreenShotInPowerPoint" Header="自动幻灯片截屏" IsOn="True" FontFamily="Microsoft YaHei UI" OnContent="开" OffContent="关" Toggled="ToggleSwitchAutoSaveScreenShotInPowerPoint_Toggled"/>
<TextBlock Text="开启后将在结束幻灯片放映时自动将已有墨迹保存至此电脑,并在下次打开时自动加载(文件名和幻灯片页数都要相同)" TextWrapping="Wrap" Foreground="#666666"/>
<ui:ToggleSwitch Name="ToggleSwitchAutoSaveStrokesInPowerPoint" Header="自动保存幻灯片墨迹" IsOn="True" FontFamily="Microsoft YaHei UI" OnContent="开" OffContent="关" Toggled="ToggleSwitchAutoSaveStrokesInPowerPoint_Toggled"/>
</ui:SimpleStackPanel>

View File

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

View File

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