More work on removing static references to DI classes.

This commit is contained in:
Robin 2019-01-02 22:40:15 +01:00
commit 505e4d7be5
35 changed files with 232 additions and 120 deletions

View file

@ -3,7 +3,8 @@
<PropertyGroup> <PropertyGroup>
<RootNamespace>Greenshot.Addon.Box</RootNamespace> <RootNamespace>Greenshot.Addon.Box</RootNamespace>
<AssemblyName>Greenshot.Addon.Box</AssemblyName> <AssemblyName>Greenshot.Addon.Box</AssemblyName>
<TargetFrameworks>net471;netcoreapp3.0</TargetFrameworks> <!--TargetFrameworks>net471;netcoreapp3.0</TargetFrameworks-->
<TargetFrameworks>net471</TargetFrameworks>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>

View file

@ -50,7 +50,7 @@ namespace Greenshot.Addon.Confluence
var pages = new List<Content>(); var pages = new List<Content>();
var pageIdRegex = new Regex(@"pageId=(\d+)"); var pageIdRegex = new Regex(@"pageId=(\d+)");
var spacePageRegex = new Regex(@"\/display\/([^\/]+)\/([^#]+)"); var spacePageRegex = new Regex(@"\/display\/([^\/]+)\/([^#]+)");
foreach (var browserurl in IEHelper.GetIEUrls().Distinct()) foreach (var browserurl in InternetExplorerHelper.GetIEUrls().Distinct())
{ {
string url; string url;
try try

View file

@ -3,7 +3,8 @@
<PropertyGroup> <PropertyGroup>
<RootNamespace>Greenshot.Addon.Confluence</RootNamespace> <RootNamespace>Greenshot.Addon.Confluence</RootNamespace>
<AssemblyName>Greenshot.Addon.Confluence</AssemblyName> <AssemblyName>Greenshot.Addon.Confluence</AssemblyName>
<TargetFrameworks>net471;netcoreapp3.0</TargetFrameworks> <!--TargetFrameworks>net471;netcoreapp3.0</TargetFrameworks-->
<TargetFrameworks>net471</TargetFrameworks>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>

View file

@ -3,7 +3,8 @@
<PropertyGroup> <PropertyGroup>
<RootNamespace>Greenshot.Addon.Dropbox</RootNamespace> <RootNamespace>Greenshot.Addon.Dropbox</RootNamespace>
<AssemblyName>Greenshot.Addon.Dropbox</AssemblyName> <AssemblyName>Greenshot.Addon.Dropbox</AssemblyName>
<TargetFrameworks>net471;netcoreapp3.0</TargetFrameworks> <!--TargetFrameworks>net471;netcoreapp3.0</TargetFrameworks-->
<TargetFrameworks>net471</TargetFrameworks>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>

View file

@ -3,7 +3,8 @@
<PropertyGroup> <PropertyGroup>
<RootNamespace>Greenshot.Addon.ExternalCommand</RootNamespace> <RootNamespace>Greenshot.Addon.ExternalCommand</RootNamespace>
<AssemblyName>Greenshot.Addon.ExternalCommand</AssemblyName> <AssemblyName>Greenshot.Addon.ExternalCommand</AssemblyName>
<TargetFrameworks>net471;netcoreapp3.0</TargetFrameworks> <!--TargetFrameworks>net471;netcoreapp3.0</TargetFrameworks-->
<TargetFrameworks>net471</TargetFrameworks>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>

View file

@ -3,7 +3,8 @@
<PropertyGroup> <PropertyGroup>
<RootNamespace>Greenshot.Addon.Flickr</RootNamespace> <RootNamespace>Greenshot.Addon.Flickr</RootNamespace>
<AssemblyName>Greenshot.Addon.Flickr</AssemblyName> <AssemblyName>Greenshot.Addon.Flickr</AssemblyName>
<TargetFrameworks>net471;netcoreapp3.0</TargetFrameworks> <!--TargetFrameworks>net471;netcoreapp3.0</TargetFrameworks-->
<TargetFrameworks>net471</TargetFrameworks>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>

View file

@ -3,7 +3,8 @@
<PropertyGroup> <PropertyGroup>
<RootNamespace>Greenshot.Addon.GooglePhotos</RootNamespace> <RootNamespace>Greenshot.Addon.GooglePhotos</RootNamespace>
<AssemblyName>Greenshot.Addon.GooglePhotos</AssemblyName> <AssemblyName>Greenshot.Addon.GooglePhotos</AssemblyName>
<TargetFrameworks>net471;netcoreapp3.0</TargetFrameworks> <!--TargetFrameworks>net471;netcoreapp3.0</TargetFrameworks-->
<TargetFrameworks>net471</TargetFrameworks>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>

View file

@ -3,7 +3,8 @@
<PropertyGroup> <PropertyGroup>
<RootNamespace>Greenshot.Addon.Imgur</RootNamespace> <RootNamespace>Greenshot.Addon.Imgur</RootNamespace>
<AssemblyName>Greenshot.Addon.Imgur</AssemblyName> <AssemblyName>Greenshot.Addon.Imgur</AssemblyName>
<TargetFrameworks>net471;netcoreapp3.0</TargetFrameworks> <!--TargetFrameworks>net471;netcoreapp3.0</TargetFrameworks-->
<TargetFrameworks>net471</TargetFrameworks>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>

View file

@ -1,7 +1,8 @@
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop"> <Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
<PropertyGroup> <PropertyGroup>
<TargetFrameworks>net471;netcoreapp3.0</TargetFrameworks> <!--TargetFrameworks>net471;netcoreapp3.0</TargetFrameworks-->
<TargetFrameworks>net471</TargetFrameworks>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks> <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup> </PropertyGroup>

View file

@ -0,0 +1,41 @@
#region Greenshot GNU General Public License
// Greenshot - a free and open source screenshot tool
// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom
//
// For more information see: http://getgreenshot.org/
// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot
//
// 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 1 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, see <http://www.gnu.org/licenses/>.
#endregion
using Autofac;
using Dapplo.Addons;
namespace Greenshot.Addon.InternetExplorer
{
/// <inheritdoc />
public class InternetExplorerAddonModulenModule : AddonModule
{
protected override void Load(ContainerBuilder builder)
{
builder
.RegisterType<InternetExplorerCaptureHelper>()
.AsSelf()
.SingleInstance();
base.Load(builder);
}
}
}

View file

@ -36,7 +36,7 @@ using Dapplo.Windows.Common.Structs;
using Dapplo.Windows.Desktop; using Dapplo.Windows.Desktop;
using Dapplo.Windows.Messages; using Dapplo.Windows.Messages;
using Dapplo.Windows.User32; using Dapplo.Windows.User32;
using Greenshot.Addon.InternetExplorer.IEInterop; using Greenshot.Addon.InternetExplorer.InternetExplorerInterop;
using Greenshot.Addons.Config.Impl; using Greenshot.Addons.Config.Impl;
using Greenshot.Addons.Controls; using Greenshot.Addons.Controls;
using Greenshot.Addons.Core; using Greenshot.Addons.Core;
@ -54,20 +54,24 @@ namespace Greenshot.Addon.InternetExplorer
/// On top I modified it to use the already available code in Greenshot. /// On top I modified it to use the already available code in Greenshot.
/// Many thanks to all the people who contributed here! /// Many thanks to all the people who contributed here!
/// </summary> /// </summary>
public static class IeCaptureHelper public class InternetExplorerCaptureHelper
{ {
private static readonly LogSource Log = new LogSource(); private static readonly LogSource Log = new LogSource();
// TODO: Solve, was static reference! private readonly ICoreConfiguration _coreConfiguration;
private static readonly ICoreConfiguration CoreConfig = new CoreConfigurationImpl();
public InternetExplorerCaptureHelper(ICoreConfiguration coreConfiguration)
{
_coreConfiguration = coreConfiguration;
}
/// <summary> /// <summary>
/// Helper method to activate a certain IE Tab /// Helper method to activate a certain IE Tab
/// </summary> /// </summary>
/// <param name="nativeIeWindow">IInteropWindow</param> /// <param name="nativeIeWindow">IInteropWindow</param>
/// <param name="tabIndex">int</param> /// <param name="tabIndex">int</param>
public static void ActivateIeTab(IInteropWindow nativeIeWindow, int tabIndex) public void ActivateIeTab(IInteropWindow nativeIeWindow, int tabIndex)
{ {
var directUiInteropWindow = IEHelper.GetDirectUi(nativeIeWindow); var directUiInteropWindow = InternetExplorerHelper.GetDirectUi(nativeIeWindow);
if (directUiInteropWindow == null) if (directUiInteropWindow == null)
{ {
return; return;
@ -87,7 +91,7 @@ namespace Greenshot.Addon.InternetExplorer
/// <param name="someWindow">InteropWindow to check</param> /// <param name="someWindow">InteropWindow to check</param>
/// <param name="minimumPercentage">min percentage</param> /// <param name="minimumPercentage">min percentage</param>
/// <returns></returns> /// <returns></returns>
public static bool IsMostlyIeWindow(IInteropWindow someWindow, int minimumPercentage) public bool IsMostlyIeWindow(IInteropWindow someWindow, int minimumPercentage)
{ {
var ieWindow = someWindow.GetChildren().FirstOrDefault(window => window.GetClassname() == "Internet Explorer_Server"); var ieWindow = someWindow.GetChildren().FirstOrDefault(window => window.GetClassname() == "Internet Explorer_Server");
if (ieWindow == null) if (ieWindow == null)
@ -106,13 +110,13 @@ namespace Greenshot.Addon.InternetExplorer
/// </summary> /// </summary>
/// <param name="someWindow"></param> /// <param name="someWindow"></param>
/// <returns></returns> /// <returns></returns>
public static bool IsIeWindow(IInteropWindow someWindow) public bool IsIeWindow(IInteropWindow someWindow)
{ {
if ("IEFrame".Equals(someWindow.GetClassname())) if ("IEFrame".Equals(someWindow.GetClassname()))
{ {
return true; return true;
} }
if (CoreConfig.WindowClassesToCheckForIE != null && CoreConfig.WindowClassesToCheckForIE.Contains(someWindow.Classname)) if (_coreConfiguration.WindowClassesToCheckForIE != null && _coreConfiguration.WindowClassesToCheckForIE.Contains(someWindow.Classname))
{ {
return someWindow.GetChildren().Any(window => window.GetClassname() == "Internet Explorer_Server"); return someWindow.GetChildren().Any(window => window.GetClassname() == "Internet Explorer_Server");
} }
@ -123,7 +127,7 @@ namespace Greenshot.Addon.InternetExplorer
/// Get Windows displaying an IE /// Get Windows displaying an IE
/// </summary> /// </summary>
/// <returns>IEnumerable IInteropWindow</returns> /// <returns>IEnumerable IInteropWindow</returns>
public static IEnumerable<IInteropWindow> GetIeWindows() public IEnumerable<IInteropWindow> GetIeWindows()
{ {
return WindowsEnumerator.EnumerateWindows().Where(IsIeWindow); return WindowsEnumerator.EnumerateWindows().Where(IsIeWindow);
} }
@ -132,7 +136,7 @@ namespace Greenshot.Addon.InternetExplorer
/// Simple check if IE is running /// Simple check if IE is running
/// </summary> /// </summary>
/// <returns>bool</returns> /// <returns>bool</returns>
public static bool IsIeRunning() public bool IsIeRunning()
{ {
return GetIeWindows().Any(); return GetIeWindows().Any();
} }
@ -141,7 +145,7 @@ namespace Greenshot.Addon.InternetExplorer
/// Gets a list of all IE Windows & tabs with the captions of the instances /// Gets a list of all IE Windows & tabs with the captions of the instances
/// </summary> /// </summary>
/// <returns>List with KeyValuePair of InteropWindow and string</returns> /// <returns>List with KeyValuePair of InteropWindow and string</returns>
public static IList<KeyValuePair<IInteropWindow, string>> GetBrowserTabs() public IList<KeyValuePair<IInteropWindow, string>> GetBrowserTabs()
{ {
var ieHandleList = new List<IntPtr>(); var ieHandleList = new List<IntPtr>();
var browserWindows = new Dictionary<IInteropWindow, List<string>>(); var browserWindows = new Dictionary<IInteropWindow, List<string>>();
@ -157,14 +161,14 @@ namespace Greenshot.Addon.InternetExplorer
} }
if ("IEFrame".Equals(ieWindow.GetClassname())) if ("IEFrame".Equals(ieWindow.GetClassname()))
{ {
var directUiwd = IEHelper.GetDirectUi(ieWindow); var directUiwd = InternetExplorerHelper.GetDirectUi(ieWindow);
if (directUiwd != null) if (directUiwd != null)
{ {
var accessible = new Accessible(directUiwd.Handle); var accessible = new Accessible(directUiwd.Handle);
browserWindows.Add(ieWindow, accessible.IETabCaptions); browserWindows.Add(ieWindow, accessible.IETabCaptions);
} }
} }
else if (CoreConfig.WindowClassesToCheckForIE != null && CoreConfig.WindowClassesToCheckForIE.Contains(ieWindow.Classname)) else if (_coreConfiguration.WindowClassesToCheckForIE != null && _coreConfiguration.WindowClassesToCheckForIE.Contains(ieWindow.Classname))
{ {
var singleWindowText = new List<string>(); var singleWindowText = new List<string>();
try try
@ -211,7 +215,7 @@ namespace Greenshot.Addon.InternetExplorer
/// </summary> /// </summary>
/// <param name="mainWindow"></param> /// <param name="mainWindow"></param>
/// <returns></returns> /// <returns></returns>
private static IHTMLDocument2 GetHtmlDocument(IInteropWindow mainWindow) private IHTMLDocument2 GetHtmlDocument(IInteropWindow mainWindow)
{ {
var ieServer = "Internet Explorer_Server".Equals(mainWindow.GetClassname()) var ieServer = "Internet Explorer_Server".Equals(mainWindow.GetClassname())
? mainWindow ? mainWindow
@ -250,7 +254,7 @@ namespace Greenshot.Addon.InternetExplorer
/// </summary> /// </summary>
/// <param name="browserWindow">The InteropWindow to get the IHTMLDocument2 for</param> /// <param name="browserWindow">The InteropWindow to get the IHTMLDocument2 for</param>
/// <returns>DocumentContainer</returns> /// <returns>DocumentContainer</returns>
private static DocumentContainer CreateDocumentContainer(IInteropWindow browserWindow) private DocumentContainer CreateDocumentContainer(IInteropWindow browserWindow)
{ {
DocumentContainer returnDocumentContainer = null; DocumentContainer returnDocumentContainer = null;
InteropWindow returnWindow = null; InteropWindow returnWindow = null;
@ -265,7 +269,7 @@ namespace Greenshot.Addon.InternetExplorer
Log.Debug().WriteLine("Processing {0} - {1}", ieWindow.Classname, ieWindow.Text); Log.Debug().WriteLine("Processing {0} - {1}", ieWindow.Classname, ieWindow.Text);
Accessible ieAccessible = null; Accessible ieAccessible = null;
var directUiwd = IEHelper.GetDirectUi(ieWindow); var directUiwd = InternetExplorerHelper.GetDirectUi(ieWindow);
if (directUiwd != null) if (directUiwd != null)
{ {
ieAccessible = new Accessible(directUiwd.Handle); ieAccessible = new Accessible(directUiwd.Handle);
@ -390,7 +394,7 @@ namespace Greenshot.Addon.InternetExplorer
/// <param name="capture">ICapture where the capture needs to be stored</param> /// <param name="capture">ICapture where the capture needs to be stored</param>
/// <param name="windowToCapture">window to use</param> /// <param name="windowToCapture">window to use</param>
/// <returns>ICapture with the content (if any)</returns> /// <returns>ICapture with the content (if any)</returns>
public static ICapture CaptureIe(ICapture capture, IInteropWindow windowToCapture = null) public ICapture CaptureIe(ICapture capture, IInteropWindow windowToCapture = null)
{ {
if (windowToCapture == null) if (windowToCapture == null)
{ {
@ -542,7 +546,7 @@ namespace Greenshot.Addon.InternetExplorer
/// <param name="documentContainer"></param> /// <param name="documentContainer"></param>
/// <param name="capture"></param> /// <param name="capture"></param>
/// <returns>Size of the complete page</returns> /// <returns>Size of the complete page</returns>
private static Size PrepareCapture(DocumentContainer documentContainer, ICapture capture) private Size PrepareCapture(DocumentContainer documentContainer, ICapture capture)
{ {
// Calculate the page size // Calculate the page size
var pageWidth = documentContainer.ScrollWidth; var pageWidth = documentContainer.ScrollWidth;
@ -645,7 +649,7 @@ namespace Greenshot.Addon.InternetExplorer
/// <param name="documentContainer">The document wrapped in a container</param> /// <param name="documentContainer">The document wrapped in a container</param>
/// <param name="pageSize"></param> /// <param name="pageSize"></param>
/// <returns>Bitmap with the page content as an image</returns> /// <returns>Bitmap with the page content as an image</returns>
private static Bitmap CapturePage(DocumentContainer documentContainer, Size pageSize) private Bitmap CapturePage(DocumentContainer documentContainer, Size pageSize)
{ {
var contentWindowDetails = documentContainer.ContentWindow; var contentWindowDetails = documentContainer.ContentWindow;
@ -685,7 +689,7 @@ namespace Greenshot.Addon.InternetExplorer
/// <param name="contentWindowDetails">Needed for referencing the location of the frame</param> /// <param name="contentWindowDetails">Needed for referencing the location of the frame</param>
/// <param name="graphicsTarget">Graphics</param> /// <param name="graphicsTarget">Graphics</param>
/// <returns>Bitmap with the capture</returns> /// <returns>Bitmap with the capture</returns>
private static void DrawDocument(DocumentContainer documentContainer, IInteropWindow contentWindowDetails, Graphics graphicsTarget) private void DrawDocument(DocumentContainer documentContainer, IInteropWindow contentWindowDetails, Graphics graphicsTarget)
{ {
documentContainer.SetAttribute("scroll", 1); documentContainer.SetAttribute("scroll", 1);

View file

@ -28,9 +28,9 @@ using Microsoft.Win32;
namespace Greenshot.Addon.InternetExplorer { namespace Greenshot.Addon.InternetExplorer {
/// <summary> /// <summary>
/// Description of IEHelper. /// Util code for Internet Explorer
/// </summary> /// </summary>
public static class IEHelper { public class InternetExplorerHelper {
private static readonly LogSource Log = new LogSource(); private static readonly LogSource Log = new LogSource();
// Internet explorer Registry key // Internet explorer Registry key

View file

@ -37,7 +37,7 @@ using IServiceProvider = Greenshot.Addons.Interop.IServiceProvider;
#endregion #endregion
namespace Greenshot.Addon.InternetExplorer.IEInterop namespace Greenshot.Addon.InternetExplorer.InternetExplorerInterop
{ {
public class DocumentContainer public class DocumentContainer
{ {

View file

@ -27,7 +27,7 @@ using System.Runtime.InteropServices;
#endregion #endregion
namespace Greenshot.Addon.InternetExplorer.IEInterop namespace Greenshot.Addon.InternetExplorer.InternetExplorerInterop
{ {
// IWebBrowser: EAB22AC1-30C1-11CF-A7EB-0000C05BAE0B // IWebBrowser: EAB22AC1-30C1-11CF-A7EB-0000C05BAE0B
// [ComVisible(true), ComImport(), Guid("D30C1661-CDAF-11D0-8A3E-00C04FC9E26E"), // [ComVisible(true), ComImport(), Guid("D30C1661-CDAF-11D0-8A3E-00C04FC9E26E"),

View file

@ -3,7 +3,8 @@
<PropertyGroup> <PropertyGroup>
<RootNamespace>Greenshot.Addon.LegacyEditor</RootNamespace> <RootNamespace>Greenshot.Addon.LegacyEditor</RootNamespace>
<AssemblyName>Greenshot.Addon.LegacyEditor</AssemblyName> <AssemblyName>Greenshot.Addon.LegacyEditor</AssemblyName>
<TargetFrameworks>net471;netcoreapp3.0</TargetFrameworks> <!--TargetFrameworks>net471;netcoreapp3.0</TargetFrameworks-->
<TargetFrameworks>net471</TargetFrameworks>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks> <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup> </PropertyGroup>

View file

@ -3,7 +3,8 @@
<PropertyGroup> <PropertyGroup>
<RootNamespace>Greenshot.Addon.Lutim</RootNamespace> <RootNamespace>Greenshot.Addon.Lutim</RootNamespace>
<AssemblyName>Greenshot.Addon.Lutim</AssemblyName> <AssemblyName>Greenshot.Addon.Lutim</AssemblyName>
<TargetFrameworks>net471;netcoreapp3.0</TargetFrameworks> <!--TargetFrameworks>net471;netcoreapp3.0</TargetFrameworks-->
<TargetFrameworks>net471</TargetFrameworks>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>

View file

@ -3,7 +3,8 @@
<PropertyGroup> <PropertyGroup>
<RootNamespace>Greenshot.Addon.OCR</RootNamespace> <RootNamespace>Greenshot.Addon.OCR</RootNamespace>
<AssemblyName>Greenshot.Addon.OCR</AssemblyName> <AssemblyName>Greenshot.Addon.OCR</AssemblyName>
<TargetFrameworks>net471;netcoreapp3.0</TargetFrameworks> <!--TargetFrameworks>net471;netcoreapp3.0</TargetFrameworks-->
<TargetFrameworks>net471</TargetFrameworks>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>

View file

@ -3,7 +3,8 @@
<PropertyGroup> <PropertyGroup>
<RootNamespace>Greenshot.Addon.Office</RootNamespace> <RootNamespace>Greenshot.Addon.Office</RootNamespace>
<AssemblyName>Greenshot.Addon.Office</AssemblyName> <AssemblyName>Greenshot.Addon.Office</AssemblyName>
<TargetFrameworks>net471;netcoreapp3.0</TargetFrameworks> <!--TargetFrameworks>net471;netcoreapp3.0</TargetFrameworks-->
<TargetFrameworks>net471</TargetFrameworks>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>

View file

@ -3,7 +3,8 @@
<PropertyGroup> <PropertyGroup>
<RootNamespace>Greenshot.Addon.OneDrive</RootNamespace> <RootNamespace>Greenshot.Addon.OneDrive</RootNamespace>
<AssemblyName>Greenshot.Addon.OneDrive</AssemblyName> <AssemblyName>Greenshot.Addon.OneDrive</AssemblyName>
<TargetFrameworks>net471;netcoreapp3.0</TargetFrameworks> <!--TargetFrameworks>net471;netcoreapp3.0</TargetFrameworks-->
<TargetFrameworks>net471</TargetFrameworks>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>

View file

@ -3,7 +3,8 @@
<PropertyGroup> <PropertyGroup>
<RootNamespace>Greenshot.Addon.Photobucket</RootNamespace> <RootNamespace>Greenshot.Addon.Photobucket</RootNamespace>
<AssemblyName>Greenshot.Addon.Photobucket</AssemblyName> <AssemblyName>Greenshot.Addon.Photobucket</AssemblyName>
<TargetFrameworks>net471;netcoreapp3.0</TargetFrameworks> <!--TargetFrameworks>net471;netcoreapp3.0</TargetFrameworks-->
<TargetFrameworks>net471</TargetFrameworks>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>

View file

@ -3,7 +3,8 @@
<PropertyGroup> <PropertyGroup>
<RootNamespace>Greenshot.Addon.Tfs</RootNamespace> <RootNamespace>Greenshot.Addon.Tfs</RootNamespace>
<AssemblyName>Greenshot.Addon.Tfs</AssemblyName> <AssemblyName>Greenshot.Addon.Tfs</AssemblyName>
<TargetFrameworks>net471;netcoreapp3.0</TargetFrameworks> <!--TargetFrameworks>net471;netcoreapp3.0</TargetFrameworks-->
<TargetFrameworks>net471</TargetFrameworks>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>

View file

@ -3,7 +3,8 @@
<PropertyGroup> <PropertyGroup>
<RootNamespace>Greenshot.Addon.Win10</RootNamespace> <RootNamespace>Greenshot.Addon.Win10</RootNamespace>
<AssemblyName>Greenshot.Addon.Win10</AssemblyName> <AssemblyName>Greenshot.Addon.Win10</AssemblyName>
<TargetFrameworks>net471;netcoreapp3.0</TargetFrameworks> <!--TargetFrameworks>net471;netcoreapp3.0</TargetFrameworks-->
<TargetFrameworks>net471</TargetFrameworks>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
@ -21,6 +22,8 @@
<ItemGroup Condition="'$(TargetFramework)' == 'net471'"> <ItemGroup Condition="'$(TargetFramework)' == 'net471'">
<!-- Light up Windows 10 features --> <!-- Light up Windows 10 features -->
<PackageReference Include="Microsoft.Toolkit.Forms.UI.Controls" Version="5.0.1" />
<!--PackageReference Include="System.Runtime.WindowsRuntime" Version="4.6.0-preview1-27018-01" />-->
<Reference Include="System.Runtime.WindowsRuntime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"> <Reference Include="System.Runtime.WindowsRuntime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion> <SpecificVersion>False</SpecificVersion>
<HintPath>C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.Runtime.WindowsRuntime.dll</HintPath> <HintPath>C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.Runtime.WindowsRuntime.dll</HintPath>

View file

@ -1,7 +1,8 @@
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop"> <Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
<PropertyGroup> <PropertyGroup>
<TargetFrameworks>net471;netcoreapp3.0</TargetFrameworks> <!--TargetFrameworks>net471;netcoreapp3.0</TargetFrameworks-->
<TargetFrameworks>net471</TargetFrameworks>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks> <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup> </PropertyGroup>

View file

@ -1,7 +1,8 @@
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop"> <Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
<PropertyGroup> <PropertyGroup>
<TargetFrameworks>net471;netcoreapp3.0</TargetFrameworks> <!--TargetFrameworks>net471;netcoreapp3.0</TargetFrameworks-->
<TargetFrameworks>net471</TargetFrameworks>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks> <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup> </PropertyGroup>

View file

@ -1,7 +1,8 @@
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop"> <Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
<PropertyGroup> <PropertyGroup>
<TargetFrameworks>net471;netcoreapp3.0</TargetFrameworks> <!--TargetFrameworks>net471;netcoreapp3.0</TargetFrameworks-->
<TargetFrameworks>net471</TargetFrameworks>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks> <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup> </PropertyGroup>

View file

@ -1,7 +1,8 @@
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop"> <Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
<PropertyGroup> <PropertyGroup>
<TargetFrameworks>net471;netcoreapp3.0</TargetFrameworks> <!--TargetFrameworks>net471;netcoreapp3.0</TargetFrameworks-->
<TargetFrameworks>net471</TargetFrameworks>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks> <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup> </PropertyGroup>

View file

@ -4,7 +4,8 @@
<RootNamespace>Greenshot.PerformanceTests</RootNamespace> <RootNamespace>Greenshot.PerformanceTests</RootNamespace>
<AssemblyName>Greenshot.PerformanceTests</AssemblyName> <AssemblyName>Greenshot.PerformanceTests</AssemblyName>
<OutputType>Exe</OutputType> <OutputType>Exe</OutputType>
<TargetFrameworks>net471;netcoreapp3.0</TargetFrameworks> <!--TargetFrameworks>net471;netcoreapp3.0</TargetFrameworks-->
<TargetFrameworks>net471</TargetFrameworks>
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies> <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
</PropertyGroup> </PropertyGroup>

View file

@ -1,7 +1,8 @@
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop"> <Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
<PropertyGroup> <PropertyGroup>
<TargetFrameworks>net471;netcoreapp3.0</TargetFrameworks> <!--TargetFrameworks>net471;netcoreapp3.0</TargetFrameworks-->
<TargetFrameworks>net471</TargetFrameworks>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks> <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup> </PropertyGroup>

View file

@ -0,0 +1,30 @@
using System.Collections.Generic;
using Greenshot.Addon.InternetExplorer;
using Greenshot.Addons.Interfaces;
namespace Greenshot.Components
{
/// <summary>
/// This is the information which is needed for making captures possible.
/// </summary>
public class CaptureSupportInfo
{
/// <summary>
/// Constructor
/// </summary>
/// <param name="internetExplorerCaptureHelper">InternetExplorerCaptureHelper</param>
/// <param name="formEnhancers">IEnumerable with IFormEnhancer</param>
public CaptureSupportInfo(
InternetExplorerCaptureHelper internetExplorerCaptureHelper,
IEnumerable<IFormEnhancer> formEnhancers = null
)
{
InternetExplorerCaptureHelper = internetExplorerCaptureHelper;
FormEnhancers = formEnhancers;
}
public InternetExplorerCaptureHelper InternetExplorerCaptureHelper { get; }
public IEnumerable<IFormEnhancer> FormEnhancers { get; }
}
}

View file

@ -61,7 +61,7 @@ namespace Greenshot.Components
private readonly HotkeyService _hotkeyService; private readonly HotkeyService _hotkeyService;
private readonly DestinationHolder _destinationHolder; private readonly DestinationHolder _destinationHolder;
private ServiceHost _host; private ServiceHost _host;
private IEnumerable<IFormEnhancer> _formEnhancers; private CaptureSupportInfo _captureSupportInfo;
public static string Identity public static string Identity
{ {
@ -78,9 +78,9 @@ namespace Greenshot.Components
MainForm mainForm, MainForm mainForm,
HotkeyService hotkeyService, HotkeyService hotkeyService,
DestinationHolder destinationHolder, DestinationHolder destinationHolder,
IEnumerable<IFormEnhancer> formEnhancers = null) CaptureSupportInfo captureSupportInfo)
{ {
_formEnhancers = formEnhancers; _captureSupportInfo = captureSupportInfo;
_coreConfiguration = coreConfiguration; _coreConfiguration = coreConfiguration;
_mainForm = mainForm; _mainForm = mainForm;
_hotkeyService = hotkeyService; _hotkeyService = hotkeyService;
@ -141,7 +141,7 @@ namespace Greenshot.Components
Log.Debug().WriteLine("Open file requested: {0}", filename); Log.Debug().WriteLine("Open file requested: {0}", filename);
if (File.Exists(filename)) if (File.Exists(filename))
{ {
CaptureHelper.CaptureFile(_formEnhancers, filename); CaptureHelper.CaptureFile(_captureSupportInfo, filename);
} }
else else
{ {
@ -171,13 +171,13 @@ namespace Greenshot.Components
switch (captureMode.ToLower()) switch (captureMode.ToLower())
{ {
case "region": case "region":
CaptureHelper.CaptureRegion(_formEnhancers, false, destination); CaptureHelper.CaptureRegion(_captureSupportInfo, false, destination);
break; break;
case "window": case "window":
CaptureHelper.CaptureWindow(_formEnhancers, false, destination); CaptureHelper.CaptureWindow(_captureSupportInfo, false, destination);
break; break;
case "fullscreen": case "fullscreen":
CaptureHelper.CaptureFullscreen(_formEnhancers, false, ScreenCaptureMode.FullScreen, destination); CaptureHelper.CaptureFullscreen(_captureSupportInfo, false, ScreenCaptureMode.FullScreen, destination);
break; break;
default: default:
Log.Warn().WriteLine("Unknown capture option"); Log.Warn().WriteLine("Unknown capture option");

View file

@ -42,13 +42,13 @@ namespace Greenshot.Components
{ {
private static readonly LogSource Log = new LogSource(); private static readonly LogSource Log = new LogSource();
private readonly ICoreConfiguration _coreConfiguration; private readonly ICoreConfiguration _coreConfiguration;
private readonly IEnumerable<IFormEnhancer> _formEnhancers; private readonly CaptureSupportInfo _captureSupportInfo;
private IDisposable _subscriptions; private IDisposable _subscriptions;
public HotkeyService(ICoreConfiguration coreConfiguration, IEnumerable<IFormEnhancer> formEnhancers = null) public HotkeyService(ICoreConfiguration coreConfiguration, CaptureSupportInfo captureSupportInfo)
{ {
_coreConfiguration = coreConfiguration; _coreConfiguration = coreConfiguration;
_formEnhancers = formEnhancers; _captureSupportInfo = captureSupportInfo;
} }
/// <summary> /// <summary>
@ -120,36 +120,36 @@ namespace Greenshot.Components
private void CaptureRegion(KeyboardHookEventArgs keyboardHookEventArgs) private void CaptureRegion(KeyboardHookEventArgs keyboardHookEventArgs)
{ {
Execute.BeginOnUIThread(() => CaptureHelper.CaptureRegion(_formEnhancers, true)); Execute.BeginOnUIThread(() => CaptureHelper.CaptureRegion(_captureSupportInfo, true));
} }
private void CaptureWindow(KeyboardHookEventArgs keyboardHookEventArgs) private void CaptureWindow(KeyboardHookEventArgs keyboardHookEventArgs)
{ {
if (_coreConfiguration.CaptureWindowsInteractive) if (_coreConfiguration.CaptureWindowsInteractive)
{ {
Execute.BeginOnUIThread(() => CaptureHelper.CaptureWindowInteractive(_formEnhancers, true)); Execute.BeginOnUIThread(() => CaptureHelper.CaptureWindowInteractive(_captureSupportInfo, true));
} }
else else
{ {
Execute.BeginOnUIThread(() => CaptureHelper.CaptureWindow(_formEnhancers, true)); Execute.BeginOnUIThread(() => CaptureHelper.CaptureWindow(_captureSupportInfo, true));
} }
} }
private void CaptureFullscreen(KeyboardHookEventArgs keyboardHookEventArgs) private void CaptureFullscreen(KeyboardHookEventArgs keyboardHookEventArgs)
{ {
Execute.BeginOnUIThread(() => CaptureHelper.CaptureFullscreen(_formEnhancers, true, _coreConfiguration.ScreenCaptureMode)); Execute.BeginOnUIThread(() => CaptureHelper.CaptureFullscreen(_captureSupportInfo, true, _coreConfiguration.ScreenCaptureMode));
} }
private void CaptureLast(KeyboardHookEventArgs keyboardHookEventArgs) private void CaptureLast(KeyboardHookEventArgs keyboardHookEventArgs)
{ {
Execute.BeginOnUIThread(() => CaptureHelper.CaptureLastRegion(_formEnhancers, true)); Execute.BeginOnUIThread(() => CaptureHelper.CaptureLastRegion(_captureSupportInfo, true));
} }
private void CaptureIe(KeyboardHookEventArgs keyboardHookEventArgs) private void CaptureIe(KeyboardHookEventArgs keyboardHookEventArgs)
{ {
if (_coreConfiguration.IECapture) if (_coreConfiguration.IECapture)
{ {
Execute.BeginOnUIThread(() => CaptureHelper.CaptureIe(_formEnhancers, true, null)); Execute.BeginOnUIThread(() => CaptureHelper.CaptureIe(_captureSupportInfo, true, null));
} }
} }
} }

View file

@ -63,6 +63,7 @@ using Dapplo.Config.Ini;
using Dapplo.Windows.User32; using Dapplo.Windows.User32;
using Greenshot.Addons.Resources; using Greenshot.Addons.Resources;
using Greenshot.Addons.Interfaces; using Greenshot.Addons.Interfaces;
using Greenshot.Components;
#endregion #endregion
@ -77,6 +78,7 @@ namespace Greenshot.Forms
private readonly ICoreConfiguration _coreConfiguration; private readonly ICoreConfiguration _coreConfiguration;
private readonly IWindowManager _windowManager; private readonly IWindowManager _windowManager;
private readonly IGreenshotLanguage _greenshotLanguage; private readonly IGreenshotLanguage _greenshotLanguage;
private readonly InternetExplorerCaptureHelper _internetExplorerCaptureHelper;
private readonly Func<Owned<ConfigViewModel>> _configViewModelFactory; private readonly Func<Owned<ConfigViewModel>> _configViewModelFactory;
private readonly Func<Owned<AboutForm>> _aboutFormFactory; private readonly Func<Owned<AboutForm>> _aboutFormFactory;
@ -84,7 +86,7 @@ namespace Greenshot.Forms
private readonly Timer _doubleClickTimer = new Timer(); private readonly Timer _doubleClickTimer = new Timer();
private readonly DestinationHolder _destinationHolder; private readonly DestinationHolder _destinationHolder;
private readonly IEnumerable<IFormEnhancer> _formEnhancers; private readonly CaptureSupportInfo _captureSupportInfo;
// Thumbnail preview // Thumbnail preview
private ThumbnailForm _thumbnailForm; private ThumbnailForm _thumbnailForm;
@ -94,20 +96,22 @@ namespace Greenshot.Forms
public MainForm(ICoreConfiguration coreConfiguration, public MainForm(ICoreConfiguration coreConfiguration,
IWindowManager windowManager, IWindowManager windowManager,
IGreenshotLanguage greenshotLanguage, IGreenshotLanguage greenshotLanguage,
InternetExplorerCaptureHelper internetExplorerCaptureHelper,
GreenshotResources greenshotResources, GreenshotResources greenshotResources,
Func<Owned<ConfigViewModel>> configViewModelFactory, Func<Owned<ConfigViewModel>> configViewModelFactory,
Func<Owned<AboutForm>> aboutFormFactory, Func<Owned<AboutForm>> aboutFormFactory,
DestinationHolder destinationHolder, DestinationHolder destinationHolder,
IEnumerable<IFormEnhancer> formEnhancers = null CaptureSupportInfo captureSupportInfo
) : base(greenshotLanguage) ) : base(greenshotLanguage)
{ {
_coreConfiguration = coreConfiguration; _coreConfiguration = coreConfiguration;
_windowManager = windowManager; _windowManager = windowManager;
_greenshotLanguage = greenshotLanguage; _greenshotLanguage = greenshotLanguage;
_internetExplorerCaptureHelper = internetExplorerCaptureHelper;
_configViewModelFactory = configViewModelFactory; _configViewModelFactory = configViewModelFactory;
_aboutFormFactory = aboutFormFactory; _aboutFormFactory = aboutFormFactory;
_destinationHolder = destinationHolder; _destinationHolder = destinationHolder;
_formEnhancers = formEnhancers; _captureSupportInfo = captureSupportInfo;
Instance = this; Instance = this;
} }
@ -287,7 +291,7 @@ namespace Greenshot.Forms
if (File.Exists(_coreConfiguration.OutputFileAsFullpath)) if (File.Exists(_coreConfiguration.OutputFileAsFullpath))
{ {
CaptureHelper.CaptureFile(_formEnhancers, _coreConfiguration.OutputFileAsFullpath, _destinationHolder.SortedActiveDestinations.Find("Editor")); CaptureHelper.CaptureFile(_captureSupportInfo, _coreConfiguration.OutputFileAsFullpath, _destinationHolder.SortedActiveDestinations.Find("Editor"));
} }
break; break;
case ClickActions.OPEN_SETTINGS: case ClickActions.OPEN_SETTINGS:
@ -459,7 +463,7 @@ namespace Greenshot.Forms
if (File.Exists(openFileDialog.FileName)) if (File.Exists(openFileDialog.FileName))
{ {
CaptureHelper.CaptureFile(_formEnhancers, openFileDialog.FileName); CaptureHelper.CaptureFile(_captureSupportInfo, openFileDialog.FileName);
} }
} }
@ -467,7 +471,7 @@ namespace Greenshot.Forms
{ {
if (_coreConfiguration.IECapture) if (_coreConfiguration.IECapture)
{ {
CaptureHelper.CaptureIe(_formEnhancers, true, null); CaptureHelper.CaptureIe(_captureSupportInfo, true, null);
} }
} }
@ -486,7 +490,7 @@ namespace Greenshot.Forms
// IE context menu code // IE context menu code
try try
{ {
if (_coreConfiguration.IECapture && IeCaptureHelper.IsIeRunning()) if (_coreConfiguration.IECapture && _internetExplorerCaptureHelper.IsIeRunning())
{ {
contextmenu_captureie.Enabled = true; contextmenu_captureie.Enabled = true;
contextmenu_captureiefromlist.Enabled = true; contextmenu_captureiefromlist.Enabled = true;
@ -543,7 +547,7 @@ namespace Greenshot.Forms
} }
try try
{ {
var tabs = IeCaptureHelper.GetBrowserTabs(); var tabs = _internetExplorerCaptureHelper.GetBrowserTabs();
contextmenu_captureiefromlist.DropDownItems.Clear(); contextmenu_captureiefromlist.DropDownItems.Clear();
if (tabs.Count > 0) if (tabs.Count > 0)
{ {
@ -606,7 +610,7 @@ namespace Greenshot.Forms
var allScreensBounds = DisplayInfo.ScreenBounds; var allScreensBounds = DisplayInfo.ScreenBounds;
var captureScreenItem = new ToolStripMenuItem(_greenshotLanguage.ContextmenuCapturefullscreenAll); var captureScreenItem = new ToolStripMenuItem(_greenshotLanguage.ContextmenuCapturefullscreenAll);
captureScreenItem.Click += (o, args) => BeginInvoke((MethodInvoker) (() => CaptureHelper.CaptureFullscreen(_formEnhancers, false, ScreenCaptureMode.FullScreen))); captureScreenItem.Click += (o, args) => BeginInvoke((MethodInvoker) (() => CaptureHelper.CaptureFullscreen(_captureSupportInfo, false, ScreenCaptureMode.FullScreen)));
captureScreenMenuItem.DropDownItems.Add(captureScreenItem); captureScreenMenuItem.DropDownItems.Add(captureScreenItem);
foreach (var displayInfo in DisplayInfo.AllDisplayInfos) foreach (var displayInfo in DisplayInfo.AllDisplayInfos)
{ {
@ -629,7 +633,7 @@ namespace Greenshot.Forms
deviceAlignment += " " + _greenshotLanguage.ContextmenuCapturefullscreenRight; deviceAlignment += " " + _greenshotLanguage.ContextmenuCapturefullscreenRight;
} }
captureScreenItem = new ToolStripMenuItem(deviceAlignment); captureScreenItem = new ToolStripMenuItem(deviceAlignment);
captureScreenItem.Click += (o, args) => BeginInvoke((MethodInvoker) (() => CaptureHelper.CaptureRegion(_formEnhancers, false, screenToCapture.Bounds))); captureScreenItem.Click += (o, args) => BeginInvoke((MethodInvoker) (() => CaptureHelper.CaptureRegion(_captureSupportInfo, false, screenToCapture.Bounds)));
captureScreenMenuItem.DropDownItems.Add(captureScreenItem); captureScreenMenuItem.DropDownItems.Add(captureScreenItem);
} }
} }
@ -724,12 +728,12 @@ namespace Greenshot.Forms
private void CaptureAreaToolStripMenuItemClick(object sender, EventArgs e) private void CaptureAreaToolStripMenuItemClick(object sender, EventArgs e)
{ {
BeginInvoke((MethodInvoker) delegate { CaptureHelper.CaptureRegion(_formEnhancers, false); }); BeginInvoke((MethodInvoker) delegate { CaptureHelper.CaptureRegion(_captureSupportInfo, false); });
} }
private void CaptureClipboardToolStripMenuItemClick(object sender, EventArgs e) private void CaptureClipboardToolStripMenuItemClick(object sender, EventArgs e)
{ {
BeginInvoke(new System.Action(() => CaptureHelper.CaptureClipboard(_formEnhancers))); BeginInvoke(new System.Action(() => CaptureHelper.CaptureClipboard(_captureSupportInfo)));
} }
private void OpenFileToolStripMenuItemClick(object sender, EventArgs e) private void OpenFileToolStripMenuItemClick(object sender, EventArgs e)
@ -739,17 +743,17 @@ namespace Greenshot.Forms
private void CaptureFullScreenToolStripMenuItemClick(object sender, EventArgs e) private void CaptureFullScreenToolStripMenuItemClick(object sender, EventArgs e)
{ {
BeginInvoke((MethodInvoker) delegate { CaptureHelper.CaptureFullscreen(_formEnhancers, false, _coreConfiguration.ScreenCaptureMode); }); BeginInvoke((MethodInvoker) delegate { CaptureHelper.CaptureFullscreen(_captureSupportInfo, false, _coreConfiguration.ScreenCaptureMode); });
} }
private void Contextmenu_capturelastregionClick(object sender, EventArgs e) private void Contextmenu_capturelastregionClick(object sender, EventArgs e)
{ {
BeginInvoke((MethodInvoker) delegate { CaptureHelper.CaptureLastRegion(_formEnhancers, false); }); BeginInvoke((MethodInvoker) delegate { CaptureHelper.CaptureLastRegion(_captureSupportInfo, false); });
} }
private void Contextmenu_capturewindow_Click(object sender, EventArgs e) private void Contextmenu_capturewindow_Click(object sender, EventArgs e)
{ {
BeginInvoke((MethodInvoker) delegate { CaptureHelper.CaptureWindowInteractive(_formEnhancers, false); }); BeginInvoke((MethodInvoker) delegate { CaptureHelper.CaptureWindowInteractive(_captureSupportInfo, false); });
} }
private void Contextmenu_capturewindowfromlist_Click(object sender, EventArgs e) private void Contextmenu_capturewindowfromlist_Click(object sender, EventArgs e)
@ -760,7 +764,7 @@ namespace Greenshot.Forms
try try
{ {
var windowToCapture = (InteropWindow) clickedItem.Tag; var windowToCapture = (InteropWindow) clickedItem.Tag;
CaptureHelper.CaptureWindow(_formEnhancers, windowToCapture); CaptureHelper.CaptureWindow(_captureSupportInfo, windowToCapture);
} }
catch (Exception exception) catch (Exception exception)
{ {
@ -792,7 +796,7 @@ namespace Greenshot.Forms
} }
try try
{ {
IeCaptureHelper.ActivateIeTab(ieWindowToCapture, tabData.Value); _internetExplorerCaptureHelper.ActivateIeTab(ieWindowToCapture, tabData.Value);
} }
catch (Exception exception) catch (Exception exception)
{ {
@ -800,7 +804,7 @@ namespace Greenshot.Forms
} }
try try
{ {
CaptureHelper.CaptureIe(_formEnhancers, false, ieWindowToCapture); CaptureHelper.CaptureIe(_captureSupportInfo, false, ieWindowToCapture);
} }
catch (Exception exception) catch (Exception exception)
{ {

View file

@ -2,13 +2,17 @@
<PropertyGroup> <PropertyGroup>
<OutputType>WinExe</OutputType> <OutputType>WinExe</OutputType>
<TargetFrameworks>net471;netcoreapp3.0</TargetFrameworks> <!--TargetFrameworks>net471;netcoreapp3.0</TargetFrameworks-->
<TargetFrameworks>net471</TargetFrameworks>
<LangVersion>latest</LangVersion> <LangVersion>latest</LangVersion>
<ApplicationIcon>icons\applicationIcon\icon.ico</ApplicationIcon> <ApplicationIcon>icons\applicationIcon\icon.ico</ApplicationIcon>
<AllowUnsafeBlocks>True</AllowUnsafeBlocks> <AllowUnsafeBlocks>True</AllowUnsafeBlocks>
<ApplicationManifest>greenshot.manifest</ApplicationManifest> <ApplicationManifest>greenshot.manifest</ApplicationManifest>
<AssemblyTitle>Greenshot</AssemblyTitle> <AssemblyTitle>Greenshot</AssemblyTitle>
<AssemblyName>Greenshot</AssemblyName> <AssemblyName>Greenshot</AssemblyName>
<!--RuntimeIdentifier>win-x64</RuntimeIdentifier>
<SelfContained>true</SelfContained-->
<Platforms>AnyCPU;x86</Platforms>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>

View file

@ -72,6 +72,11 @@ namespace Greenshot
.As<IIniSection>() .As<IIniSection>()
.SingleInstance(); .SingleInstance();
builder
.RegisterType<CaptureSupportInfo>()
.AsSelf()
.SingleInstance();
builder builder
.RegisterType<ConfigTranslationsImpl>() .RegisterType<ConfigTranslationsImpl>()
.As<IConfigTranslations>() .As<IConfigTranslations>()

View file

@ -65,8 +65,8 @@ namespace Greenshot.Helpers
private static readonly ICoreConfiguration CoreConfig = new CoreConfigurationImpl(); private static readonly ICoreConfiguration CoreConfig = new CoreConfigurationImpl();
private readonly bool _captureMouseCursor; private readonly bool _captureMouseCursor;
private ICapture _capture; private ICapture _capture;
private readonly CaptureSupportInfo _captureSupportInfo;
private CaptureMode _captureMode; private CaptureMode _captureMode;
private readonly IEnumerable<IFormEnhancer> _formEnhancers;
private NativeRect _captureRect = NativeRect.Empty; private NativeRect _captureRect = NativeRect.Empty;
private ScreenCaptureMode _screenCaptureMode = ScreenCaptureMode.Auto; private ScreenCaptureMode _screenCaptureMode = ScreenCaptureMode.Auto;
// TODO: when we get the screen capture code working correctly, this needs to be enabled // TODO: when we get the screen capture code working correctly, this needs to be enabled
@ -75,28 +75,28 @@ namespace Greenshot.Helpers
private readonly DestinationHolder _destinationHolder; private readonly DestinationHolder _destinationHolder;
private readonly IEnumerable<IProcessor> _processors; private readonly IEnumerable<IProcessor> _processors;
public CaptureHelper(IEnumerable<IFormEnhancer> formEnhancers, CaptureMode captureMode) public CaptureHelper(CaptureSupportInfo captureSupportInfo, CaptureMode captureMode)
{ {
_captureSupportInfo = captureSupportInfo;
_captureMode = captureMode; _captureMode = captureMode;
_formEnhancers = formEnhancers;
_capture = new Capture(); _capture = new Capture();
_destinationHolder = DestinationHolder.Instance; _destinationHolder = DestinationHolder.Instance;
// TODO: Fix this // TODO: Fix this
_processors = Enumerable.Empty<IProcessor>(); _processors = Enumerable.Empty<IProcessor>();
} }
public CaptureHelper(IEnumerable<IFormEnhancer> formEnhancers, CaptureMode captureMode, bool captureMouseCursor) : this(formEnhancers, captureMode) public CaptureHelper(CaptureSupportInfo captureSupportInfo, CaptureMode captureMode, bool captureMouseCursor) : this(captureSupportInfo, captureMode)
{ {
_captureMouseCursor = captureMouseCursor; _captureMouseCursor = captureMouseCursor;
} }
public CaptureHelper(IEnumerable<IFormEnhancer> formEnhancers, CaptureMode captureMode, bool captureMouseCursor, ScreenCaptureMode screenCaptureMode) : this(formEnhancers, captureMode) public CaptureHelper(CaptureSupportInfo captureSupportInfo, CaptureMode captureMode, bool captureMouseCursor, ScreenCaptureMode screenCaptureMode) : this(captureSupportInfo, captureMode)
{ {
_captureMouseCursor = captureMouseCursor; _captureMouseCursor = captureMouseCursor;
_screenCaptureMode = screenCaptureMode; _screenCaptureMode = screenCaptureMode;
} }
public CaptureHelper(IEnumerable<IFormEnhancer> formEnhancers, CaptureMode captureMode, bool captureMouseCursor, IDestination destination) : this(formEnhancers, captureMode, captureMouseCursor) public CaptureHelper(CaptureSupportInfo captureSupportInfo, CaptureMode captureMode, bool captureMouseCursor, IDestination destination) : this(captureSupportInfo, captureMode, captureMouseCursor)
{ {
if (destination != null) if (destination != null)
{ {
@ -140,100 +140,100 @@ namespace Greenshot.Helpers
} }
} }
public static void CaptureClipboard(IEnumerable<IFormEnhancer> formEnhancers, IDestination destination = null) public static void CaptureClipboard(CaptureSupportInfo captureSupportInfo, IDestination destination = null)
{ {
using (var captureHelper = new CaptureHelper(formEnhancers, CaptureMode.Clipboard, false, destination)) using (var captureHelper = new CaptureHelper(captureSupportInfo, CaptureMode.Clipboard, false, destination))
{ {
captureHelper.MakeCapture(); captureHelper.MakeCapture();
} }
} }
public static void CaptureRegion(IEnumerable<IFormEnhancer> formEnhancers, bool captureMouse, IDestination destination = null) public static void CaptureRegion(CaptureSupportInfo captureSupportInfo, bool captureMouse, IDestination destination = null)
{ {
using (var captureHelper = new CaptureHelper(formEnhancers, CaptureMode.Region, captureMouse, destination)) using (var captureHelper = new CaptureHelper(captureSupportInfo, CaptureMode.Region, captureMouse, destination))
{ {
captureHelper.MakeCapture(); captureHelper.MakeCapture();
} }
} }
public static void CaptureRegion(IEnumerable<IFormEnhancer> formEnhancers, bool captureMouse, NativeRect region) public static void CaptureRegion(CaptureSupportInfo captureSupportInfo, bool captureMouse, NativeRect region)
{ {
using (var captureHelper = new CaptureHelper(formEnhancers, CaptureMode.Region, captureMouse)) using (var captureHelper = new CaptureHelper(captureSupportInfo, CaptureMode.Region, captureMouse))
{ {
captureHelper.MakeCapture(region); captureHelper.MakeCapture(region);
} }
} }
public static void CaptureFullscreen(IEnumerable<IFormEnhancer> formEnhancers, bool captureMouse, ScreenCaptureMode screenCaptureMode, IDestination destination = null) public static void CaptureFullscreen(CaptureSupportInfo captureSupportInfo, bool captureMouse, ScreenCaptureMode screenCaptureMode, IDestination destination = null)
{ {
using (var captureHelper = new CaptureHelper(formEnhancers, CaptureMode.FullScreen, captureMouse, destination)) using (var captureHelper = new CaptureHelper(captureSupportInfo, CaptureMode.FullScreen, captureMouse, destination))
{ {
captureHelper._screenCaptureMode = screenCaptureMode; captureHelper._screenCaptureMode = screenCaptureMode;
captureHelper.MakeCapture(); captureHelper.MakeCapture();
} }
} }
public static void CaptureLastRegion(IEnumerable<IFormEnhancer> formEnhancers, bool captureMouse) public static void CaptureLastRegion(CaptureSupportInfo captureSupportInfo, bool captureMouse)
{ {
using (var captureHelper = new CaptureHelper(formEnhancers, CaptureMode.LastRegion, captureMouse)) using (var captureHelper = new CaptureHelper(captureSupportInfo, CaptureMode.LastRegion, captureMouse))
{ {
captureHelper.MakeCapture(); captureHelper.MakeCapture();
} }
} }
public static void CaptureIe(IEnumerable<IFormEnhancer> formEnhancers, bool captureMouse, IInteropWindow windowToCapture) public static void CaptureIe(CaptureSupportInfo captureSupportInfo, bool captureMouse, IInteropWindow windowToCapture)
{ {
using (var captureHelper = new CaptureHelper(formEnhancers, CaptureMode.IE, captureMouse)) using (var captureHelper = new CaptureHelper(captureSupportInfo, CaptureMode.IE, captureMouse))
{ {
captureHelper.SelectedCaptureWindow = windowToCapture; captureHelper.SelectedCaptureWindow = windowToCapture;
captureHelper.MakeCapture(); captureHelper.MakeCapture();
} }
} }
public static void CaptureWindow(IEnumerable<IFormEnhancer> formEnhancers, bool captureMouse, IDestination destination = null) public static void CaptureWindow(CaptureSupportInfo captureSupportInfo, bool captureMouse, IDestination destination = null)
{ {
using (var captureHelper = new CaptureHelper(formEnhancers, CaptureMode.ActiveWindow, captureMouse, destination)) using (var captureHelper = new CaptureHelper(captureSupportInfo, CaptureMode.ActiveWindow, captureMouse, destination))
{ {
captureHelper.MakeCapture(); captureHelper.MakeCapture();
} }
} }
public static void CaptureWindow(IEnumerable<IFormEnhancer> formEnhancers, IInteropWindow windowToCapture) public static void CaptureWindow(CaptureSupportInfo captureSupportInfo, IInteropWindow windowToCapture)
{ {
using (var captureHelper = new CaptureHelper(formEnhancers, CaptureMode.ActiveWindow)) using (var captureHelper = new CaptureHelper(captureSupportInfo, CaptureMode.ActiveWindow))
{ {
captureHelper.SelectedCaptureWindow = windowToCapture; captureHelper.SelectedCaptureWindow = windowToCapture;
captureHelper.MakeCapture(); captureHelper.MakeCapture();
} }
} }
public static void CaptureWindowInteractive(IEnumerable<IFormEnhancer> formEnhancers, bool captureMouse) public static void CaptureWindowInteractive(CaptureSupportInfo captureSupportInfo, bool captureMouse)
{ {
using (var captureHelper = new CaptureHelper(formEnhancers, CaptureMode.Window)) using (var captureHelper = new CaptureHelper(captureSupportInfo, CaptureMode.Window))
{ {
captureHelper.MakeCapture(); captureHelper.MakeCapture();
} }
} }
public static void CaptureFile(IEnumerable<IFormEnhancer> formEnhancers, string filename) public static void CaptureFile(CaptureSupportInfo captureSupportInfo, string filename)
{ {
using (var captureHelper = new CaptureHelper(formEnhancers, CaptureMode.File)) using (var captureHelper = new CaptureHelper(captureSupportInfo, CaptureMode.File))
{ {
captureHelper.MakeCapture(filename); captureHelper.MakeCapture(filename);
} }
} }
public static void CaptureFile(IEnumerable<IFormEnhancer> formEnhancers, string filename, IDestination destination) public static void CaptureFile(CaptureSupportInfo captureSupportInfo, string filename, IDestination destination)
{ {
using (var captureHelper = new CaptureHelper(formEnhancers, CaptureMode.File)) using (var captureHelper = new CaptureHelper(captureSupportInfo, CaptureMode.File))
{ {
captureHelper.AddDestination(destination).MakeCapture(filename); captureHelper.AddDestination(destination).MakeCapture(filename);
} }
} }
public static void ImportCapture(IEnumerable<IFormEnhancer> formEnhancers, ICapture captureToImport) public static void ImportCapture(CaptureSupportInfo captureSupportInfo, ICapture captureToImport)
{ {
using (var captureHelper = new CaptureHelper(formEnhancers, CaptureMode.File)) using (var captureHelper = new CaptureHelper(captureSupportInfo, CaptureMode.File))
{ {
captureHelper._capture = captureToImport; captureHelper._capture = captureToImport;
captureHelper.HandleCapture(); captureHelper.HandleCapture();
@ -355,7 +355,7 @@ namespace Greenshot.Helpers
HandleCapture(); HandleCapture();
break; break;
case CaptureMode.IE: case CaptureMode.IE:
if (IeCaptureHelper.CaptureIe(_capture, SelectedCaptureWindow) != null) if (_captureSupportInfo.InternetExplorerCaptureHelper.CaptureIe(_capture, SelectedCaptureWindow) != null)
{ {
_capture.CaptureDetails.AddMetaData("source", "Internet Explorer"); _capture.CaptureDetails.AddMetaData("source", "Internet Explorer");
SetDpi(); SetDpi();
@ -782,7 +782,7 @@ namespace Greenshot.Helpers
/// <param name="captureForWindow">The capture to store the details</param> /// <param name="captureForWindow">The capture to store the details</param>
/// <param name="windowCaptureMode">What WindowCaptureModes to use</param> /// <param name="windowCaptureMode">What WindowCaptureModes to use</param>
/// <returns>ICapture</returns> /// <returns>ICapture</returns>
public static ICapture CaptureWindow(IInteropWindow windowToCapture, ICapture captureForWindow, WindowCaptureModes windowCaptureMode) public ICapture CaptureWindow(IInteropWindow windowToCapture, ICapture captureForWindow, WindowCaptureModes windowCaptureMode)
{ {
if (captureForWindow == null) if (captureForWindow == null)
{ {
@ -802,11 +802,11 @@ namespace Greenshot.Helpers
// 3) Otherwise use GDI (Screen might be also okay but might lose content) // 3) Otherwise use GDI (Screen might be also okay but might lose content)
if (isAutoMode) if (isAutoMode)
{ {
if (CoreConfig.IECapture && IeCaptureHelper.IsIeWindow(windowToCapture)) if (CoreConfig.IECapture && _captureSupportInfo.InternetExplorerCaptureHelper.IsIeWindow(windowToCapture))
{ {
try try
{ {
var ieCapture = IeCaptureHelper.CaptureIe(captureForWindow, windowToCapture); var ieCapture = _captureSupportInfo.InternetExplorerCaptureHelper.CaptureIe(captureForWindow, windowToCapture);
if (ieCapture != null) if (ieCapture != null)
{ {
return ieCapture; return ieCapture;
@ -1032,7 +1032,7 @@ namespace Greenshot.Helpers
// } // }
//} //}
using (var captureForm = new CaptureForm(CoreConfig, _capture, _windows, _formEnhancers)) using (var captureForm = new CaptureForm(CoreConfig, _capture, _windows, _captureSupportInfo.FormEnhancers))
{ {
// Make sure the form is hidden after showing, even if an exception occurs, so all errors will be shown // Make sure the form is hidden after showing, even if an exception occurs, so all errors will be shown
DialogResult result; DialogResult result;