Compare commits

...

14 commits

Author SHA1 Message Date
jklingen
c1ad1d4a93 Remove Debug Info from Release Builds
Some checks failed
Build and Deploy / build (push) Has been cancelled
Build and Deploy / deploy (push) Has been cancelled
2025-08-10 17:11:30 +02:00
jklingen
82702c4830
Chore: Update Change Log
Some checks failed
Build and Deploy / build (push) Has been cancelled
Build and Deploy / deploy (push) Has been cancelled
2025-08-09 16:43:42 +02:00
Christian Schulz
b69c415669
Fix: Define plugin name for exclusion in INI (#644)
Fixes #642 #648
2025-08-09 16:38:32 +02:00
jklingen
e81abdcd7b
Chore: Update Change Log with Latest Releases 2025-08-09 16:29:55 +02:00
jklingen
dbbfbb654e
Installer: Allow Choice between All-Users (Administrative) and Current-User Installation #625 (#641)
Some checks failed
Build and Deploy / build (push) Has been cancelled
Build and Deploy / deploy (push) Has been cancelled
Also fixes #546, #611, #598
2025-07-26 16:17:08 +02:00
jklingen
7360791872
Add Possibility to Publish Test Releases from Branches (#631)
... without causing a mess and a lot of confusion by using the same build numbers as in release branch.
2025-07-24 18:04:11 +02:00
jklingen
aa98a7ce78
Add Trademark and Logo Usage Policy 2025-07-18 11:24:21 +02:00
jklingen
dbfdfe9a05
Chore: Enhance Github Pages Rebuild Trigger with other release types
... to make sure the list on the website is always up to date, without manual interaction.
2025-07-17 17:40:11 +02:00
Thomas Braun
2121547387
added PrivilegesRequiredOverridesAllowed=commandline 2025-07-16 12:11:18 +02:00
jklingen
af04773497
Add workflow_dispatch Trigger to Build and Deploy Workflow
Some checks failed
Build and Deploy / build (push) Has been cancelled
Build and Deploy / deploy (push) Has been cancelled
2025-07-15 12:38:22 +02:00
Nathan_B
8e98cdbfb5
Add Hotkey for Resize Button in Editor (#480) 2025-05-23 15:02:44 +02:00
Jens Glathe
789a569706
fix: handle picky Win11 ToastNotificationService (#487) 2025-05-23 14:55:54 +02:00
Julien Richard
6400b08a8c
Fix scaling with fixed ratio (#514) 2025-05-23 14:43:28 +02:00
Nathan_B
1f0ae08a52
#572 Fix Error when Opening .greenshot File with Arrows 2025-05-22 18:42:02 +02:00
52 changed files with 429 additions and 67 deletions

View file

@ -1,9 +1,20 @@
env:
IS_RELEASE_BRANCH: ${{ startsWith(github.ref, 'refs/heads/release/') }}
BRANCH_NAME: ${{ github.ref_name }}
name: Build and Deploy
on:
workflow_dispatch:
push:
branches:
- 'release/1.*'
paths-ignore:
- '.github/**'
- '.gitignore'
- '*.md'
- 'LICENSE'
- 'build-and-deploy.ps1'
jobs:
build:
@ -84,7 +95,8 @@ jobs:
path: drop # Local folder where artifacts are downloaded
- name: Extract version from file name
id: extract_version
if: env.IS_RELEASE_BRANCH == 'true'
id: version_from_filename
run: |
$file = Get-ChildItem drop -Filter "Greenshot-INSTALLER-*.exe" | Select-Object -First 1
if (-not $file) {
@ -97,21 +109,46 @@ jobs:
}
shell: pwsh
- name: Set version from sanitized branch name
if: env.IS_RELEASE_BRANCH != 'true'
id: version_from_branchname
run: |
$branch = "${{ github.ref }}" -replace '^refs/heads/', ''
$sanitized = $branch -replace '[^a-zA-Z0-9._-]', '_'
echo "version=$sanitized" >> $Env:GITHUB_OUTPUT
shell: pwsh
- name: Set version info
id: version_info
run: |
echo "version=${{ steps.version_from_filename.outputs.version || steps.version_from_branchname.outputs.version }}" >> $GITHUB_OUTPUT
shell: bash
- name: Create tag
if: env.IS_RELEASE_BRANCH == 'true'
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git tag -a "v${{ steps.extract_version.outputs.version }}" -m "v${{ steps.extract_version.outputs.version }}"
git push origin "v${{ steps.extract_version.outputs.version }}"
git tag -a "v${{ steps.version_info.outputs.version }}" -m "v${{ steps.version_info.outputs.version }}"
git push origin "v${{ steps.version_info.outputs.version }}"
- name: Rename installer for non-release branch
if: env.IS_RELEASE_BRANCH != 'true'
run: |
branch="${BRANCH_NAME:-${GITHUB_REF#refs/heads/}}"
sanitized=$(echo "$branch" | sed 's/[^a-zA-Z0-9._-]/_/g')
mv drop/Greenshot-INSTALLER-*.exe "drop/Greenshot-INSTALLER-${sanitized}.exe"
shell: bash
- name: Create GitHub Release
uses: softprops/action-gh-release@v2
with:
name: "Greenshot ${{ steps.extract_version.outputs.version }} (continuous build)"
tag_name: "v${{ steps.extract_version.outputs.version }}"
name: "Greenshot ${{ steps.version_info.outputs.version }} (continuous build)"
tag_name: ${{ env.IS_RELEASE_BRANCH == 'true' && format('v{0}', steps.version_info.outputs.version) || env.BRANCH_NAME }}
files: drop/*.exe
generate_release_notes: true
draft: false
draft: ${{ env.IS_RELEASE_BRANCH != 'true' }}
prerelease: true
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View file

@ -3,7 +3,7 @@ name: Update GitHub Pages
on:
workflow_dispatch:
release:
types: [published]
types: [published, unpublished, created, edited, deleted, prereleased, released]
jobs:
update-gh-pages:

View file

@ -21,10 +21,25 @@ Being easy to understand and configurable, Greenshot is an efficient tool for pr
About this repository
---------------------
This repository is for Greenshot 1.3, currently in development, but is the next planned release
This is the development branch is for Greenshot 1.3, which has been first released on 2025-07-14.
Releases
--------
You can find a list of all releases (stable and unstable) in the [Github releases](https://github.com/greenshot/greenshot/releases) or in the [version history on our website](https://getgreenshot.org/version-history/).
The [downloads page on our website](https://getgreenshot.org/downloads/) always links to the latest stable release.
Trademark and Logo Usage Policy
-------------------------------
The Greenshot logo and trademark are the property of the Greenshot development team. Unauthorized use of the logo and trademark is generally prohibited. However, we allow the use of the Greenshot name and logo in the following contexts:
* In blog posts, articles, or reviews that discuss or promote the Greenshot, provided that the usage is fair and does not imply endorsement by Greenshot.
* In educational materials or presentations that accurately represent the project.
Please refrain from using the Greenshot logo and trademark in any promotional materials, products, or in a manner that may cause confusion or imply endorsement without prior written permission.
If you have any questions or wish to seek permission for other uses, please contact us.
Thank you for your understanding and cooperation.

View file

@ -7,7 +7,29 @@ CHANGE LOG:
All details to our tickets can be found here: https://greenshot.atlassian.net
# Release notes for Greenshot 1.3
# Greenshot 1.3.xxx
Bugs fixed:
* greenshot.ini: Exclude Plugins and Include Plugins setting broken [#648](https://github.com/greenshot/greenshot/issues/648) [#642](https://github.com/greenshot/greenshot/issues/642) thanks to @Christian-Schulz for providing the fix
Features added:
# Greenshot 1.3.296
Bugs fixed
* Fix Administrative installation via user interface [#546](https://github.com/greenshot/greenshot/issues/546) [#611](https://github.com/greenshot/greenshot/issues/611) [#598](https://github.com/greenshot/greenshot/issues/598)
Features added:
* Installer: Allow Choice between All-Users (Administrative) and Current-User Installation [#625](https://github.com/greenshot/greenshot/pull/625)
# Greenshot 1.3.292
Bugs fixed:
* Fix Administrative installation via command line using /ALLUSERS [#601](https://github.com/greenshot/greenshot/issues/601) [#619](https://github.com/greenshot/greenshot/issues/619)
# Greenshot 1.3.290
Note: the version information for the first 1.3 release is outdated/incomplete. Due to the long timespan and large amount of changes between 1.2 and 1.3 we lost track. Sorry.
Greenshot 1.3 is the first Greenshot which targets .NET 4.7.2 which just by doing to solves some general issues in the area of Internet Explorer capturing, TLS communication and some other minor issues.
@ -646,3 +668,5 @@ Features added:
* when clicking two overlapping elements, the one created later gets selected [ 1725175 ]
* created textboxes can now be edited with a doubleclick [ 1704408 ]
* selected font is now stored in the application config file [ 1704411 ]

View file

@ -127,13 +127,18 @@ AppVersion={#Version}
ArchitecturesInstallIn64BitMode=x64
Compression=lzma2/ultra64
SolidCompression=yes
DefaultDirName={code:DefDirRoot}\{#ExeName}
DefaultDirName={autopf}\{#ExeName}
DefaultGroupName={#ExeName}
InfoBeforeFile=..\additional_files\readme.txt
LicenseFile=..\additional_files\license.txt
LanguageDetectionMethod=uilanguage
MinVersion=6.1sp1
OutputDir=..\
; user may choose between all-users vs. current-user installation in a dialog or by using the /ALLUSERS flag (on the command line)
; in registry section, HKA will take care of the appropriate root key (HKLM vs. HKCU), see https://jrsoftware.org/ishelp/index.php?topic=admininstallmode
PrivilegesRequiredOverridesAllowed=dialog
; admin privileges not required, unless user chooses all-users installation
; the installer will ask for elevation if needed
PrivilegesRequired=lowest
SetupIconFile=..\..\src\Greenshot\icons\applicationIcon\icon.ico
#if CertumThumbprint != ""
@ -154,6 +159,7 @@ VersionInfoVersion={#Version}
WizardImageFile=installer-large.bmp
; Reference a bitmap, max size 55x58
WizardSmallImageFile=installer-small.bmp
[Registry]
; Delete all startup entries, so we don't have leftover values
Root: HKCU; Subkey: Software\Microsoft\Windows\CurrentVersion\Run; ValueType: none; ValueName: {#ExeName}; Flags: deletevalue noerror;
@ -172,24 +178,16 @@ Root: HKLM; Subkey: Software\Classes\.greenshot; ValueType: none; ValueName: {#E
Root: HKLM; Subkey: Software\Classes\Greenshot; ValueType: none; ValueName: {#ExeName}; Flags: deletevalue noerror;
; Create the startup entries if requested to do so
; HKEY_LOCAL_USER - for current user only
Root: HKCU; Subkey: Software\Microsoft\Windows\CurrentVersion\Run; ValueType: string; ValueName: {#ExeName}; ValueData: """{app}\{#ExeName}.exe"""; Permissions: users-modify; Flags: uninsdeletevalue noerror; Tasks: startup; Check: IsRegularUser
; HKEY_LOCAL_MACHINE - for all users when admin
Root: HKLM; Subkey: Software\Microsoft\Windows\CurrentVersion\Run; ValueType: string; ValueName: {#ExeName}; ValueData: """{app}\{#ExeName}.exe"""; Permissions: admins-modify; Flags: uninsdeletevalue noerror; Tasks: startup; Check: not IsRegularUser
Root: HKA; Subkey: Software\Microsoft\Windows\CurrentVersion\Run; ValueType: string; ValueName: {#ExeName}; ValueData: """{app}\{#ExeName}.exe"""; Flags: uninsdeletevalue noerror; Tasks: startup
; Register our own filetype for all users
; HKEY_LOCAL_USER - for current user only
Root: HKCU; Subkey: Software\Classes\.greenshot; ValueType: string; ValueName: ""; ValueData: "Greenshot"; Permissions: users-modify; Flags: uninsdeletevalue noerror; Check: IsRegularUser
Root: HKCU; Subkey: Software\Classes\Greenshot; ValueType: string; ValueName: ""; ValueData: "Greenshot File"; Permissions: users-modify; Flags: uninsdeletevalue noerror; Check: IsRegularUser
Root: HKCU; Subkey: Software\Classes\Greenshot\DefaultIcon; ValueType: string; ValueName: ""; ValueData: """{app}\Greenshot.EXE,0"""; Permissions: users-modify; Flags: uninsdeletevalue noerror; Check: IsRegularUser
Root: HKCU; Subkey: Software\Classes\Greenshot\shell\open\command; ValueType: string; ValueName: ""; ValueData: """{app}\Greenshot.EXE"" --openfile ""%1"""; Permissions: users-modify; Flags: uninsdeletevalue noerror; Check: IsRegularUser
Root: HKA; Subkey: Software\Classes\.greenshot; ValueType: string; ValueName: ""; ValueData: "Greenshot"; Flags: uninsdeletevalue noerror
Root: HKA; Subkey: Software\Classes\Greenshot; ValueType: string; ValueName: ""; ValueData: "Greenshot File"; Flags: uninsdeletevalue noerror
Root: HKA; Subkey: Software\Classes\Greenshot\DefaultIcon; ValueType: string; ValueName: ""; ValueData: """{app}\Greenshot.EXE,0"""; Flags: uninsdeletevalue noerror
Root: HKA; Subkey: Software\Classes\Greenshot\shell\open\command; ValueType: string; ValueName: ""; ValueData: """{app}\Greenshot.EXE"" --openfile ""%1"""; Flags: uninsdeletevalue noerror
; Disable the default PRTSCR Snipping Tool in Windows 11
Root: HKCU; Subkey: Control Panel\Keyboard; ValueType: dword; ValueName: "PrintScreenKeyForSnippingEnabled"; ValueData: "0"; Flags: uninsdeletevalue; Check: ShouldDisableSnippingTool
; HKEY_LOCAL_MACHINE - for all users when admin
Root: HKLM; Subkey: Software\Classes\.greenshot; ValueType: string; ValueName: ""; ValueData: "Greenshot"; Permissions: admins-modify; Flags: uninsdeletevalue noerror; Check: not IsRegularUser
Root: HKLM; Subkey: Software\Classes\Greenshot; ValueType: string; ValueName: ""; ValueData: "Greenshot File"; Permissions: admins-modify; Flags: uninsdeletevalue noerror; Check: not IsRegularUser
Root: HKLM; Subkey: Software\Classes\Greenshot\DefaultIcon; ValueType: string; ValueName: ""; ValueData: """{app}\Greenshot.EXE,0"""; Permissions: admins-modify; Flags: uninsdeletevalue noerror; Check: not IsRegularUser
Root: HKLM; Subkey: Software\Classes\Greenshot\shell\open\command; ValueType: string; ValueName: ""; ValueData: """{app}\Greenshot.EXE"" --openfile ""%1"""; Permissions: admins-modify; Flags: uninsdeletevalue noerror; Check: not IsRegularUser
[Icons]
Name: {group}\{#ExeName}; Filename: {app}\{#ExeName}.exe; WorkingDir: {app}; AppUserModelID: "{#ExeName}"
@ -540,22 +538,6 @@ Name: "languages\zhCN"; Description: {cm:zhCN}; Types: full custom; Flags: disab
Name: "languages\zhTW"; Description: {cm:zhTW}; Types: full custom; Flags: disablenouninstallwarning; Check: hasLanguageGroup('9')
[Code]
// Do we have a regular user trying to install this?
function IsRegularUser(): Boolean;
begin
Result := not (IsAdmin or IsAdminInstallMode);
end;
// The following code is used to select the installation path, this is localappdata if non poweruser
function DefDirRoot(Param: String): String;
begin
if IsRegularUser then
Result := ExpandConstant('{localappdata}')
else
Result := ExpandConstant('{pf}')
end;
function FullInstall(Param : String) : String;
begin
result := SetupMessage(msgFullInstallation);

View file

@ -3,6 +3,10 @@
<PropertyGroup>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)' == 'Release'">
<DebugType>none</DebugType>
<DebugSymbols>false</DebugSymbols>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Dapplo.HttpExtensions.JsonNet" Version="1.1.2" />

View file

@ -0,0 +1,46 @@
/*
* Greenshot - a free and open source screenshot tool
* Copyright (C) 2007-2025 Thomas Braun, Jens Klingen, Robin Krom
*
* For more information see: https://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 <https://www.gnu.org/licenses/>.
*/
using System;
namespace Greenshot.Base.Interfaces.Plugin
{
/// <summary>
/// Attribute to specify a custom plugin identifier at assembly level
/// </summary>
[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = false)]
public class AssemblyPluginIdentifierAttribute : Attribute
{
/// <summary>
/// The identifier used for the plugin in configuration
/// </summary>
public string Identifier { get; }
/// <summary>
/// Constructor for the plugin identifier attribute
/// </summary>
/// <param name="identifier">The identifier for the plugin in configuration</param>
public AssemblyPluginIdentifierAttribute(string identifier)
{
Identifier = identifier;
}
}
}

View file

@ -1023,6 +1023,9 @@ namespace Greenshot.Editor.Forms
case Keys.C:
BtnCropClick(sender, e);
break;
case Keys.Z:
BtnResizeClick(sender, e);
break;
}
}
else if (e.Modifiers.Equals(Keys.Control))

View file

@ -2,6 +2,10 @@
<PropertyGroup>
<AllowUnsafeBlocks>True</AllowUnsafeBlocks>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)' == 'Release'">
<DebugType>none</DebugType>
<DebugSymbols>false</DebugSymbols>
</PropertyGroup>
<ItemGroup>
<None Include="Languages\language*.xml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>

View file

@ -54,6 +54,7 @@ namespace Greenshot.Editor.Helpers
{"System.Collections.Generic.List`1[[Greenshot.Base.Interfaces.Drawing.IField", typeof(List<IField>)},
{"System.Collections.Generic.List`1[[System.Drawing.Point", typeof(List<System.Drawing.Point>)},
{"Greenshot.Editor.Drawing.ArrowContainer", typeof(ArrowContainer) },
{"Greenshot.Editor.Drawing.ArrowContainer+ArrowHeadCombination", typeof(ArrowContainer.ArrowHeadCombination) },
{"Greenshot.Editor.Drawing.LineContainer", typeof(LineContainer) },
{"Greenshot.Editor.Drawing.TextContainer", typeof(TextContainer) },
{"Greenshot.Editor.Drawing.SpeechbubbleContainer", typeof(SpeechbubbleContainer) },

View file

@ -202,7 +202,7 @@ namespace Greenshot.Editor.Helpers
{
// scaled rectangle (ratio) would be taller than original
// keep width and tweak height to maintain aspect ratio
newSize = newSize.ChangeWidth(selectedSize.Width / originalRatio * flippedRatioSign);
newSize = newSize.ChangeHeight(selectedSize.Width / originalRatio * flippedRatioSign);
}
return newSize;

View file

@ -1,4 +1,8 @@
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
<PropertyGroup Condition="'$(Configuration)' == 'Release'">
<DebugType>none</DebugType>
<DebugSymbols>false</DebugSymbols>
</PropertyGroup>
<ItemGroup>
<None Include="Languages\language*.xml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>

View file

@ -21,11 +21,13 @@
using System.Reflection;
using System.Runtime.InteropServices;
using Greenshot.Base.Interfaces.Plugin;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyDescription("A plugin to upload images to Box")]
[assembly: AssemblyPluginIdentifier("Box Plugin")]
// This sets the default COM visibility of types in the assembly to invisible.
// If you need to expose a type to COM, use [ComVisible(true)] on that type.

View file

@ -1,4 +1,8 @@
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
<PropertyGroup Condition="'$(Configuration)' == 'Release'">
<DebugType>none</DebugType>
<DebugSymbols>false</DebugSymbols>
</PropertyGroup>
<ItemGroup>
<None Include="Languages\language*.xml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>

View file

@ -0,0 +1,34 @@
/*
* Greenshot - a free and open source screenshot tool
* Copyright (C) 2007-2021 Thomas Braun, Jens Klingen, Robin Krom, Francis Noel
*
* For more information see: https://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 <https://www.gnu.org/licenses/>.
*/
using System.Reflection;
using System.Runtime.InteropServices;
using Greenshot.Base.Interfaces.Plugin;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyDescription("A plugin to upload images to Confluence")]
[assembly: AssemblyPluginIdentifier("Confluence Plugin")]
// This sets the default COM visibility of types in the assembly to invisible.
// If you need to expose a type to COM, use [ComVisible(true)] on that type.
[assembly: ComVisible(false)]

View file

@ -1,4 +1,8 @@
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
<PropertyGroup Condition="'$(Configuration)' == 'Release'">
<DebugType>none</DebugType>
<DebugSymbols>false</DebugSymbols>
</PropertyGroup>
<ItemGroup>
<None Include="Languages\language*.xml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>

View file

@ -21,11 +21,13 @@
using System.Reflection;
using System.Runtime.InteropServices;
using Greenshot.Base.Interfaces.Plugin;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyDescription("A plugin to upload images to Dropbox")]
[assembly: AssemblyPluginIdentifier("Dropbox Plugin")]
// This sets the default COM visibility of types in the assembly to invisible.
// If you need to expose a type to COM, use [ComVisible(true)] on that type.

View file

@ -1,4 +1,8 @@
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
<PropertyGroup Condition="'$(Configuration)' == 'Release'">
<DebugType>none</DebugType>
<DebugSymbols>false</DebugSymbols>
</PropertyGroup>
<ItemGroup>
<None Include="Languages\language*.xml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>

View file

@ -0,0 +1,34 @@
/*
* Greenshot - a free and open source screenshot tool
* Copyright (C) 2007-2025 Thomas Braun, Jens Klingen, Robin Krom, Francis Noel
*
* For more information see: https://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 <https://www.gnu.org/licenses/>.
*/
using System.Reflection;
using System.Runtime.InteropServices;
using Greenshot.Base.Interfaces.Plugin;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyDescription("A plugin to send screenshots to other applications")]
[assembly: AssemblyPluginIdentifier("External command Plugin")]
// This sets the default COM visibility of types in the assembly to invisible.
// If you need to expose a type to COM, use [ComVisible(true)] on that type.
[assembly: ComVisible(false)]

View file

@ -1,4 +1,8 @@
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
<PropertyGroup Condition="'$(Configuration)' == 'Release'">
<DebugType>none</DebugType>
<DebugSymbols>false</DebugSymbols>
</PropertyGroup>
<ItemGroup>
<None Include="Languages\language*.xml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>

View file

@ -21,11 +21,13 @@
using System.Reflection;
using System.Runtime.InteropServices;
using Greenshot.Base.Interfaces.Plugin;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyDescription("A plugin to upload images to Flickr")]
[assembly: AssemblyPluginIdentifier("Flickr Plugin")]
// This sets the default COM visibility of types in the assembly to invisible.
// If you need to expose a type to COM, use [ComVisible(true)] on that type.

View file

@ -1,4 +1,8 @@
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
<PropertyGroup Condition="'$(Configuration)' == 'Release'">
<DebugType>none</DebugType>
<DebugSymbols>false</DebugSymbols>
</PropertyGroup>
<ItemGroup>
<None Include="Languages\language*.xml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>

View file

@ -21,12 +21,17 @@
using System.Reflection;
using System.Runtime.InteropServices;
using Greenshot.Base.Interfaces.Plugin;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyDescription("A plugin to upload images to GooglePhotos")]
// Still using the old name 'Picasa-Web Plugin' as identifier for backwards compatibility
// TODO: replace plugin identifier with "GooglePhotos Plugin" in the future
[assembly: AssemblyPluginIdentifier("Picasa-Web Plugin")]
// This sets the default COM visibility of types in the assembly to invisible.
// If you need to expose a type to COM, use [ComVisible(true)] on that type.
[assembly: ComVisible(false)]

View file

@ -1,4 +1,8 @@
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
<PropertyGroup Condition="'$(Configuration)' == 'Release'">
<DebugType>none</DebugType>
<DebugSymbols>false</DebugSymbols>
</PropertyGroup>
<ItemGroup>
<None Include="Languages\language*.xml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>

View file

@ -21,11 +21,13 @@
using System.Reflection;
using System.Runtime.InteropServices;
using Greenshot.Base.Interfaces.Plugin;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyDescription("A plugin to upload images to Imgur")]
[assembly: AssemblyPluginIdentifier("Imgur Plugin")]
// This sets the default COM visibility of types in the assembly to invisible.
// If you need to expose a type to COM, use [ComVisible(true)] on that type.

View file

@ -1,4 +1,8 @@
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
<PropertyGroup Condition="'$(Configuration)' == 'Release'">
<DebugType>none</DebugType>
<DebugSymbols>false</DebugSymbols>
</PropertyGroup>
<ItemGroup>
<None Include="Languages\language*.xml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>

View file

@ -0,0 +1,34 @@
/*
* Greenshot - a free and open source screenshot tool
* Copyright (C) 2007-2025 Thomas Braun, Jens Klingen, Robin Krom, Francis Noel
*
* For more information see: https://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 <https://www.gnu.org/licenses/>.
*/
using System.Reflection;
using System.Runtime.InteropServices;
using Greenshot.Base.Interfaces.Plugin;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyDescription("A plugin to upload images to Jira")]
[assembly: AssemblyPluginIdentifier("Jira Plugin")]
// This sets the default COM visibility of types in the assembly to invisible.
// If you need to expose a type to COM, use [ComVisible(true)] on that type.
[assembly: ComVisible(false)]

View file

@ -1,4 +1,8 @@
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
<PropertyGroup Condition="'$(Configuration)' == 'Release'">
<DebugType>none</DebugType>
<DebugSymbols>false</DebugSymbols>
</PropertyGroup>
<ItemGroup>
<None Include="Languages\language*.xml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>

View file

@ -21,11 +21,13 @@
using System.Reflection;
using System.Runtime.InteropServices;
using Greenshot.Base.Interfaces.Plugin;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyDescription("A plugin to export images to Office applications")]
[assembly: AssemblyPluginIdentifier("Office Plugin")]
// This sets the default COM visibility of types in the assembly to invisible.
// If you need to expose a type to COM, use [ComVisible(true)] on that type.

View file

@ -1,4 +1,8 @@
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
<PropertyGroup Condition="'$(Configuration)' == 'Release'">
<DebugType>none</DebugType>
<DebugSymbols>false</DebugSymbols>
</PropertyGroup>
<ItemGroup>
<None Include="Languages\language*.xml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>

View file

@ -21,12 +21,14 @@
using System.Reflection;
using System.Runtime.InteropServices;
using Greenshot.Base.Interfaces.Plugin;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyDescription("A plugin to upload images to Photobucket")]
[assembly: AssemblyPluginIdentifier("Photobucket Plugin")]
// This sets the default COM visibility of types in the assembly to invisible.
// If you need to expose a type to COM, use [ComVisible(true)] on that type.

View file

@ -1,4 +1,8 @@
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
<PropertyGroup Condition="'$(Configuration)' == 'Release'">
<DebugType>none</DebugType>
<DebugSymbols>false</DebugSymbols>
</PropertyGroup>
<ItemGroup>
<None Include="Languages\language*.xml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>

View file

@ -1,10 +1,33 @@
using System.Reflection;
/*
* Greenshot - a free and open source screenshot tool
* Copyright (C) 2007-2025 Thomas Braun, Jens Klingen, Robin Krom
*
* For more information see: https://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 <https://www.gnu.org/licenses/>.
*/
using System.Reflection;
using System.Runtime.InteropServices;
using Greenshot.Base.Interfaces.Plugin;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyDescription("A plug-in for Windows 10 only functionality")]
[assembly: AssemblyPluginIdentifier("Win10 Plugin")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from

View file

@ -95,7 +95,17 @@ namespace Greenshot.Plugin.Win10
}
// Prepare the toast notifier. Be sure to specify the AppUserModelId on your application's shortcut!
var toastNotifier = ToastNotificationManagerCompat.CreateToastNotifier();
Microsoft.Toolkit.Uwp.Notifications.ToastNotifierCompat toastNotifier = null;
try
{
toastNotifier = ToastNotificationManagerCompat.CreateToastNotifier();
}
catch (Exception ex)
{
Log.Warn("Could not create a toast notifier.", ex);
return;
}
// Here is an interesting article on reading the settings: https://www.rudyhuyn.com/blog/2018/02/10/toastnotifier-and-settings-careful-with-non-uwp-applications/
try

View file

@ -9,6 +9,10 @@
<EmbeddedResourceUseDependentUponConvention>false</EmbeddedResourceUseDependentUponConvention>
<EnableDefaultEmbeddedResourceItems>false</EnableDefaultEmbeddedResourceItems>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)' == 'Release'">
<DebugType>none</DebugType>
<DebugSymbols>false</DebugSymbols>
</PropertyGroup>
<ItemGroup>
<None Include="Languages\language*.xml">

View file

@ -219,18 +219,15 @@ namespace Greenshot.Helpers
{
var assembly = Assembly.LoadFrom(pluginFile);
var assemblyName = assembly.GetName().Name;
var pluginEntryName = $"{assemblyName}.{assemblyName.Replace("Greenshot.Plugin.", string.Empty)}Plugin";
var pluginEntryType = assembly.GetType(pluginEntryName, false, true);
if (CoreConfig.ExcludePlugins != null && CoreConfig.ExcludePlugins.Contains(pluginEntryName))
if (IsPluginExcludedByConfig(assembly, pluginFile) )
{
Log.WarnFormat("Exclude list: {0}", string.Join(",", CoreConfig.ExcludePlugins));
Log.WarnFormat("Skipping the excluded plugin {0} with version {1} from {2}", pluginEntryName, assembly.GetName().Version, pluginFile);
continue;
}
var assemblyName = assembly.GetName().Name;
var pluginEntryName = $"{assemblyName}.{assemblyName.Replace("Greenshot.Plugin.", string.Empty)}Plugin";
var pluginEntryType = assembly.GetType(pluginEntryName, false, true);
var plugin = (IGreenshotPlugin) Activator.CreateInstance(pluginEntryType);
if (plugin != null)
{
@ -255,5 +252,54 @@ namespace Greenshot.Helpers
}
}
}
/// <summary>
/// This method checks the plugin against the configured include and exclude plugin
/// lists. If a plugin is excluded, a warning is logged with details about the exclusion.
/// </summary>
private bool IsPluginExcludedByConfig(Assembly assembly, string pluginFile)
{
// Get plugin identifier from assembly attributes
string pluginConfigIdentifier = GetPluginIdentifier(assembly, pluginFile);
if (CoreConfig.IncludePlugins is { } includePlugins
&& includePlugins.Count(p => !string.IsNullOrWhiteSpace(p)) > 0 // ignore empty entries i.e. a whitespace
&& !includePlugins.Contains(pluginConfigIdentifier))
{
Log.WarnFormat("Include plugin list: {0}", string.Join(",", includePlugins));
Log.WarnFormat("Skipping the not included plugin '{0}' with version {1} from {2}", pluginConfigIdentifier, assembly.GetName().Version, pluginFile);
return true;
}
if (CoreConfig.ExcludePlugins is { } excludePlugins
&& excludePlugins.Contains(pluginConfigIdentifier))
{
Log.WarnFormat("Exclude plugin list: {0}", string.Join(",", excludePlugins));
Log.WarnFormat("Skipping the excluded plugin '{0}' with version {1} from {2}", pluginConfigIdentifier, assembly.GetName().Version, pluginFile);
return true;
}
return false;
}
/// <summary>
/// Retrieves the plugin identifier for the specified assembly.
/// </summary>
private string GetPluginIdentifier(Assembly assembly, string pluginFile)
{
// Try to find PluginIdentifierAttribute
var attribute = assembly
.GetCustomAttributes<AssemblyPluginIdentifierAttribute>()
.FirstOrDefault();
if (!string.IsNullOrEmpty(attribute?.Identifier))
{
return attribute.Identifier;
}
// If no attribute found, fall back to the sub namespace
var pluginSubNamespace = assembly.GetName().Name.Replace("Greenshot.Plugin.", string.Empty);
Log.WarnFormat("No '{0}' found in '{1}'. Use plugin namespace '{2}' as fallback.", nameof(AssemblyPluginIdentifierAttribute), pluginFile, pluginSubNamespace);
return pluginSubNamespace;
}
}
}

View file

@ -305,7 +305,7 @@ Malgrat això, encara es poden utilitzar totes les característiques de Greensho
<resource name="editor_counter">Afegeix un comptador (I)</resource>
<resource name="editor_speechbubble">Afegeix una bafarada (S)</resource>
<resource name="editor_resize">Canvia la mida</resource>
<resource name="editor_resize">Canvia la mida (Z)</resource>
<resource name="editor_resize_settings">Configuració del canvi de mida</resource>
<resource name="editor_resize_aspectratio">Manté la relació d'aspecte</resource>
<resource name="editor_resize_width">Amplada</resource>

View file

@ -308,7 +308,7 @@ Všechny funkce Greenshotu jsou stále dostupné přímo z místní nabídky bez
<resource name="editor_counter">Přidat počítadlo (I)</resource>
<resource name="editor_speechbubble">Přidat textovou bublinu (S)</resource>
<resource name="editor_resize">Změnit velikost</resource>
<resource name="editor_resize">Změnit velikost (Z)</resource>
<resource name="editor_resize_settings">Nastavení změny velikosti</resource>
<resource name="editor_resize_aspectratio">Zachovat poměr stran</resource>
<resource name="editor_resize_width">Šířka</resource>

View file

@ -312,7 +312,7 @@ Sie können aber auch alle Greenshot-Funktionen über das Kontextmenü des Green
<resource name="editor_counter">Zähler hinzufügen (I)</resource>
<resource name="editor_speechbubble">Sprechblase hinzufügen (S)</resource>
<resource name="editor_resize">Skalieren</resource>
<resource name="editor_resize">Skalieren (Z)</resource>
<resource name="editor_resize_settings">Einstellungen für Skalierung</resource>
<resource name="editor_resize_aspectratio">Seitenverhältnis beibehalten</resource>
<resource name="editor_resize_width">Breite</resource>

View file

@ -312,7 +312,7 @@ All Greenshot features still work directly from the tray icon context menu witho
<resource name="editor_counter">Add counter (I)</resource>
<resource name="editor_speechbubble">Add speechbubble (S)</resource>
<resource name="editor_resize">Resize</resource>
<resource name="editor_resize">Resize (Z)</resource>
<resource name="editor_resize_settings">Resize settings</resource>
<resource name="editor_resize_aspectratio">Maintain aspect ratio</resource>
<resource name="editor_resize_width">Width</resource>

View file

@ -144,7 +144,7 @@ De plus, nous apprécierions beaucoup que vous preniez la peine de vérifier si
<resource name="editor_print">Imprimer</resource>
<resource name="editor_redo">Rétablir {0}</resource>
<resource name="editor_resetsize">Réinitialiser la taille</resource>
<resource name="editor_resize">Redimensionner</resource>
<resource name="editor_resize">Redimensionner (Z)</resource>
<resource name="editor_resize_aspectratio">Maintenir le rapport L / H</resource>
<resource name="editor_resize_height">Hauteur</resource>
<resource name="editor_resize_percent">Pourcentage</resource>

View file

@ -144,7 +144,7 @@ Juga, kami sangat terbantu apabila anda mengecek laporan lain yang sama dengan k
<resource name="editor_print">Cetak</resource>
<resource name="editor_redo">Ulang {0}</resource>
<resource name="editor_resetsize">Reset ukuran</resource>
<resource name="editor_resize">Ubah ukuran</resource>
<resource name="editor_resize">Ubah ukuran (Z)</resource>
<resource name="editor_resize_aspectratio">Pertahankan aspek rasio</resource>
<resource name="editor_resize_height">Tinggi</resource>
<resource name="editor_resize_percent">Persen</resource>

View file

@ -322,7 +322,7 @@ In alternativa alle scorciatoie di tastiera, tutte le funzioni di Greenshot sono
<resource name="editor_counter">Aggiungi conteggio</resource>
<resource name="editor_speechbubble">Aggiungi nuvoletta</resource>
<resource name="editor_resize">Ridimensiona</resource>
<resource name="editor_resize">Ridimensiona (Z)</resource>
<resource name="editor_resize_settings">Impostazioni ridimensionamento</resource>
<resource name="editor_resize_aspectratio">Mantieni rapporto dimensioni</resource>
<resource name="editor_resize_width">Larghezza</resource>

View file

@ -143,7 +143,7 @@ Greenshot には一切の保障がありません。GNU General Public License
<resource name="editor_print">印刷</resource>
<resource name="editor_redo">やり直し{0}</resource>
<resource name="editor_resetsize">サイズをリセット</resource>
<resource name="editor_resize">リサイズ</resource>
<resource name="editor_resize">リサイズ (Z)</resource>
<resource name="editor_resize_aspectratio">縦横比を維持する</resource>
<resource name="editor_resize_height">高さ</resource>
<resource name="editor_resize_percent">パーセント</resource>

View file

@ -144,7 +144,7 @@ Rnu ɣur-s, nḥemmel aṭas ma yella tesneqdeḍ aneqqis igebren ugur-agi. (Tze
<resource name="editor_print">Siggez</resource>
<resource name="editor_redo">Err-d {0}</resource>
<resource name="editor_resetsize">Wennez teɣzi</resource>
<resource name="editor_resize">Snifel tahri/teɣzi</resource>
<resource name="editor_resize">Snifel tahri/teɣzi (Z)</resource>
<resource name="editor_resize_aspectratio">Eǧǧ afmiḍi Teɣ / Teh</resource>
<resource name="editor_resize_height">Awrir</resource>
<resource name="editor_resize_percent">Afmiḍi</resource>

View file

@ -304,7 +304,7 @@ ${hostname} PC명
<resource name="editor_counter">카운터 더하기 (I)</resource>
<resource name="editor_speechbubble">설명선 더하기(S)</resource>
<resource name="editor_resize">크기조정</resource>
<resource name="editor_resize">크기조정 (Z)</resource>
<resource name="editor_resize_settings">크기조정 설정</resource>
<resource name="editor_resize_aspectratio">종횡비 유지</resource>
<resource name="editor_resize_width">너비</resource>

View file

@ -306,7 +306,7 @@ Arī bez karstiem taustiņiem visas darbības iespējams veikt izmantojot „Gre
<resource name="editor_counter">Pievienot skaitli (I)</resource>
<resource name="editor_speechbubble">Pievienot teksta norādi (S)</resource>
<resource name="editor_resize">Mainīt izmēru</resource>
<resource name="editor_resize">Mainīt izmēru (Z)</resource>
<resource name="editor_resize_settings">Izmēra maiņas iestatījumi</resource>
<resource name="editor_resize_aspectratio">Saglabāt izmēru attiecības</resource>
<resource name="editor_resize_width">Platums</resource>

View file

@ -307,7 +307,7 @@ Alle Greenshot functies werken ook zonder sneltoetsen via het context menu.</res
<resource name="editor_counter">Teller toevoegen (I)</resource>
<resource name="editor_speechbubble">Tekstballon toevoegen (S)</resource>
<resource name="editor_resize">Grootte</resource>
<resource name="editor_resize">Grootte (Z)</resource>
<resource name="editor_resize_settings">Vergrotingsinstellingen</resource>
<resource name="editor_resize_aspectratio">Verhouding behouden</resource>
<resource name="editor_resize_width">Breedte</resource>

View file

@ -305,7 +305,7 @@ Todas as funcionalidades do Greenshot funcionam directamente através do menu de
<resource name="editor_counter">Adicionar contador (I)</resource>
<resource name="editor_speechbubble">Adicionar balão de texto (S)</resource>
<resource name="editor_resize">Redimensionar</resource>
<resource name="editor_resize">Redimensionar (Z)</resource>
<resource name="editor_resize_settings">Definições de Redimensionamento</resource>
<resource name="editor_resize_aspectratio">Manter proporções</resource>
<resource name="editor_resize_width">Largura</resource>

View file

@ -305,7 +305,7 @@ Alla Greenshots funktioner fungerar fortfarande från snabbmenyn i aktivitetsfä
<resource name="editor_counter">Lägg till räknare</resource>
<resource name="editor_speechbubble">Lägg till pratbubbla</resource>
<resource name="editor_resize">Anpassa storlek</resource>
<resource name="editor_resize">Anpassa storlek (Z)</resource>
<resource name="editor_resize_settings">Storleksinställningar</resource>
<resource name="editor_resize_aspectratio">Behåll bildförhållande</resource>
<resource name="editor_resize_width">Bredd</resource>

View file

@ -306,7 +306,7 @@ ${hostname} назва комп’ютера
<resource name="editor_counter">Додати лічильник (Ш)</resource>
<resource name="editor_speechbubble">Додати словесну бульбашку (І)</resource>
<resource name="editor_resize">Змінити розмір</resource>
<resource name="editor_resize">Змінити розмір (Z)</resource>
<resource name="editor_resize_settings">Параметри зміни розміру</resource>
<resource name="editor_resize_aspectratio">Зберігати пропорції</resource>
<resource name="editor_resize_width">Ширина</resource>

View file

@ -307,7 +307,7 @@ Greenshot 所有功能仍然可以直接從通知區圖示的內容功能表動
<resource name="editor_counter">加入計數器 (I)</resource>
<resource name="editor_speechbubble">加入對話框 (S)</resource>
<resource name="editor_resize">縮放</resource>
<resource name="editor_resize">縮放 (Z)</resource>
<resource name="editor_resize_settings">縮放設定</resource>
<resource name="editor_resize_aspectratio">維持長寬比</resource>
<resource name="editor_resize_width">長度</resource>