mirror of
https://github.com/ShareX/ShareX.git
synced 2024-09-30 01:07:21 +13:00
ExecuteJob methods moved to TaskHelpers, Capture related methods moved to CaptureTaskHelpers
This commit is contained in:
parent
e2a6e5fba3
commit
6b5940a135
4 changed files with 573 additions and 536 deletions
368
ShareX/CaptureTaskHelpers.cs
Normal file
368
ShareX/CaptureTaskHelpers.cs
Normal file
|
@ -0,0 +1,368 @@
|
|||
#region License Information (GPL v3)
|
||||
|
||||
/*
|
||||
ShareX - A program that allows you to take screenshots and share any file type
|
||||
Copyright (c) 2007-2016 ShareX Team
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
Optionally you can also view the license at <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#endregion License Information (GPL v3)
|
||||
|
||||
using ShareX.HelpersLib;
|
||||
using ShareX.ScreenCaptureLib;
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Drawing;
|
||||
using System.Threading;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace ShareX
|
||||
{
|
||||
public static class CaptureTaskHelpers
|
||||
{
|
||||
public delegate Image ScreenCaptureDelegate();
|
||||
|
||||
private enum LastRegionCaptureType { Default, Light, Transparent }
|
||||
|
||||
private static LastRegionCaptureType lastRegionCaptureType = LastRegionCaptureType.Default;
|
||||
|
||||
public static void CaptureScreenshot(CaptureType captureType, TaskSettings taskSettings = null, bool autoHideForm = true)
|
||||
{
|
||||
if (taskSettings == null) taskSettings = TaskSettings.GetDefaultTaskSettings();
|
||||
|
||||
switch (captureType)
|
||||
{
|
||||
case CaptureType.Fullscreen:
|
||||
DoCapture(TaskHelpers.GetScreenshot(taskSettings).CaptureFullscreen, CaptureType.Fullscreen, taskSettings, autoHideForm);
|
||||
break;
|
||||
case CaptureType.ActiveWindow:
|
||||
CaptureActiveWindow(taskSettings, autoHideForm);
|
||||
break;
|
||||
case CaptureType.ActiveMonitor:
|
||||
DoCapture(TaskHelpers.GetScreenshot(taskSettings).CaptureActiveMonitor, CaptureType.ActiveMonitor, taskSettings, autoHideForm);
|
||||
break;
|
||||
case CaptureType.Region:
|
||||
CaptureRegion(taskSettings, autoHideForm);
|
||||
break;
|
||||
case CaptureType.CustomRegion:
|
||||
CaptureCustomRegion(taskSettings, autoHideForm);
|
||||
break;
|
||||
case CaptureType.LastRegion:
|
||||
CaptureLastRegion(taskSettings, autoHideForm);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public static void DoCapture(ScreenCaptureDelegate capture, CaptureType captureType, TaskSettings taskSettings = null, bool autoHideForm = true)
|
||||
{
|
||||
if (taskSettings == null) taskSettings = TaskSettings.GetDefaultTaskSettings();
|
||||
|
||||
if (taskSettings.CaptureSettings.IsDelayScreenshot && taskSettings.CaptureSettings.DelayScreenshot > 0)
|
||||
{
|
||||
TaskEx.Run(() =>
|
||||
{
|
||||
int sleep = (int)(taskSettings.CaptureSettings.DelayScreenshot * 1000);
|
||||
Thread.Sleep(sleep);
|
||||
},
|
||||
() =>
|
||||
{
|
||||
DoCaptureWork(capture, captureType, taskSettings, autoHideForm);
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
DoCaptureWork(capture, captureType, taskSettings, autoHideForm);
|
||||
}
|
||||
}
|
||||
|
||||
private static void DoCaptureWork(ScreenCaptureDelegate capture, CaptureType captureType, TaskSettings taskSettings, bool autoHideForm = true)
|
||||
{
|
||||
if (autoHideForm)
|
||||
{
|
||||
Program.MainForm.Hide();
|
||||
Thread.Sleep(250);
|
||||
}
|
||||
|
||||
Image img = null;
|
||||
|
||||
try
|
||||
{
|
||||
img = capture();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
DebugHelper.WriteException(ex);
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (autoHideForm)
|
||||
{
|
||||
Program.MainForm.ForceActivate();
|
||||
}
|
||||
|
||||
AfterCapture(img, captureType, taskSettings);
|
||||
}
|
||||
}
|
||||
|
||||
private static void AfterCapture(Image img, CaptureType captureType, TaskSettings taskSettings)
|
||||
{
|
||||
if (img != null)
|
||||
{
|
||||
if (taskSettings.GeneralSettings.PlaySoundAfterCapture)
|
||||
{
|
||||
TaskHelpers.PlayCaptureSound(taskSettings);
|
||||
}
|
||||
|
||||
if (taskSettings.ImageSettings.ImageEffectOnlyRegionCapture && !IsRegionCapture(captureType))
|
||||
{
|
||||
taskSettings.AfterCaptureJob = taskSettings.AfterCaptureJob.Remove(AfterCaptureTasks.AddImageEffects);
|
||||
}
|
||||
|
||||
UploadManager.RunImageTask(img, taskSettings);
|
||||
}
|
||||
}
|
||||
|
||||
private static bool IsRegionCapture(CaptureType captureType)
|
||||
{
|
||||
return captureType.HasFlagAny(CaptureType.Region, CaptureType.LastRegion);
|
||||
}
|
||||
|
||||
public static void CaptureActiveWindow(TaskSettings taskSettings, bool autoHideForm = true)
|
||||
{
|
||||
DoCapture(() =>
|
||||
{
|
||||
Image img;
|
||||
string activeWindowTitle = NativeMethods.GetForegroundWindowText();
|
||||
string activeProcessName = null;
|
||||
|
||||
using (Process process = NativeMethods.GetForegroundWindowProcess())
|
||||
{
|
||||
if (process != null)
|
||||
{
|
||||
activeProcessName = process.ProcessName;
|
||||
}
|
||||
}
|
||||
|
||||
if (taskSettings.CaptureSettings.CaptureTransparent && !taskSettings.CaptureSettings.CaptureClientArea)
|
||||
{
|
||||
img = TaskHelpers.GetScreenshot(taskSettings).CaptureActiveWindowTransparent();
|
||||
}
|
||||
else
|
||||
{
|
||||
img = TaskHelpers.GetScreenshot(taskSettings).CaptureActiveWindow();
|
||||
}
|
||||
|
||||
img.Tag = new ImageTag
|
||||
{
|
||||
WindowTitle = activeWindowTitle,
|
||||
ProcessName = activeProcessName
|
||||
};
|
||||
|
||||
return img;
|
||||
}, CaptureType.ActiveWindow, taskSettings, autoHideForm);
|
||||
}
|
||||
|
||||
public static void CaptureCustomRegion(TaskSettings taskSettings, bool autoHideForm)
|
||||
{
|
||||
DoCapture(() =>
|
||||
{
|
||||
Rectangle regionBounds = taskSettings.CaptureSettings.CaptureCustomRegion;
|
||||
Image img = TaskHelpers.GetScreenshot(taskSettings).CaptureRectangle(regionBounds);
|
||||
|
||||
return img;
|
||||
}, CaptureType.CustomRegion, taskSettings, autoHideForm);
|
||||
}
|
||||
|
||||
public static void CaptureWindow(IntPtr handle, TaskSettings taskSettings = null, bool autoHideForm = true)
|
||||
{
|
||||
if (taskSettings == null) taskSettings = TaskSettings.GetDefaultTaskSettings();
|
||||
|
||||
autoHideForm = autoHideForm && handle != Program.MainForm.Handle;
|
||||
|
||||
DoCapture(() =>
|
||||
{
|
||||
if (NativeMethods.IsIconic(handle))
|
||||
{
|
||||
NativeMethods.RestoreWindow(handle);
|
||||
}
|
||||
|
||||
NativeMethods.SetForegroundWindow(handle);
|
||||
Thread.Sleep(250);
|
||||
|
||||
if (taskSettings.CaptureSettings.CaptureTransparent && !taskSettings.CaptureSettings.CaptureClientArea)
|
||||
{
|
||||
return TaskHelpers.GetScreenshot(taskSettings).CaptureWindowTransparent(handle);
|
||||
}
|
||||
|
||||
return TaskHelpers.GetScreenshot(taskSettings).CaptureWindow(handle);
|
||||
}, CaptureType.Window, taskSettings, autoHideForm);
|
||||
}
|
||||
|
||||
public static void CaptureRegion(TaskSettings taskSettings, bool autoHideForm = true)
|
||||
{
|
||||
RegionCaptureForm form = new RegionCaptureForm(RegionCaptureMode.Annotation);
|
||||
|
||||
DoCapture(() =>
|
||||
{
|
||||
Image img = null;
|
||||
|
||||
try
|
||||
{
|
||||
form.Config = taskSettings.CaptureSettingsReference.SurfaceOptions;
|
||||
form.Prepare(TaskHelpers.GetScreenshot(taskSettings).CaptureFullscreen());
|
||||
form.ShowDialog();
|
||||
|
||||
img = form.GetResultImage();
|
||||
|
||||
if (img != null)
|
||||
{
|
||||
if (form.Result == RegionResult.Region && taskSettings.UploadSettings.RegionCaptureUseWindowPattern)
|
||||
{
|
||||
WindowInfo windowInfo = form.GetWindowInfo();
|
||||
|
||||
if (windowInfo != null)
|
||||
{
|
||||
img.Tag = new ImageTag
|
||||
{
|
||||
WindowTitle = windowInfo.Text,
|
||||
ProcessName = windowInfo.ProcessName
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
lastRegionCaptureType = LastRegionCaptureType.Default;
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (form != null)
|
||||
{
|
||||
form.Dispose();
|
||||
}
|
||||
}
|
||||
|
||||
return img;
|
||||
}, CaptureType.Region, taskSettings, autoHideForm);
|
||||
}
|
||||
|
||||
public static void CaptureRectangleLight(TaskSettings taskSettings = null, bool autoHideForm = true)
|
||||
{
|
||||
if (taskSettings == null) taskSettings = TaskSettings.GetDefaultTaskSettings();
|
||||
|
||||
DoCapture(() =>
|
||||
{
|
||||
Image img = null;
|
||||
|
||||
using (RegionCaptureLightForm rectangleLight = new RegionCaptureLightForm(TaskHelpers.GetScreenshot(taskSettings)))
|
||||
{
|
||||
if (rectangleLight.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
img = rectangleLight.GetAreaImage();
|
||||
|
||||
if (img != null)
|
||||
{
|
||||
lastRegionCaptureType = LastRegionCaptureType.Light;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return img;
|
||||
}, CaptureType.Region, taskSettings, autoHideForm);
|
||||
}
|
||||
|
||||
public static void CaptureRectangleTransparent(TaskSettings taskSettings = null, bool autoHideForm = true)
|
||||
{
|
||||
if (taskSettings == null) taskSettings = TaskSettings.GetDefaultTaskSettings();
|
||||
|
||||
DoCapture(() =>
|
||||
{
|
||||
Image img = null;
|
||||
|
||||
using (RegionCaptureTransparentForm rectangleTransparent = new RegionCaptureTransparentForm())
|
||||
{
|
||||
if (rectangleTransparent.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
img = rectangleTransparent.GetAreaImage(TaskHelpers.GetScreenshot(taskSettings));
|
||||
|
||||
if (img != null)
|
||||
{
|
||||
lastRegionCaptureType = LastRegionCaptureType.Transparent;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return img;
|
||||
}, CaptureType.Region, taskSettings, autoHideForm);
|
||||
}
|
||||
|
||||
public static void CaptureLastRegion(TaskSettings taskSettings, bool autoHideForm = true)
|
||||
{
|
||||
switch (lastRegionCaptureType)
|
||||
{
|
||||
case LastRegionCaptureType.Default:
|
||||
if (RegionCaptureForm.LastRegionFillPath != null)
|
||||
{
|
||||
DoCapture(() =>
|
||||
{
|
||||
using (Image screenshot = TaskHelpers.GetScreenshot(taskSettings).CaptureFullscreen())
|
||||
{
|
||||
return RegionCaptureTasks.ApplyRegionPathToImage(screenshot, RegionCaptureForm.LastRegionFillPath);
|
||||
}
|
||||
}, CaptureType.LastRegion, taskSettings, autoHideForm);
|
||||
}
|
||||
else
|
||||
{
|
||||
CaptureRegion(taskSettings, autoHideForm);
|
||||
}
|
||||
break;
|
||||
case LastRegionCaptureType.Light:
|
||||
if (!RegionCaptureLightForm.LastSelectionRectangle0Based.IsEmpty)
|
||||
{
|
||||
DoCapture(() =>
|
||||
{
|
||||
using (Image screenshot = TaskHelpers.GetScreenshot(taskSettings).CaptureFullscreen())
|
||||
{
|
||||
return ImageHelpers.CropImage(screenshot, RegionCaptureLightForm.LastSelectionRectangle0Based);
|
||||
}
|
||||
}, CaptureType.LastRegion, taskSettings, autoHideForm);
|
||||
}
|
||||
else
|
||||
{
|
||||
CaptureRectangleLight(taskSettings, autoHideForm);
|
||||
}
|
||||
break;
|
||||
case LastRegionCaptureType.Transparent:
|
||||
if (!RegionCaptureTransparentForm.LastSelectionRectangle0Based.IsEmpty)
|
||||
{
|
||||
DoCapture(() =>
|
||||
{
|
||||
using (Image screenshot = TaskHelpers.GetScreenshot(taskSettings).CaptureFullscreen())
|
||||
{
|
||||
return ImageHelpers.CropImage(screenshot, RegionCaptureTransparentForm.LastSelectionRectangle0Based);
|
||||
}
|
||||
}, CaptureType.LastRegion, taskSettings, autoHideForm);
|
||||
}
|
||||
else
|
||||
{
|
||||
CaptureRectangleTransparent(taskSettings, autoHideForm);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -348,7 +348,7 @@ private ToolStripMenuItem WorkflowMenuItem(HotkeySettings hotkeySetting)
|
|||
{
|
||||
tsmi.Font = new Font(tsmi.Font, FontStyle.Bold);
|
||||
}
|
||||
tsmi.Click += (sender, e) => ExecuteJob(hotkeySetting.TaskSettings);
|
||||
tsmi.Click += (sender, e) => TaskHelpers.ExecuteJob(hotkeySetting.TaskSettings);
|
||||
return tsmi;
|
||||
}
|
||||
|
||||
|
@ -721,7 +721,7 @@ private bool CheckCLIHotkey(CLICommand command)
|
|||
{
|
||||
if (command.CheckCommand(job.ToString()))
|
||||
{
|
||||
ExecuteJob(job, command);
|
||||
TaskHelpers.ExecuteJob(job, command);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@ -739,7 +739,7 @@ private bool CheckCLIWorkflow(CLICommand command)
|
|||
{
|
||||
if (command.Parameter == hotkeySetting.TaskSettings.ToString())
|
||||
{
|
||||
ExecuteJob(hotkeySetting.TaskSettings);
|
||||
TaskHelpers.ExecuteJob(hotkeySetting.TaskSettings);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@ -1387,7 +1387,7 @@ private void lblTips_Click(object sender, EventArgs e)
|
|||
private void timerTraySingleClick_Tick(object sender, EventArgs e)
|
||||
{
|
||||
timerTraySingleClick.Stop();
|
||||
ExecuteJob(Program.Settings.TrayLeftClickAction);
|
||||
TaskHelpers.ExecuteJob(Program.Settings.TrayLeftClickAction);
|
||||
}
|
||||
|
||||
private void niTray_MouseClick(object sender, MouseEventArgs e)
|
||||
|
@ -1397,7 +1397,7 @@ private void niTray_MouseClick(object sender, MouseEventArgs e)
|
|||
case MouseButtons.Left:
|
||||
if (Program.Settings.TrayLeftDoubleClickAction == HotkeyType.None)
|
||||
{
|
||||
ExecuteJob(Program.Settings.TrayLeftClickAction);
|
||||
TaskHelpers.ExecuteJob(Program.Settings.TrayLeftClickAction);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1406,7 +1406,7 @@ private void niTray_MouseClick(object sender, MouseEventArgs e)
|
|||
}
|
||||
break;
|
||||
case MouseButtons.Middle:
|
||||
ExecuteJob(Program.Settings.TrayMiddleClickAction);
|
||||
TaskHelpers.ExecuteJob(Program.Settings.TrayMiddleClickAction);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -1416,7 +1416,7 @@ private void niTray_MouseDoubleClick(object sender, MouseEventArgs e)
|
|||
if (e.Button == MouseButtons.Left)
|
||||
{
|
||||
timerTraySingleClick.Stop();
|
||||
ExecuteJob(Program.Settings.TrayLeftDoubleClickAction);
|
||||
TaskHelpers.ExecuteJob(Program.Settings.TrayLeftDoubleClickAction);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1694,12 +1694,6 @@ private void tsmiImagePreviewAutomatic_Click(object sender, EventArgs e)
|
|||
|
||||
#region Hotkey/Capture codes and form events
|
||||
|
||||
private delegate Image ScreenCaptureDelegate();
|
||||
|
||||
private enum LastRegionCaptureType { Default, Light, Transparent }
|
||||
|
||||
private LastRegionCaptureType lastRegionCaptureType = LastRegionCaptureType.Default;
|
||||
|
||||
private void InitHotkeys()
|
||||
{
|
||||
TaskEx.Run(() =>
|
||||
|
@ -1738,514 +1732,7 @@ private void HandleHotkeys(HotkeySettings hotkeySetting)
|
|||
{
|
||||
DebugHelper.WriteLine("Hotkey triggered. " + hotkeySetting);
|
||||
|
||||
if (hotkeySetting.TaskSettings.Job != HotkeyType.None)
|
||||
{
|
||||
ExecuteJob(hotkeySetting.TaskSettings);
|
||||
}
|
||||
}
|
||||
|
||||
private void ExecuteJob(HotkeyType job, CLICommand command = null)
|
||||
{
|
||||
ExecuteJob(Program.DefaultTaskSettings, job, command);
|
||||
}
|
||||
|
||||
private void ExecuteJob(TaskSettings taskSettings)
|
||||
{
|
||||
ExecuteJob(taskSettings, taskSettings.Job);
|
||||
}
|
||||
|
||||
private void ExecuteJob(TaskSettings taskSettings, HotkeyType job, CLICommand command = null)
|
||||
{
|
||||
DebugHelper.WriteLine("Executing: " + job.GetLocalizedDescription());
|
||||
|
||||
TaskSettings safeTaskSettings = TaskSettings.GetSafeTaskSettings(taskSettings);
|
||||
|
||||
switch (job)
|
||||
{
|
||||
// Upload
|
||||
case HotkeyType.FileUpload:
|
||||
UploadManager.UploadFile(safeTaskSettings);
|
||||
break;
|
||||
case HotkeyType.FolderUpload:
|
||||
UploadManager.UploadFolder(safeTaskSettings);
|
||||
break;
|
||||
case HotkeyType.ClipboardUpload:
|
||||
UploadManager.ClipboardUpload(safeTaskSettings);
|
||||
break;
|
||||
case HotkeyType.ClipboardUploadWithContentViewer:
|
||||
UploadManager.ClipboardUploadWithContentViewer(safeTaskSettings);
|
||||
break;
|
||||
case HotkeyType.UploadURL:
|
||||
UploadManager.UploadURL(safeTaskSettings);
|
||||
break;
|
||||
case HotkeyType.DragDropUpload:
|
||||
TaskHelpers.OpenDropWindow(safeTaskSettings);
|
||||
break;
|
||||
case HotkeyType.StopUploads:
|
||||
TaskManager.StopAllTasks();
|
||||
break;
|
||||
// Screen capture
|
||||
case HotkeyType.PrintScreen:
|
||||
CaptureScreenshot(CaptureType.Fullscreen, safeTaskSettings, false);
|
||||
break;
|
||||
case HotkeyType.ActiveWindow:
|
||||
CaptureScreenshot(CaptureType.ActiveWindow, safeTaskSettings, false);
|
||||
break;
|
||||
case HotkeyType.ActiveMonitor:
|
||||
CaptureScreenshot(CaptureType.ActiveMonitor, safeTaskSettings, false);
|
||||
break;
|
||||
case HotkeyType.RectangleRegion:
|
||||
CaptureScreenshot(CaptureType.Region, safeTaskSettings, false);
|
||||
break;
|
||||
case HotkeyType.RectangleLight:
|
||||
CaptureRectangleLight(safeTaskSettings, false);
|
||||
break;
|
||||
case HotkeyType.RectangleTransparent:
|
||||
CaptureRectangleTransparent(safeTaskSettings, false);
|
||||
break;
|
||||
case HotkeyType.CustomRegion:
|
||||
CaptureScreenshot(CaptureType.CustomRegion, safeTaskSettings, false);
|
||||
break;
|
||||
case HotkeyType.LastRegion:
|
||||
CaptureScreenshot(CaptureType.LastRegion, safeTaskSettings, false);
|
||||
break;
|
||||
case HotkeyType.ScrollingCapture:
|
||||
TaskHelpers.OpenScrollingCapture(safeTaskSettings, true);
|
||||
break;
|
||||
case HotkeyType.CaptureWebpage:
|
||||
TaskHelpers.OpenWebpageCapture(safeTaskSettings);
|
||||
break;
|
||||
case HotkeyType.TextCapture:
|
||||
TaskHelpers.OpenOCR(safeTaskSettings);
|
||||
break;
|
||||
case HotkeyType.AutoCapture:
|
||||
TaskHelpers.OpenAutoCapture();
|
||||
break;
|
||||
case HotkeyType.StartAutoCapture:
|
||||
TaskHelpers.StartAutoCapture();
|
||||
break;
|
||||
// Screen record
|
||||
case HotkeyType.ScreenRecorder:
|
||||
TaskHelpers.StartScreenRecording(ScreenRecordOutput.FFmpeg, ScreenRecordStartMethod.Region, safeTaskSettings);
|
||||
break;
|
||||
case HotkeyType.ScreenRecorderActiveWindow:
|
||||
TaskHelpers.StartScreenRecording(ScreenRecordOutput.FFmpeg, ScreenRecordStartMethod.ActiveWindow, safeTaskSettings);
|
||||
break;
|
||||
case HotkeyType.ScreenRecorderCustomRegion:
|
||||
TaskHelpers.StartScreenRecording(ScreenRecordOutput.FFmpeg, ScreenRecordStartMethod.CustomRegion, safeTaskSettings);
|
||||
break;
|
||||
case HotkeyType.StartScreenRecorder:
|
||||
TaskHelpers.StartScreenRecording(ScreenRecordOutput.FFmpeg, ScreenRecordStartMethod.LastRegion, safeTaskSettings);
|
||||
break;
|
||||
case HotkeyType.ScreenRecorderGIF:
|
||||
TaskHelpers.StartScreenRecording(ScreenRecordOutput.GIF, ScreenRecordStartMethod.Region, safeTaskSettings);
|
||||
break;
|
||||
case HotkeyType.ScreenRecorderGIFActiveWindow:
|
||||
TaskHelpers.StartScreenRecording(ScreenRecordOutput.GIF, ScreenRecordStartMethod.ActiveWindow, safeTaskSettings);
|
||||
break;
|
||||
case HotkeyType.ScreenRecorderGIFCustomRegion:
|
||||
TaskHelpers.StartScreenRecording(ScreenRecordOutput.GIF, ScreenRecordStartMethod.CustomRegion, safeTaskSettings);
|
||||
break;
|
||||
case HotkeyType.StartScreenRecorderGIF:
|
||||
TaskHelpers.StartScreenRecording(ScreenRecordOutput.GIF, ScreenRecordStartMethod.LastRegion, safeTaskSettings);
|
||||
break;
|
||||
case HotkeyType.AbortScreenRecording:
|
||||
TaskHelpers.AbortScreenRecording();
|
||||
break;
|
||||
// Tools
|
||||
case HotkeyType.ColorPicker:
|
||||
TaskHelpers.OpenColorPicker();
|
||||
break;
|
||||
case HotkeyType.ScreenColorPicker:
|
||||
TaskHelpers.OpenScreenColorPicker(safeTaskSettings);
|
||||
break;
|
||||
case HotkeyType.ImageEditor:
|
||||
if (command != null && !string.IsNullOrEmpty(command.Parameter) && File.Exists(command.Parameter))
|
||||
{
|
||||
TaskHelpers.AnnotateImage(command.Parameter, safeTaskSettings);
|
||||
}
|
||||
else
|
||||
{
|
||||
TaskHelpers.AnnotateImage(safeTaskSettings);
|
||||
}
|
||||
break;
|
||||
case HotkeyType.ImageEffects:
|
||||
TaskHelpers.OpenImageEffects();
|
||||
break;
|
||||
case HotkeyType.HashCheck:
|
||||
TaskHelpers.OpenHashCheck();
|
||||
break;
|
||||
case HotkeyType.DNSChanger:
|
||||
TaskHelpers.OpenDNSChanger();
|
||||
break;
|
||||
case HotkeyType.QRCode:
|
||||
TaskHelpers.OpenQRCode();
|
||||
break;
|
||||
case HotkeyType.Ruler:
|
||||
TaskHelpers.OpenRuler(safeTaskSettings);
|
||||
break;
|
||||
case HotkeyType.Automate:
|
||||
TaskHelpers.StartAutomate();
|
||||
break;
|
||||
case HotkeyType.IndexFolder:
|
||||
UploadManager.IndexFolder();
|
||||
break;
|
||||
case HotkeyType.ImageCombiner:
|
||||
TaskHelpers.OpenImageCombiner(safeTaskSettings);
|
||||
break;
|
||||
case HotkeyType.VideoThumbnailer:
|
||||
TaskHelpers.OpenVideoThumbnailer(safeTaskSettings);
|
||||
break;
|
||||
case HotkeyType.FTPClient:
|
||||
TaskHelpers.OpenFTPClient();
|
||||
break;
|
||||
case HotkeyType.TweetMessage:
|
||||
TaskHelpers.TweetMessage();
|
||||
break;
|
||||
case HotkeyType.MonitorTest:
|
||||
TaskHelpers.OpenMonitorTest();
|
||||
break;
|
||||
// Other
|
||||
case HotkeyType.DisableHotkeys:
|
||||
TaskHelpers.ToggleHotkeys();
|
||||
break;
|
||||
case HotkeyType.OpenMainWindow:
|
||||
this.ForceActivate();
|
||||
break;
|
||||
case HotkeyType.OpenScreenshotsFolder:
|
||||
TaskHelpers.OpenScreenshotsFolder();
|
||||
break;
|
||||
case HotkeyType.OpenHistory:
|
||||
TaskHelpers.OpenHistory();
|
||||
break;
|
||||
case HotkeyType.OpenImageHistory:
|
||||
TaskHelpers.OpenImageHistory();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public void CaptureScreenshot(CaptureType captureType, TaskSettings taskSettings = null, bool autoHideForm = true)
|
||||
{
|
||||
if (taskSettings == null) taskSettings = TaskSettings.GetDefaultTaskSettings();
|
||||
|
||||
switch (captureType)
|
||||
{
|
||||
case CaptureType.Fullscreen:
|
||||
DoCapture(TaskHelpers.GetScreenshot(taskSettings).CaptureFullscreen, CaptureType.Fullscreen, taskSettings, autoHideForm);
|
||||
break;
|
||||
case CaptureType.ActiveWindow:
|
||||
CaptureActiveWindow(taskSettings, autoHideForm);
|
||||
break;
|
||||
case CaptureType.ActiveMonitor:
|
||||
DoCapture(TaskHelpers.GetScreenshot(taskSettings).CaptureActiveMonitor, CaptureType.ActiveMonitor, taskSettings, autoHideForm);
|
||||
break;
|
||||
case CaptureType.Region:
|
||||
CaptureRegion(taskSettings, autoHideForm);
|
||||
break;
|
||||
case CaptureType.CustomRegion:
|
||||
CaptureCustomRegion(taskSettings, autoHideForm);
|
||||
break;
|
||||
case CaptureType.LastRegion:
|
||||
CaptureLastRegion(taskSettings, autoHideForm);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void DoCapture(ScreenCaptureDelegate capture, CaptureType captureType, TaskSettings taskSettings = null, bool autoHideForm = true)
|
||||
{
|
||||
if (taskSettings == null) taskSettings = TaskSettings.GetDefaultTaskSettings();
|
||||
|
||||
if (taskSettings.CaptureSettings.IsDelayScreenshot && taskSettings.CaptureSettings.DelayScreenshot > 0)
|
||||
{
|
||||
TaskEx.Run(() =>
|
||||
{
|
||||
int sleep = (int)(taskSettings.CaptureSettings.DelayScreenshot * 1000);
|
||||
Thread.Sleep(sleep);
|
||||
},
|
||||
() =>
|
||||
{
|
||||
DoCaptureWork(capture, captureType, taskSettings, autoHideForm);
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
DoCaptureWork(capture, captureType, taskSettings, autoHideForm);
|
||||
}
|
||||
}
|
||||
|
||||
private void DoCaptureWork(ScreenCaptureDelegate capture, CaptureType captureType, TaskSettings taskSettings, bool autoHideForm = true)
|
||||
{
|
||||
if (autoHideForm)
|
||||
{
|
||||
Hide();
|
||||
Thread.Sleep(250);
|
||||
}
|
||||
|
||||
Image img = null;
|
||||
|
||||
try
|
||||
{
|
||||
img = capture();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
DebugHelper.WriteException(ex);
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (autoHideForm)
|
||||
{
|
||||
this.ForceActivate();
|
||||
}
|
||||
|
||||
AfterCapture(img, captureType, taskSettings);
|
||||
}
|
||||
}
|
||||
|
||||
private void AfterCapture(Image img, CaptureType captureType, TaskSettings taskSettings)
|
||||
{
|
||||
if (img != null)
|
||||
{
|
||||
if (taskSettings.GeneralSettings.PlaySoundAfterCapture)
|
||||
{
|
||||
TaskHelpers.PlayCaptureSound(taskSettings);
|
||||
}
|
||||
|
||||
if (taskSettings.ImageSettings.ImageEffectOnlyRegionCapture && !IsRegionCapture(captureType))
|
||||
{
|
||||
taskSettings.AfterCaptureJob = taskSettings.AfterCaptureJob.Remove(AfterCaptureTasks.AddImageEffects);
|
||||
}
|
||||
|
||||
UploadManager.RunImageTask(img, taskSettings);
|
||||
}
|
||||
}
|
||||
|
||||
private bool IsRegionCapture(CaptureType captureType)
|
||||
{
|
||||
return captureType.HasFlagAny(CaptureType.Region, CaptureType.LastRegion);
|
||||
}
|
||||
|
||||
private void CaptureActiveWindow(TaskSettings taskSettings, bool autoHideForm = true)
|
||||
{
|
||||
DoCapture(() =>
|
||||
{
|
||||
Image img;
|
||||
string activeWindowTitle = NativeMethods.GetForegroundWindowText();
|
||||
string activeProcessName = null;
|
||||
|
||||
using (Process process = NativeMethods.GetForegroundWindowProcess())
|
||||
{
|
||||
if (process != null)
|
||||
{
|
||||
activeProcessName = process.ProcessName;
|
||||
}
|
||||
}
|
||||
|
||||
if (taskSettings.CaptureSettings.CaptureTransparent && !taskSettings.CaptureSettings.CaptureClientArea)
|
||||
{
|
||||
img = TaskHelpers.GetScreenshot(taskSettings).CaptureActiveWindowTransparent();
|
||||
}
|
||||
else
|
||||
{
|
||||
img = TaskHelpers.GetScreenshot(taskSettings).CaptureActiveWindow();
|
||||
}
|
||||
|
||||
img.Tag = new ImageTag
|
||||
{
|
||||
WindowTitle = activeWindowTitle,
|
||||
ProcessName = activeProcessName
|
||||
};
|
||||
|
||||
return img;
|
||||
}, CaptureType.ActiveWindow, taskSettings, autoHideForm);
|
||||
}
|
||||
|
||||
private void CaptureCustomRegion(TaskSettings taskSettings, bool autoHideForm)
|
||||
{
|
||||
DoCapture(() =>
|
||||
{
|
||||
Rectangle regionBounds = taskSettings.CaptureSettings.CaptureCustomRegion;
|
||||
Image img = TaskHelpers.GetScreenshot(taskSettings).CaptureRectangle(regionBounds);
|
||||
|
||||
return img;
|
||||
}, CaptureType.CustomRegion, taskSettings, autoHideForm);
|
||||
}
|
||||
|
||||
private void CaptureWindow(IntPtr handle, TaskSettings taskSettings = null, bool autoHideForm = true)
|
||||
{
|
||||
if (taskSettings == null) taskSettings = TaskSettings.GetDefaultTaskSettings();
|
||||
|
||||
autoHideForm = autoHideForm && handle != Handle;
|
||||
|
||||
DoCapture(() =>
|
||||
{
|
||||
if (NativeMethods.IsIconic(handle))
|
||||
{
|
||||
NativeMethods.RestoreWindow(handle);
|
||||
}
|
||||
|
||||
NativeMethods.SetForegroundWindow(handle);
|
||||
Thread.Sleep(250);
|
||||
|
||||
if (taskSettings.CaptureSettings.CaptureTransparent && !taskSettings.CaptureSettings.CaptureClientArea)
|
||||
{
|
||||
return TaskHelpers.GetScreenshot(taskSettings).CaptureWindowTransparent(handle);
|
||||
}
|
||||
|
||||
return TaskHelpers.GetScreenshot(taskSettings).CaptureWindow(handle);
|
||||
}, CaptureType.Window, taskSettings, autoHideForm);
|
||||
}
|
||||
|
||||
private void CaptureRegion(TaskSettings taskSettings, bool autoHideForm = true)
|
||||
{
|
||||
RegionCaptureForm form = new RegionCaptureForm(RegionCaptureMode.Annotation);
|
||||
|
||||
DoCapture(() =>
|
||||
{
|
||||
Image img = null;
|
||||
|
||||
try
|
||||
{
|
||||
form.Config = taskSettings.CaptureSettingsReference.SurfaceOptions;
|
||||
form.Prepare(TaskHelpers.GetScreenshot(taskSettings).CaptureFullscreen());
|
||||
form.ShowDialog();
|
||||
|
||||
img = form.GetResultImage();
|
||||
|
||||
if (img != null)
|
||||
{
|
||||
if (form.Result == RegionResult.Region && taskSettings.UploadSettings.RegionCaptureUseWindowPattern)
|
||||
{
|
||||
WindowInfo windowInfo = form.GetWindowInfo();
|
||||
|
||||
if (windowInfo != null)
|
||||
{
|
||||
img.Tag = new ImageTag
|
||||
{
|
||||
WindowTitle = windowInfo.Text,
|
||||
ProcessName = windowInfo.ProcessName
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
lastRegionCaptureType = LastRegionCaptureType.Default;
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (form != null)
|
||||
{
|
||||
form.Dispose();
|
||||
}
|
||||
}
|
||||
|
||||
return img;
|
||||
}, CaptureType.Region, taskSettings, autoHideForm);
|
||||
}
|
||||
|
||||
private void CaptureRectangleLight(TaskSettings taskSettings = null, bool autoHideForm = true)
|
||||
{
|
||||
if (taskSettings == null) taskSettings = TaskSettings.GetDefaultTaskSettings();
|
||||
|
||||
DoCapture(() =>
|
||||
{
|
||||
Image img = null;
|
||||
|
||||
using (RegionCaptureLightForm rectangleLight = new RegionCaptureLightForm(TaskHelpers.GetScreenshot(taskSettings)))
|
||||
{
|
||||
if (rectangleLight.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
img = rectangleLight.GetAreaImage();
|
||||
|
||||
if (img != null)
|
||||
{
|
||||
lastRegionCaptureType = LastRegionCaptureType.Light;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return img;
|
||||
}, CaptureType.Region, taskSettings, autoHideForm);
|
||||
}
|
||||
|
||||
private void CaptureRectangleTransparent(TaskSettings taskSettings = null, bool autoHideForm = true)
|
||||
{
|
||||
if (taskSettings == null) taskSettings = TaskSettings.GetDefaultTaskSettings();
|
||||
|
||||
DoCapture(() =>
|
||||
{
|
||||
Image img = null;
|
||||
|
||||
using (RegionCaptureTransparentForm rectangleTransparent = new RegionCaptureTransparentForm())
|
||||
{
|
||||
if (rectangleTransparent.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
img = rectangleTransparent.GetAreaImage(TaskHelpers.GetScreenshot(taskSettings));
|
||||
|
||||
if (img != null)
|
||||
{
|
||||
lastRegionCaptureType = LastRegionCaptureType.Transparent;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return img;
|
||||
}, CaptureType.Region, taskSettings, autoHideForm);
|
||||
}
|
||||
|
||||
private void CaptureLastRegion(TaskSettings taskSettings, bool autoHideForm = true)
|
||||
{
|
||||
switch (lastRegionCaptureType)
|
||||
{
|
||||
case LastRegionCaptureType.Default:
|
||||
if (RegionCaptureForm.LastRegionFillPath != null)
|
||||
{
|
||||
DoCapture(() =>
|
||||
{
|
||||
using (Image screenshot = TaskHelpers.GetScreenshot(taskSettings).CaptureFullscreen())
|
||||
{
|
||||
return RegionCaptureTasks.ApplyRegionPathToImage(screenshot, RegionCaptureForm.LastRegionFillPath);
|
||||
}
|
||||
}, CaptureType.LastRegion, taskSettings, autoHideForm);
|
||||
}
|
||||
else
|
||||
{
|
||||
CaptureRegion(taskSettings, autoHideForm);
|
||||
}
|
||||
break;
|
||||
case LastRegionCaptureType.Light:
|
||||
if (!RegionCaptureLightForm.LastSelectionRectangle0Based.IsEmpty)
|
||||
{
|
||||
DoCapture(() =>
|
||||
{
|
||||
using (Image screenshot = TaskHelpers.GetScreenshot(taskSettings).CaptureFullscreen())
|
||||
{
|
||||
return ImageHelpers.CropImage(screenshot, RegionCaptureLightForm.LastSelectionRectangle0Based);
|
||||
}
|
||||
}, CaptureType.LastRegion, taskSettings, autoHideForm);
|
||||
}
|
||||
else
|
||||
{
|
||||
CaptureRectangleLight(taskSettings, autoHideForm);
|
||||
}
|
||||
break;
|
||||
case LastRegionCaptureType.Transparent:
|
||||
if (!RegionCaptureTransparentForm.LastSelectionRectangle0Based.IsEmpty)
|
||||
{
|
||||
DoCapture(() =>
|
||||
{
|
||||
using (Image screenshot = TaskHelpers.GetScreenshot(taskSettings).CaptureFullscreen())
|
||||
{
|
||||
return ImageHelpers.CropImage(screenshot, RegionCaptureTransparentForm.LastSelectionRectangle0Based);
|
||||
}
|
||||
}, CaptureType.LastRegion, taskSettings, autoHideForm);
|
||||
}
|
||||
else
|
||||
{
|
||||
CaptureRectangleTransparent(taskSettings, autoHideForm);
|
||||
}
|
||||
break;
|
||||
}
|
||||
TaskHelpers.ExecuteJob(hotkeySetting.TaskSettings);
|
||||
}
|
||||
|
||||
private void PrepareCaptureMenuAsync(ToolStripMenuItem tsmiWindow, EventHandler handlerWindow, ToolStripMenuItem tsmiMonitor, EventHandler handlerMonitor)
|
||||
|
@ -2309,7 +1796,7 @@ private void PrepareCaptureMenuAsync(ToolStripMenuItem tsmiWindow, EventHandler
|
|||
|
||||
private void tsmiFullscreen_Click(object sender, EventArgs e)
|
||||
{
|
||||
CaptureScreenshot(CaptureType.Fullscreen);
|
||||
CaptureTaskHelpers.CaptureScreenshot(CaptureType.Fullscreen);
|
||||
}
|
||||
|
||||
private void tsddbCapture_DropDownOpening(object sender, EventArgs e)
|
||||
|
@ -2323,7 +1810,7 @@ private void tsmiWindowItems_Click(object sender, EventArgs e)
|
|||
WindowInfo wi = tsi.Tag as WindowInfo;
|
||||
if (wi != null)
|
||||
{
|
||||
CaptureWindow(wi.Handle);
|
||||
CaptureTaskHelpers.CaptureWindow(wi.Handle);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2333,28 +1820,28 @@ private void tsmiMonitorItems_Click(object sender, EventArgs e)
|
|||
Rectangle rectangle = (Rectangle)tsi.Tag;
|
||||
if (!rectangle.IsEmpty)
|
||||
{
|
||||
DoCapture(() => TaskHelpers.GetScreenshot().CaptureRectangle(rectangle), CaptureType.Monitor);
|
||||
CaptureTaskHelpers.DoCapture(() => TaskHelpers.GetScreenshot().CaptureRectangle(rectangle), CaptureType.Monitor);
|
||||
}
|
||||
}
|
||||
|
||||
private void tsmiRectangle_Click(object sender, EventArgs e)
|
||||
{
|
||||
CaptureScreenshot(CaptureType.Region);
|
||||
CaptureTaskHelpers.CaptureScreenshot(CaptureType.Region);
|
||||
}
|
||||
|
||||
private void tsmiRectangleLight_Click(object sender, EventArgs e)
|
||||
{
|
||||
CaptureRectangleLight();
|
||||
CaptureTaskHelpers.CaptureRectangleLight();
|
||||
}
|
||||
|
||||
private void tsmiRectangleTransparent_Click(object sender, EventArgs e)
|
||||
{
|
||||
CaptureRectangleTransparent();
|
||||
CaptureTaskHelpers.CaptureRectangleTransparent();
|
||||
}
|
||||
|
||||
private void tsmiLastRegion_Click(object sender, EventArgs e)
|
||||
{
|
||||
CaptureScreenshot(CaptureType.LastRegion);
|
||||
CaptureTaskHelpers.CaptureScreenshot(CaptureType.LastRegion);
|
||||
}
|
||||
|
||||
#endregion Menu events
|
||||
|
@ -2372,7 +1859,7 @@ private void cmsTray_Opened(object sender, EventArgs e)
|
|||
|
||||
private void tsmiTrayFullscreen_Click(object sender, EventArgs e)
|
||||
{
|
||||
CaptureScreenshot(CaptureType.Fullscreen, null, false);
|
||||
CaptureTaskHelpers.CaptureScreenshot(CaptureType.Fullscreen, null, false);
|
||||
}
|
||||
|
||||
private void tsmiCapture_DropDownOpening(object sender, EventArgs e)
|
||||
|
@ -2386,7 +1873,7 @@ private void tsmiTrayWindowItems_Click(object sender, EventArgs e)
|
|||
WindowInfo wi = tsi.Tag as WindowInfo;
|
||||
if (wi != null)
|
||||
{
|
||||
CaptureWindow(wi.Handle, null, false);
|
||||
CaptureTaskHelpers.CaptureWindow(wi.Handle, null, false);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2396,18 +1883,18 @@ private void tsmiTrayMonitorItems_Click(object sender, EventArgs e)
|
|||
Rectangle rectangle = (Rectangle)tsi.Tag;
|
||||
if (!rectangle.IsEmpty)
|
||||
{
|
||||
DoCapture(() => TaskHelpers.GetScreenshot().CaptureRectangle(rectangle), CaptureType.Monitor, null, false);
|
||||
CaptureTaskHelpers.DoCapture(() => TaskHelpers.GetScreenshot().CaptureRectangle(rectangle), CaptureType.Monitor, null, false);
|
||||
}
|
||||
}
|
||||
|
||||
private void tsmiTrayRectangle_Click(object sender, EventArgs e)
|
||||
{
|
||||
CaptureScreenshot(CaptureType.Region, null, false);
|
||||
CaptureTaskHelpers.CaptureScreenshot(CaptureType.Region, null, false);
|
||||
}
|
||||
|
||||
private void tsmiTrayRectangleLight_Click(object sender, EventArgs e)
|
||||
{
|
||||
CaptureRectangleLight(null, false);
|
||||
CaptureTaskHelpers.CaptureRectangleLight(null, false);
|
||||
}
|
||||
|
||||
private void lvUploads_ColumnWidthChanged(object sender, ColumnWidthChangedEventArgs e)
|
||||
|
@ -2428,12 +1915,12 @@ private void pbPatreonHide_Click(object sender, EventArgs e)
|
|||
|
||||
private void tsmiTrayRectangleTransparent_Click(object sender, EventArgs e)
|
||||
{
|
||||
CaptureRectangleTransparent(null, false);
|
||||
CaptureTaskHelpers.CaptureRectangleTransparent(null, false);
|
||||
}
|
||||
|
||||
private void tsmiTrayLastRegion_Click(object sender, EventArgs e)
|
||||
{
|
||||
CaptureScreenshot(CaptureType.LastRegion, null, false);
|
||||
CaptureTaskHelpers.CaptureScreenshot(CaptureType.LastRegion, null, false);
|
||||
}
|
||||
|
||||
private void tsmiTrayTextCapture_Click(object sender, EventArgs e)
|
||||
|
|
|
@ -102,6 +102,7 @@
|
|||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="CaptureTaskHelpers.cs" />
|
||||
<Compile Include="Controls\BeforeUploadControl.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
|
|
|
@ -38,7 +38,6 @@ You should have received a copy of the GNU General Public License
|
|||
using System.Drawing.Drawing2D;
|
||||
using System.Drawing.Imaging;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Speech.Synthesis;
|
||||
using System.Windows.Forms;
|
||||
|
||||
|
@ -46,6 +45,188 @@ namespace ShareX
|
|||
{
|
||||
public static class TaskHelpers
|
||||
{
|
||||
public static void ExecuteJob(HotkeyType job, CLICommand command = null)
|
||||
{
|
||||
ExecuteJob(Program.DefaultTaskSettings, job, command);
|
||||
}
|
||||
|
||||
public static void ExecuteJob(TaskSettings taskSettings)
|
||||
{
|
||||
ExecuteJob(taskSettings, taskSettings.Job);
|
||||
}
|
||||
|
||||
public static void ExecuteJob(TaskSettings taskSettings, HotkeyType job, CLICommand command = null)
|
||||
{
|
||||
if (job == HotkeyType.None) return;
|
||||
|
||||
DebugHelper.WriteLine("Executing: " + job.GetLocalizedDescription());
|
||||
|
||||
TaskSettings safeTaskSettings = TaskSettings.GetSafeTaskSettings(taskSettings);
|
||||
|
||||
switch (job)
|
||||
{
|
||||
// Upload
|
||||
case HotkeyType.FileUpload:
|
||||
UploadManager.UploadFile(safeTaskSettings);
|
||||
break;
|
||||
case HotkeyType.FolderUpload:
|
||||
UploadManager.UploadFolder(safeTaskSettings);
|
||||
break;
|
||||
case HotkeyType.ClipboardUpload:
|
||||
UploadManager.ClipboardUpload(safeTaskSettings);
|
||||
break;
|
||||
case HotkeyType.ClipboardUploadWithContentViewer:
|
||||
UploadManager.ClipboardUploadWithContentViewer(safeTaskSettings);
|
||||
break;
|
||||
case HotkeyType.UploadURL:
|
||||
UploadManager.UploadURL(safeTaskSettings);
|
||||
break;
|
||||
case HotkeyType.DragDropUpload:
|
||||
OpenDropWindow(safeTaskSettings);
|
||||
break;
|
||||
case HotkeyType.StopUploads:
|
||||
TaskManager.StopAllTasks();
|
||||
break;
|
||||
// Screen capture
|
||||
case HotkeyType.PrintScreen:
|
||||
CaptureTaskHelpers.CaptureScreenshot(CaptureType.Fullscreen, safeTaskSettings, false);
|
||||
break;
|
||||
case HotkeyType.ActiveWindow:
|
||||
CaptureTaskHelpers.CaptureScreenshot(CaptureType.ActiveWindow, safeTaskSettings, false);
|
||||
break;
|
||||
case HotkeyType.ActiveMonitor:
|
||||
CaptureTaskHelpers.CaptureScreenshot(CaptureType.ActiveMonitor, safeTaskSettings, false);
|
||||
break;
|
||||
case HotkeyType.RectangleRegion:
|
||||
CaptureTaskHelpers.CaptureScreenshot(CaptureType.Region, safeTaskSettings, false);
|
||||
break;
|
||||
case HotkeyType.RectangleLight:
|
||||
CaptureTaskHelpers.CaptureRectangleLight(safeTaskSettings, false);
|
||||
break;
|
||||
case HotkeyType.RectangleTransparent:
|
||||
CaptureTaskHelpers.CaptureRectangleTransparent(safeTaskSettings, false);
|
||||
break;
|
||||
case HotkeyType.CustomRegion:
|
||||
CaptureTaskHelpers.CaptureScreenshot(CaptureType.CustomRegion, safeTaskSettings, false);
|
||||
break;
|
||||
case HotkeyType.LastRegion:
|
||||
CaptureTaskHelpers.CaptureScreenshot(CaptureType.LastRegion, safeTaskSettings, false);
|
||||
break;
|
||||
case HotkeyType.ScrollingCapture:
|
||||
OpenScrollingCapture(safeTaskSettings, true);
|
||||
break;
|
||||
case HotkeyType.CaptureWebpage:
|
||||
OpenWebpageCapture(safeTaskSettings);
|
||||
break;
|
||||
case HotkeyType.TextCapture:
|
||||
OpenOCR(safeTaskSettings);
|
||||
break;
|
||||
case HotkeyType.AutoCapture:
|
||||
OpenAutoCapture();
|
||||
break;
|
||||
case HotkeyType.StartAutoCapture:
|
||||
StartAutoCapture();
|
||||
break;
|
||||
// Screen record
|
||||
case HotkeyType.ScreenRecorder:
|
||||
StartScreenRecording(ScreenRecordOutput.FFmpeg, ScreenRecordStartMethod.Region, safeTaskSettings);
|
||||
break;
|
||||
case HotkeyType.ScreenRecorderActiveWindow:
|
||||
StartScreenRecording(ScreenRecordOutput.FFmpeg, ScreenRecordStartMethod.ActiveWindow, safeTaskSettings);
|
||||
break;
|
||||
case HotkeyType.ScreenRecorderCustomRegion:
|
||||
StartScreenRecording(ScreenRecordOutput.FFmpeg, ScreenRecordStartMethod.CustomRegion, safeTaskSettings);
|
||||
break;
|
||||
case HotkeyType.StartScreenRecorder:
|
||||
StartScreenRecording(ScreenRecordOutput.FFmpeg, ScreenRecordStartMethod.LastRegion, safeTaskSettings);
|
||||
break;
|
||||
case HotkeyType.ScreenRecorderGIF:
|
||||
StartScreenRecording(ScreenRecordOutput.GIF, ScreenRecordStartMethod.Region, safeTaskSettings);
|
||||
break;
|
||||
case HotkeyType.ScreenRecorderGIFActiveWindow:
|
||||
StartScreenRecording(ScreenRecordOutput.GIF, ScreenRecordStartMethod.ActiveWindow, safeTaskSettings);
|
||||
break;
|
||||
case HotkeyType.ScreenRecorderGIFCustomRegion:
|
||||
StartScreenRecording(ScreenRecordOutput.GIF, ScreenRecordStartMethod.CustomRegion, safeTaskSettings);
|
||||
break;
|
||||
case HotkeyType.StartScreenRecorderGIF:
|
||||
StartScreenRecording(ScreenRecordOutput.GIF, ScreenRecordStartMethod.LastRegion, safeTaskSettings);
|
||||
break;
|
||||
case HotkeyType.AbortScreenRecording:
|
||||
AbortScreenRecording();
|
||||
break;
|
||||
// Tools
|
||||
case HotkeyType.ColorPicker:
|
||||
OpenColorPicker();
|
||||
break;
|
||||
case HotkeyType.ScreenColorPicker:
|
||||
OpenScreenColorPicker(safeTaskSettings);
|
||||
break;
|
||||
case HotkeyType.ImageEditor:
|
||||
if (command != null && !string.IsNullOrEmpty(command.Parameter) && File.Exists(command.Parameter))
|
||||
{
|
||||
AnnotateImage(command.Parameter, safeTaskSettings);
|
||||
}
|
||||
else
|
||||
{
|
||||
AnnotateImage(safeTaskSettings);
|
||||
}
|
||||
break;
|
||||
case HotkeyType.ImageEffects:
|
||||
OpenImageEffects();
|
||||
break;
|
||||
case HotkeyType.HashCheck:
|
||||
OpenHashCheck();
|
||||
break;
|
||||
case HotkeyType.DNSChanger:
|
||||
OpenDNSChanger();
|
||||
break;
|
||||
case HotkeyType.QRCode:
|
||||
OpenQRCode();
|
||||
break;
|
||||
case HotkeyType.Ruler:
|
||||
OpenRuler(safeTaskSettings);
|
||||
break;
|
||||
case HotkeyType.Automate:
|
||||
StartAutomate();
|
||||
break;
|
||||
case HotkeyType.IndexFolder:
|
||||
UploadManager.IndexFolder();
|
||||
break;
|
||||
case HotkeyType.ImageCombiner:
|
||||
OpenImageCombiner(safeTaskSettings);
|
||||
break;
|
||||
case HotkeyType.VideoThumbnailer:
|
||||
OpenVideoThumbnailer(safeTaskSettings);
|
||||
break;
|
||||
case HotkeyType.FTPClient:
|
||||
OpenFTPClient();
|
||||
break;
|
||||
case HotkeyType.TweetMessage:
|
||||
TweetMessage();
|
||||
break;
|
||||
case HotkeyType.MonitorTest:
|
||||
OpenMonitorTest();
|
||||
break;
|
||||
// Other
|
||||
case HotkeyType.DisableHotkeys:
|
||||
ToggleHotkeys();
|
||||
break;
|
||||
case HotkeyType.OpenMainWindow:
|
||||
Program.MainForm.ForceActivate();
|
||||
break;
|
||||
case HotkeyType.OpenScreenshotsFolder:
|
||||
OpenScreenshotsFolder();
|
||||
break;
|
||||
case HotkeyType.OpenHistory:
|
||||
OpenHistory();
|
||||
break;
|
||||
case HotkeyType.OpenImageHistory:
|
||||
OpenImageHistory();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public static ImageData PrepareImage(Image img, TaskSettings taskSettings)
|
||||
{
|
||||
ImageData imageData = new ImageData();
|
||||
|
|
Loading…
Reference in a new issue