diff --git a/Directory.Build.props b/Directory.Build.props
index 8f62e6686..82cd9b810 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -72,6 +72,8 @@
mkdir "$(SolutionDir)$(SolutionName)\$(OutDir)Languages"
)
xcopy /q /y /d "$(TargetDir)Languages\*.xml" "$(SolutionDir)$(SolutionName)\$(OutDir)Languages"
+ del "$(SolutionDir)$(SolutionName)\$(OutDir)Languages\language-installer*.xml";
+ del "$(SolutionDir)$(SolutionName)\$(OutDir)Languages\language-website*.xml";
)" />
diff --git a/Greenshot/Greenshot.csproj b/Greenshot/Greenshot.csproj
index f1187d7ce..04f49c8f7 100644
--- a/Greenshot/Greenshot.csproj
+++ b/Greenshot/Greenshot.csproj
@@ -72,4 +72,9 @@
+
+
+ copy "$(SolutionDir)Greenshot\log4net-debug.xml" "$(SolutionDir)Greenshot\bin\$(Configuration)\net471\log4net.xml"
+
+
diff --git a/Greenshot/Languages/language-installer-de-DE.xml b/Greenshot/Languages/installer/language-installer-de-DE.xml
similarity index 98%
rename from Greenshot/Languages/language-installer-de-DE.xml
rename to Greenshot/Languages/installer/language-installer-de-DE.xml
index ffbbafc05..743515c35 100644
--- a/Greenshot/Languages/language-installer-de-DE.xml
+++ b/Greenshot/Languages/installer/language-installer-de-DE.xml
@@ -1,14 +1,14 @@
-
-
-
- {#ExeName} starten wenn Windows hochfährt
- {#ExeName} starten
- Jira Plug-in
- Confluence Plug-in
- Öffne mit ein externem Kommando Plug-in
- OCR Plug-in (benötigt Microsoft Office Document Imaging (MODI))
- Imgur Plug-in (Siehe: http://imgur.com)
- Zusätzliche Sprachen
- Optimierung der Leistung, kann etwas dauern.
-
+
+
+
+ {#ExeName} starten wenn Windows hochfährt
+ {#ExeName} starten
+ Jira Plug-in
+ Confluence Plug-in
+ Öffne mit ein externem Kommando Plug-in
+ OCR Plug-in (benötigt Microsoft Office Document Imaging (MODI))
+ Imgur Plug-in (Siehe: http://imgur.com)
+ Zusätzliche Sprachen
+ Optimierung der Leistung, kann etwas dauern.
+
\ No newline at end of file
diff --git a/Greenshot/Languages/language-installer-en-US.xml b/Greenshot/Languages/installer/language-installer-en-US.xml
similarity index 98%
rename from Greenshot/Languages/language-installer-en-US.xml
rename to Greenshot/Languages/installer/language-installer-en-US.xml
index 058b19a91..843005269 100644
--- a/Greenshot/Languages/language-installer-en-US.xml
+++ b/Greenshot/Languages/installer/language-installer-en-US.xml
@@ -1,14 +1,14 @@
-
-
-
- Start {#ExeName} with Windows start
- Start {#ExeName}
- Jira plug-in
- Confluence plug-in
- Open with external command plug-in
- OCR plug-in (needs Microsoft Office Document Imaging (MODI))
- Imgur plug-in (See: http://imgur.com)
- Additional languages
- Optimizing performance, this may take a while.
-
+
+
+
+ Start {#ExeName} with Windows start
+ Start {#ExeName}
+ Jira plug-in
+ Confluence plug-in
+ Open with external command plug-in
+ OCR plug-in (needs Microsoft Office Document Imaging (MODI))
+ Imgur plug-in (See: http://imgur.com)
+ Additional languages
+ Optimizing performance, this may take a while.
+
\ No newline at end of file
diff --git a/Greenshot/Languages/language-installer-es-ES.xml b/Greenshot/Languages/installer/language-installer-es-ES.xml
similarity index 98%
rename from Greenshot/Languages/language-installer-es-ES.xml
rename to Greenshot/Languages/installer/language-installer-es-ES.xml
index 78a27e00d..e11d06704 100644
--- a/Greenshot/Languages/language-installer-es-ES.xml
+++ b/Greenshot/Languages/installer/language-installer-es-ES.xml
@@ -1,14 +1,14 @@
-
-
-
- Extensión para Confluence
- Extensión para abrir con programas externos
- Extensión para Imgur (Ver http://imgur.com)
- Extensión para Jira
- Idiomas adicionales
- Extensión para OCR (necesita Microsoft Office Document Imaging (MODI))
- Optimizando rendimiento; por favor, espera.
- Lanzar {#ExeName}
- Lanzar {#ExeName} al iniciarse Windows
-
+
+
+
+ Extensión para Confluence
+ Extensión para abrir con programas externos
+ Extensión para Imgur (Ver http://imgur.com)
+ Extensión para Jira
+ Idiomas adicionales
+ Extensión para OCR (necesita Microsoft Office Document Imaging (MODI))
+ Optimizando rendimiento; por favor, espera.
+ Lanzar {#ExeName}
+ Lanzar {#ExeName} al iniciarse Windows
+
\ No newline at end of file
diff --git a/Greenshot/Languages/language-installer-fi-FI.xml b/Greenshot/Languages/installer/language-installer-fi-FI.xml
similarity index 98%
rename from Greenshot/Languages/language-installer-fi-FI.xml
rename to Greenshot/Languages/installer/language-installer-fi-FI.xml
index 90d9376c9..5182c880b 100644
--- a/Greenshot/Languages/language-installer-fi-FI.xml
+++ b/Greenshot/Languages/installer/language-installer-fi-FI.xml
@@ -1,14 +1,14 @@
-
-
-
- Käynnistä {#ExeName} Windowsin käynnistyessä
- Käynnistä {#ExeName}
- Jira-liitännäinen
- Confluence-liitännäinen
- Avaa Ulkoinen komento-liitännäisellä
- OCR-liitännäinen (Tarvitaan: Microsoft Office Document Imaging (MODI))
- Imgur-liitännäinen (Katso: http://imgur.com)
- Lisäkielet
- Optimoidaan suorituskykyä, tämä voi kestää hetken.
-
+
+
+
+ Käynnistä {#ExeName} Windowsin käynnistyessä
+ Käynnistä {#ExeName}
+ Jira-liitännäinen
+ Confluence-liitännäinen
+ Avaa Ulkoinen komento-liitännäisellä
+ OCR-liitännäinen (Tarvitaan: Microsoft Office Document Imaging (MODI))
+ Imgur-liitännäinen (Katso: http://imgur.com)
+ Lisäkielet
+ Optimoidaan suorituskykyä, tämä voi kestää hetken.
+
\ No newline at end of file
diff --git a/Greenshot/Languages/language-installer-fr-FR.xml b/Greenshot/Languages/installer/language-installer-fr-FR.xml
similarity index 98%
rename from Greenshot/Languages/language-installer-fr-FR.xml
rename to Greenshot/Languages/installer/language-installer-fr-FR.xml
index 608e2fe3f..4f2cab573 100644
--- a/Greenshot/Languages/language-installer-fr-FR.xml
+++ b/Greenshot/Languages/installer/language-installer-fr-FR.xml
@@ -1,14 +1,14 @@
-
-
-
- Greffon Confluence
- Ouvrir avec le greffon de commande externe
- Greffon Imgur (Voir: http://imgur.com)
- Greffon Jira
- Langues additionnelles
- Greffon OCR (nécessite Document Imaging de Microsoft Office [MODI])
- Optimisation des performances, Ceci peut prendre un certain temps.
- Démarrer {#ExeName}
- Lancer {#ExeName} au démarrage de Windows
-
+
+
+
+ Greffon Confluence
+ Ouvrir avec le greffon de commande externe
+ Greffon Imgur (Voir: http://imgur.com)
+ Greffon Jira
+ Langues additionnelles
+ Greffon OCR (nécessite Document Imaging de Microsoft Office [MODI])
+ Optimisation des performances, Ceci peut prendre un certain temps.
+ Démarrer {#ExeName}
+ Lancer {#ExeName} au démarrage de Windows
+
\ No newline at end of file
diff --git a/Greenshot/Languages/language-installer-lv-LV.xml b/Greenshot/Languages/installer/language-installer-lv-LV.xml
similarity index 100%
rename from Greenshot/Languages/language-installer-lv-LV.xml
rename to Greenshot/Languages/installer/language-installer-lv-LV.xml
diff --git a/Greenshot/Languages/language-installer-nl-NL.xml b/Greenshot/Languages/installer/language-installer-nl-NL.xml
similarity index 98%
rename from Greenshot/Languages/language-installer-nl-NL.xml
rename to Greenshot/Languages/installer/language-installer-nl-NL.xml
index 612f3943c..43c8454c4 100644
--- a/Greenshot/Languages/language-installer-nl-NL.xml
+++ b/Greenshot/Languages/installer/language-installer-nl-NL.xml
@@ -1,14 +1,14 @@
-
-
-
- Prestaties verbeteren, kan even duren.
- Extra talen
- Imgur plug-in (Zie: http://imgur.com)
- OCR plug-in (heeft Microsoft Office Document Imaging (MODI) nodig)
- Open met externes commando plug-in
- Confluence plug-in
- Jira plug-in
- Start {#ExeName}
- Start {#ExeName} wanneer Windows opstart
-
+
+
+
+ Prestaties verbeteren, kan even duren.
+ Extra talen
+ Imgur plug-in (Zie: http://imgur.com)
+ OCR plug-in (heeft Microsoft Office Document Imaging (MODI) nodig)
+ Open met externes commando plug-in
+ Confluence plug-in
+ Jira plug-in
+ Start {#ExeName}
+ Start {#ExeName} wanneer Windows opstart
+
\ No newline at end of file
diff --git a/Greenshot/Languages/language-installer-nn-NO.xml b/Greenshot/Languages/installer/language-installer-nn-NO.xml
similarity index 98%
rename from Greenshot/Languages/language-installer-nn-NO.xml
rename to Greenshot/Languages/installer/language-installer-nn-NO.xml
index cfa04e16e..dbde65c2e 100644
--- a/Greenshot/Languages/language-installer-nn-NO.xml
+++ b/Greenshot/Languages/installer/language-installer-nn-NO.xml
@@ -1,14 +1,14 @@
-
-
-
- Confluence-tillegg
- Tillegg for å opne med ekstern kommando
- Imgur-tillegg (sjå http://imgur.com)
- Jira-tillegg
- Andre språk
- OCR-tillegg (krev Microsoft Office Document Imaging (MODI))
- Optimaliserar ytelse, dette kan ta litt tid...
- Start {#ExeName}
- Start {#ExeName} når Windows startar
-
+
+
+
+ Confluence-tillegg
+ Tillegg for å opne med ekstern kommando
+ Imgur-tillegg (sjå http://imgur.com)
+ Jira-tillegg
+ Andre språk
+ OCR-tillegg (krev Microsoft Office Document Imaging (MODI))
+ Optimaliserar ytelse, dette kan ta litt tid...
+ Start {#ExeName}
+ Start {#ExeName} når Windows startar
+
\ No newline at end of file
diff --git a/Greenshot/Languages/language-installer-sr-RS.xml b/Greenshot/Languages/installer/language-installer-sr-RS.xml
similarity index 98%
rename from Greenshot/Languages/language-installer-sr-RS.xml
rename to Greenshot/Languages/installer/language-installer-sr-RS.xml
index b55e6d893..01e3ba5f4 100644
--- a/Greenshot/Languages/language-installer-sr-RS.xml
+++ b/Greenshot/Languages/installer/language-installer-sr-RS.xml
@@ -1,14 +1,14 @@
-
-
-
- Прикључак за Конфлуенс
- Отвори са прикључком за спољне наредбе
- Прикључак за Имиџер (http://imgur.com)
- Прикључак за Џиру
- Додатни језици
- OCR прикључак (захтева Microsoft Office Document Imaging (MODI))
- Оптимизујем перформансе…
- Покрени Гриншот
- Покрени програм са системом
-
+
+
+
+ Прикључак за Конфлуенс
+ Отвори са прикључком за спољне наредбе
+ Прикључак за Имиџер (http://imgur.com)
+ Прикључак за Џиру
+ Додатни језици
+ OCR прикључак (захтева Microsoft Office Document Imaging (MODI))
+ Оптимизујем перформансе…
+ Покрени Гриншот
+ Покрени програм са системом
+
\ No newline at end of file
diff --git a/Greenshot/Languages/language-installer-sv-SE.xml b/Greenshot/Languages/installer/language-installer-sv-SE.xml
similarity index 100%
rename from Greenshot/Languages/language-installer-sv-SE.xml
rename to Greenshot/Languages/installer/language-installer-sv-SE.xml
diff --git a/Greenshot/Languages/language-installer-uk-UA.xml b/Greenshot/Languages/installer/language-installer-uk-UA.xml
similarity index 98%
rename from Greenshot/Languages/language-installer-uk-UA.xml
rename to Greenshot/Languages/installer/language-installer-uk-UA.xml
index d10360622..33698d9b2 100644
--- a/Greenshot/Languages/language-installer-uk-UA.xml
+++ b/Greenshot/Languages/installer/language-installer-uk-UA.xml
@@ -1,14 +1,14 @@
-
-
-
- Запускати {#ExeName} під час запуску Windows
- Запустити {#ExeName}
- Плагін Jira
- Плагін Confluence
- Плагін запуску зовнішньої команди
- Плагін OCR (потребує Microsoft Office Document Imaging (MODI))
- Плагін Imgur (див.: http://imgur.com)
- Додаткові мови
- Оптимізація продуктивності, це може зайняти певний час.
-
-
+
+
+
+ Запускати {#ExeName} під час запуску Windows
+ Запустити {#ExeName}
+ Плагін Jira
+ Плагін Confluence
+ Плагін запуску зовнішньої команди
+ Плагін OCR (потребує Microsoft Office Document Imaging (MODI))
+ Плагін Imgur (див.: http://imgur.com)
+ Додаткові мови
+ Оптимізація продуктивності, це може зайняти певний час.
+
+
diff --git a/Greenshot/Languages/language-installer-zh-CN.xml b/Greenshot/Languages/installer/language-installer-zh-CN.xml
similarity index 98%
rename from Greenshot/Languages/language-installer-zh-CN.xml
rename to Greenshot/Languages/installer/language-installer-zh-CN.xml
index 8b5dd6d79..ec014bb24 100644
--- a/Greenshot/Languages/language-installer-zh-CN.xml
+++ b/Greenshot/Languages/installer/language-installer-zh-CN.xml
@@ -1,14 +1,14 @@
-
-
-
- Confluence插件
- 使用外部命令打开插件
- Imgur插件( (请访问: http://imgur.com))
- Jira插件
- 其它语言
- OCR插件(需要Microsoft Office Document Imaging (MODI)的支持)
- 正在优化性能,这可能需要一点时间。
- 启动{#ExeName}
- 让{#ExeName}随Windows一起启动
-
+
+
+
+ Confluence插件
+ 使用外部命令打开插件
+ Imgur插件( (请访问: http://imgur.com))
+ Jira插件
+ 其它语言
+ OCR插件(需要Microsoft Office Document Imaging (MODI)的支持)
+ 正在优化性能,这可能需要一点时间。
+ 启动{#ExeName}
+ 让{#ExeName}随Windows一起启动
+
\ No newline at end of file
diff --git a/Greenshot/Languages/language-website-de-DE.xml b/Greenshot/Languages/website/language-website-de-DE.xml
similarity index 99%
rename from Greenshot/Languages/language-website-de-DE.xml
rename to Greenshot/Languages/website/language-website-de-DE.xml
index 301f1f5c5..07a7406cc 100644
--- a/Greenshot/Languages/language-website-de-DE.xml
+++ b/Greenshot/Languages/website/language-website-de-DE.xml
@@ -1,20 +1,20 @@
-
-
-
- Downloads
- Greenshot - ein kostenloses Screenshot-Programm für maximale Produktivität
- Greenshot ist kostenlos und open-source
- Falls Sie merken, dass Greenshot Ihnen viel Zeit und/oder Geld spart, würde sich das Entwickler-Team über Ihre <a href="/support/">Unterstützung für die Weiterentwicklung</a> dieser Screenshot-Software freuen.
- Greenshot wurde unter der <a href="http://de.wikipedia.org/wiki/GNU_General_Public_License" target="_blank">GPL</a> veröffentlicht und kann kostenlos heruntergeladen und verwendet werden, auch zur kommerziellen Nutzung.
- Und weiter?
- Natürlich kann Greenshot noch einiges mehr. Werfen Sie einen Blick auf einige <a title="Screenshots von Greenshot in Aktion" href="/screenshots/">Screenshots</a> von Greenshot in Aktion oder probieren Sie die <a title="Download der aktuellen Version von Greenshot" href="/downloads/">aktuelle Version</a> einfach aus.
- Was ist Greenshot?
- Schnelle Erstellung von kompletten oder teilweisen Screenshots.
- Einfaches Hinzufügen von Kommentaren, Hervorhebungen oder Unkenntlichmachungen.
- Greenshot ist ein kompaktes Screenshot-Programm für Windows mit den folgenden Hauptfunktionen:
- ... und viele weitere Möglichkeiten, die die Erstellung von und die Arbeit mit Screenshots vereinfachen - Tag für Tag.
+
+
+
+ Downloads
+ Greenshot - ein kostenloses Screenshot-Programm für maximale Produktivität
+ Greenshot ist kostenlos und open-source
+ Falls Sie merken, dass Greenshot Ihnen viel Zeit und/oder Geld spart, würde sich das Entwickler-Team über Ihre <a href="/support/">Unterstützung für die Weiterentwicklung</a> dieser Screenshot-Software freuen.
+ Greenshot wurde unter der <a href="http://de.wikipedia.org/wiki/GNU_General_Public_License" target="_blank">GPL</a> veröffentlicht und kann kostenlos heruntergeladen und verwendet werden, auch zur kommerziellen Nutzung.
+ Und weiter?
+ Natürlich kann Greenshot noch einiges mehr. Werfen Sie einen Blick auf einige <a title="Screenshots von Greenshot in Aktion" href="/screenshots/">Screenshots</a> von Greenshot in Aktion oder probieren Sie die <a title="Download der aktuellen Version von Greenshot" href="/downloads/">aktuelle Version</a> einfach aus.
+ Was ist Greenshot?
+ Schnelle Erstellung von kompletten oder teilweisen Screenshots.
+ Einfaches Hinzufügen von Kommentaren, Hervorhebungen oder Unkenntlichmachungen.
+ Greenshot ist ein kompaktes Screenshot-Programm für Windows mit den folgenden Hauptfunktionen:
+ ... und viele weitere Möglichkeiten, die die Erstellung von und die Arbeit mit Screenshots vereinfachen - Tag für Tag.
Direkter Export des Screenshots in eine Datei, die Zwischenablage,
-an einen Drucker, ein MS Office-Dokument oder als E-Mail-Anhang; Sie können es auch zu verschiedene Bild-Hosting-Services hochladen.
- Da Greenshot leicht verständlich und konfigurierbar ist, ist es ein effizientes Programm für Projektmanager, Software-Entwickler, technische Redakteure, Dokumentations-Entwickler, Tester und andere Personen, die oft mit Screenshots arbeiten.
-
+an einen Drucker, ein MS Office-Dokument oder als E-Mail-Anhang; Sie können es auch zu verschiedene Bild-Hosting-Services hochladen.
+ Da Greenshot leicht verständlich und konfigurierbar ist, ist es ein effizientes Programm für Projektmanager, Software-Entwickler, technische Redakteure, Dokumentations-Entwickler, Tester und andere Personen, die oft mit Screenshots arbeiten.
+
\ No newline at end of file
diff --git a/Greenshot/Languages/language-website-en-US.xml b/Greenshot/Languages/website/language-website-en-US.xml
similarity index 99%
rename from Greenshot/Languages/language-website-en-US.xml
rename to Greenshot/Languages/website/language-website-en-US.xml
index 1eb773f8b..6cb85ca9f 100644
--- a/Greenshot/Languages/language-website-en-US.xml
+++ b/Greenshot/Languages/website/language-website-en-US.xml
@@ -1,19 +1,19 @@
-
-
-
- Downloads
- Greenshot - a free screenshot tool optimized for productivity
- Greenshot is free and open source
- If you find that Greenshot saves you a lot of time and/or money, you are very welcome to <a href="/support/">support the development</a> of this screenshot software.
- Greenshot was published under <a href="http://en.wikipedia.org/wiki/GNU_General_Public_License" target="_blank">GPL</a>, i.e. this software can be downloaded and used free of charge, even in a commercial environment.
- Want to see more?
- Of course there is more that Greenshot can do for you. Have a look at some <a title="Screenshots of Greenshot in action" href="/screenshots/">screenshots</a> of Greenshot in action or try the <a title="Download the latest stable version of Greenshot" href="/downloads/">latest release</a>.
- What is Greenshot????
- Quickly create screenshots of a selected region, window or fullscreen; you can even capture complete (scrolling) web pages from Internet Explorer.
- Easily annotate, highlight or obfuscate parts of the screenshot.
- Greenshot is a light-weight screenshot software tool for Windows with the following key features:
- ...and a lot more options simplyfying creation of and work with screenshots every day.
- Export the screenshot in various ways: save to file, send to printer, copy to clipboard, attach to e-mail, send Office programs or upload to photo sites like Flickr or Picasa, and others.
- Being easy to understand and configurable, Greenshot is an efficient tool for project managers, software developers, technical writers, testers and anyone else creating screenshots.
-
+
+
+
+ Downloads
+ Greenshot - a free screenshot tool optimized for productivity
+ Greenshot is free and open source
+ If you find that Greenshot saves you a lot of time and/or money, you are very welcome to <a href="/support/">support the development</a> of this screenshot software.
+ Greenshot was published under <a href="http://en.wikipedia.org/wiki/GNU_General_Public_License" target="_blank">GPL</a>, i.e. this software can be downloaded and used free of charge, even in a commercial environment.
+ Want to see more?
+ Of course there is more that Greenshot can do for you. Have a look at some <a title="Screenshots of Greenshot in action" href="/screenshots/">screenshots</a> of Greenshot in action or try the <a title="Download the latest stable version of Greenshot" href="/downloads/">latest release</a>.
+ What is Greenshot????
+ Quickly create screenshots of a selected region, window or fullscreen; you can even capture complete (scrolling) web pages from Internet Explorer.
+ Easily annotate, highlight or obfuscate parts of the screenshot.
+ Greenshot is a light-weight screenshot software tool for Windows with the following key features:
+ ...and a lot more options simplyfying creation of and work with screenshots every day.
+ Export the screenshot in various ways: save to file, send to printer, copy to clipboard, attach to e-mail, send Office programs or upload to photo sites like Flickr or Picasa, and others.
+ Being easy to understand and configurable, Greenshot is an efficient tool for project managers, software developers, technical writers, testers and anyone else creating screenshots.
+
\ No newline at end of file
diff --git a/Greenshot/Languages/language-website-es-ES.xml b/Greenshot/Languages/website/language-website-es-ES.xml
similarity index 99%
rename from Greenshot/Languages/language-website-es-ES.xml
rename to Greenshot/Languages/website/language-website-es-ES.xml
index 12ae3a7fe..2c6f35720 100644
--- a/Greenshot/Languages/language-website-es-ES.xml
+++ b/Greenshot/Languages/website/language-website-es-ES.xml
@@ -1,19 +1,19 @@
-
-
-
- Descargas
- Greenshot - herramienta libre de captura de pantalla, optimizada para una mayor productividad
- Greenshot es código libre y abierto
- Si Greenshot te ahorra tiempo y/o dinero, puedes <a href="/support/">apoyar el desarrollo</a> de esta aplicación de captura de pantallas.
- Greenshot se publica bajo licencia <a href="http://en.wikipedia.org/wiki/GNU_General_Public_License" target="_blank">GPL</a>. Esta aplicación se puede descargar y utilizar de forma gratuita, incluso en un entorno comercial.
- ¿Quieres ver más?
- Por supuesto hay mucho más que Greenshot puede hacer. Echa un vistazo a algunas <a href="/screenshots/">capturas de pantalla</a> de Greenshot en acción o prueba la <a href="/downloads/">última versión</a>.
- ¿Qué es Greenshot?
- Creación rápida de capturas de una región seleccionado, una ventana o toda la pantalla; se puede incluso capturar (desplazando) páginas completas de Internet Explorer.
- Anotación, resalte y ocultación de partes de la captura de pantalla fácilmente.
- Greenshot es una herramienta ligera de captura de pantalla para Windows con las características esenciales:
- ... y muchas más opciones para simplificar el día a día en la creación y el trabajo con capturas de pantalla.
- Exportar la captura de pantalla de diversas maneras: guardar en archivo, imprimir, copiar al portapapeles, adjuntar a un correo electrónico, enviar a programa de Office o subir a sitios de fotos como Flickr o Picasa, entre otros.
- Al ser fácil de entender y configurar, Greenshot es una herramienta eficaz para gestores de proyecto, desarrolladores de software, escritores técnicos, evaluadores y cualquier persona que necesite capturas de pantalla.
-
+
+
+
+ Descargas
+ Greenshot - herramienta libre de captura de pantalla, optimizada para una mayor productividad
+ Greenshot es código libre y abierto
+ Si Greenshot te ahorra tiempo y/o dinero, puedes <a href="/support/">apoyar el desarrollo</a> de esta aplicación de captura de pantallas.
+ Greenshot se publica bajo licencia <a href="http://en.wikipedia.org/wiki/GNU_General_Public_License" target="_blank">GPL</a>. Esta aplicación se puede descargar y utilizar de forma gratuita, incluso en un entorno comercial.
+ ¿Quieres ver más?
+ Por supuesto hay mucho más que Greenshot puede hacer. Echa un vistazo a algunas <a href="/screenshots/">capturas de pantalla</a> de Greenshot en acción o prueba la <a href="/downloads/">última versión</a>.
+ ¿Qué es Greenshot?
+ Creación rápida de capturas de una región seleccionado, una ventana o toda la pantalla; se puede incluso capturar (desplazando) páginas completas de Internet Explorer.
+ Anotación, resalte y ocultación de partes de la captura de pantalla fácilmente.
+ Greenshot es una herramienta ligera de captura de pantalla para Windows con las características esenciales:
+ ... y muchas más opciones para simplificar el día a día en la creación y el trabajo con capturas de pantalla.
+ Exportar la captura de pantalla de diversas maneras: guardar en archivo, imprimir, copiar al portapapeles, adjuntar a un correo electrónico, enviar a programa de Office o subir a sitios de fotos como Flickr o Picasa, entre otros.
+ Al ser fácil de entender y configurar, Greenshot es una herramienta eficaz para gestores de proyecto, desarrolladores de software, escritores técnicos, evaluadores y cualquier persona que necesite capturas de pantalla.
+
\ No newline at end of file
diff --git a/Greenshot/Languages/language-website-fr-FR.xml b/Greenshot/Languages/website/language-website-fr-FR.xml
similarity index 99%
rename from Greenshot/Languages/language-website-fr-FR.xml
rename to Greenshot/Languages/website/language-website-fr-FR.xml
index 2da7d16f5..54943cced 100644
--- a/Greenshot/Languages/language-website-fr-FR.xml
+++ b/Greenshot/Languages/website/language-website-fr-FR.xml
@@ -1,19 +1,19 @@
-
-
-
- Téléchargement
- Greenshot - Un outil de capture d’écran gratuit pour une productivité optimale
- Greenshot est gratuit et «Open Source».
- Si vous trouvez que Greenshot vous permet de faire des économies de temps et d’argent, vous êtes les bienvenus si vous nous apportez <a href="/support/">votre support dans le développement</a> de ce logiciel de capture d’écran.
- Greenshot a été publié sous <a href="http://en.wikipedia.org/wiki/GNU_General_Public_License" target="_blank">GPL</a>, à savoir que ce logiciel peut être utilisé gratuitement, même dans un environnement commercial.
- Voulez-vous en savoir plus?
- Bien entendu Greenshot peut en faire beaucoup plus pour vous. Prenez la peine de regarder quelques <a href="/screenshots/">captures d’écran</a> de Greenshot en action ou essayer <a title="Download the latest stable version of Greenshot" href="/downloads/">la dernière mise à niveau</a>.
- Qu’est ce que Greenshot?
- Créer rapidement des captures d'une zone, d'une fenêtre ou d’un écran complet ; Il est même possible de capturer des pages web complètes (défilement) dans Internet Explorer.
- Annoter, surligner, assombrir ou brouiller facilement des parties de la capture.
- Greenshot est un logiciel de capture d’écran léger pour Windows avec les fonctionnalités majeures suivantes:
- ...et bien d'autres options qui permettent de simplifier le travail de création ou de gestion journaliers des captures d’écran.
- Exporter la capture de multiples façons: sauvegarde vers un fichier, impression, copie dans le presse-papier, joindre à un courriel, envoi vers des programmes Office ou envoi vers des sites de photos comme Flickr ou Picasa, et d’autres encore.
- Simple et facile à configurer, Greenshot est un outil efficace pour des responsables de projet, développeurs de logiciel, Concepteurs de manuels techniques, testeurs ou autres personnes créant des captures d’écran.
-
+
+
+
+ Téléchargement
+ Greenshot - Un outil de capture d’écran gratuit pour une productivité optimale
+ Greenshot est gratuit et «Open Source».
+ Si vous trouvez que Greenshot vous permet de faire des économies de temps et d’argent, vous êtes les bienvenus si vous nous apportez <a href="/support/">votre support dans le développement</a> de ce logiciel de capture d’écran.
+ Greenshot a été publié sous <a href="http://en.wikipedia.org/wiki/GNU_General_Public_License" target="_blank">GPL</a>, à savoir que ce logiciel peut être utilisé gratuitement, même dans un environnement commercial.
+ Voulez-vous en savoir plus?
+ Bien entendu Greenshot peut en faire beaucoup plus pour vous. Prenez la peine de regarder quelques <a href="/screenshots/">captures d’écran</a> de Greenshot en action ou essayer <a title="Download the latest stable version of Greenshot" href="/downloads/">la dernière mise à niveau</a>.
+ Qu’est ce que Greenshot?
+ Créer rapidement des captures d'une zone, d'une fenêtre ou d’un écran complet ; Il est même possible de capturer des pages web complètes (défilement) dans Internet Explorer.
+ Annoter, surligner, assombrir ou brouiller facilement des parties de la capture.
+ Greenshot est un logiciel de capture d’écran léger pour Windows avec les fonctionnalités majeures suivantes:
+ ...et bien d'autres options qui permettent de simplifier le travail de création ou de gestion journaliers des captures d’écran.
+ Exporter la capture de multiples façons: sauvegarde vers un fichier, impression, copie dans le presse-papier, joindre à un courriel, envoi vers des programmes Office ou envoi vers des sites de photos comme Flickr ou Picasa, et d’autres encore.
+ Simple et facile à configurer, Greenshot est un outil efficace pour des responsables de projet, développeurs de logiciel, Concepteurs de manuels techniques, testeurs ou autres personnes créant des captures d’écran.
+
\ No newline at end of file
diff --git a/Greenshot/Languages/language-website-it-IT.xml b/Greenshot/Languages/website/language-website-it-IT.xml
similarity index 99%
rename from Greenshot/Languages/language-website-it-IT.xml
rename to Greenshot/Languages/website/language-website-it-IT.xml
index 4db0441b5..31f1b1dfb 100644
--- a/Greenshot/Languages/language-website-it-IT.xml
+++ b/Greenshot/Languages/website/language-website-it-IT.xml
@@ -1,19 +1,19 @@
-
-
-
- Download
- Greenshot - strumento di cattura gratis ottimizzato per la produttività
- Greenshot è gratuito e open source
- Se si scopre che Greenshot risparmiare un sacco di tempo e / o denaro, è possibile <a href="/support/">sostenere lo sviluppo</a> di questa strumento di cattura.
- Greenshot è pubblicato sotto licenza <a href="http://en.wikipedia.org/wiki/GNU_General_Public_License" target="_blank">GPL</a>. Questo software può essere scaricato e utilizzato gratuitamente, anche in un ambiente commerciale.
- Vuoi saperne di più?
- Naturalmente c'è molto di più che si può fare per Greenshot. Check out alcuni <a href="/screenshots/">screenshot</a> di Greenshot in azione o provare la versione <a href="/downloads/">più recente</a>.
- Greenshot - Che cosa è questo?
- Rapidamente rendere le immagini di uno schermo selezionata regione, finestra o completo schermo. È possibile anche catturare le pagine web da Internet Explorer completi (scorrimento).
- Annotare, evidenziare o nascondere parti di screenshot è facilmente.
- Greenshot è uno strumento di cattura schermo per Windows con leggeri caratteristiche essenziali:
- ... e molte altre opzioni per creare e lavorare con le immagini ogni giorno.
- Esportazione screenshot in vari modi: salvare in un file, stampa, copia negli appunti, attaccare a un messaggio, inviare ai programmi di Office o caricare su siti di foto come Flickr e Picasa, tra gli altri.
- Essere facile da capire e configurare, Greenshot è uno strumento efficace per i project manager, sviluppatori di software, redattori tecnici, collaudatori e chiunque altro la creazione di screenshot.
-
+
+
+
+ Download
+ Greenshot - strumento di cattura gratis ottimizzato per la produttività
+ Greenshot è gratuito e open source
+ Se si scopre che Greenshot risparmiare un sacco di tempo e / o denaro, è possibile <a href="/support/">sostenere lo sviluppo</a> di questa strumento di cattura.
+ Greenshot è pubblicato sotto licenza <a href="http://en.wikipedia.org/wiki/GNU_General_Public_License" target="_blank">GPL</a>. Questo software può essere scaricato e utilizzato gratuitamente, anche in un ambiente commerciale.
+ Vuoi saperne di più?
+ Naturalmente c'è molto di più che si può fare per Greenshot. Check out alcuni <a href="/screenshots/">screenshot</a> di Greenshot in azione o provare la versione <a href="/downloads/">più recente</a>.
+ Greenshot - Che cosa è questo?
+ Rapidamente rendere le immagini di uno schermo selezionata regione, finestra o completo schermo. È possibile anche catturare le pagine web da Internet Explorer completi (scorrimento).
+ Annotare, evidenziare o nascondere parti di screenshot è facilmente.
+ Greenshot è uno strumento di cattura schermo per Windows con leggeri caratteristiche essenziali:
+ ... e molte altre opzioni per creare e lavorare con le immagini ogni giorno.
+ Esportazione screenshot in vari modi: salvare in un file, stampa, copia negli appunti, attaccare a un messaggio, inviare ai programmi di Office o caricare su siti di foto come Flickr e Picasa, tra gli altri.
+ Essere facile da capire e configurare, Greenshot è uno strumento efficace per i project manager, sviluppatori di software, redattori tecnici, collaudatori e chiunque altro la creazione di screenshot.
+
\ No newline at end of file
diff --git a/Greenshot/Languages/language-website-lv-LV.xml b/Greenshot/Languages/website/language-website-lv-LV.xml
similarity index 100%
rename from Greenshot/Languages/language-website-lv-LV.xml
rename to Greenshot/Languages/website/language-website-lv-LV.xml
diff --git a/Greenshot/Languages/language-website-nn-NO.xml b/Greenshot/Languages/website/language-website-nn-NO.xml
similarity index 99%
rename from Greenshot/Languages/language-website-nn-NO.xml
rename to Greenshot/Languages/website/language-website-nn-NO.xml
index 1807d9b1e..c388583da 100644
--- a/Greenshot/Languages/language-website-nn-NO.xml
+++ b/Greenshot/Languages/website/language-website-nn-NO.xml
@@ -1,19 +1,19 @@
-
-
-
- Nedlastingar
- Greenshot - ein gratis skjermknipsar som effektiviserer kvardagen
- Greenshot er gratis og har open kjeldekode
- Om du finn ut at Greenshot sparar deg for mykje tid og/eller pengar, er du velkomen til å <a href="/support/">støtte utviklinga</a> av programmet!
- Greenshot blir utgjeven under _GPL_, så programmet kan lastast ned og brukast utan kostnad, også i verksemder.
- Sjå meir?
- Sjølvsagt kan Greenshot by på meir! Ta ein gløtt på _skjermbilde_ av programmet i bruk, eller prøv den _nyaste utgåva_.
- Kva er Greenshot?
- Tar med eit tastetrykk bilde av eit vindauge, område eller heile skjermen - du kan til og med knipse heile nettsider (med rulling) frå Internet Explorer.
- Enkel notering, markering og sensurering i knipsfiksaren.
- Greenshot er eit lite og nett Windows-verktøy med dei fylgjande eigenskapane:
- ...og endå meir som forenklar arbeidet med skjermbilde - kvar dag!
- Eksporter skjermbildet til fil, skrivar, utklyppstavle, e-post, Office-program eller skytenester som til dømes Flickr og Picasa.
- Med det enkle, konfigurerbare grensesnittet er Greenshot eit effektivt verktøy for prosjektleiarar, programvareutviklararar, tekniske skribentar, testarar og alle andre som har nytte av å ta skjermbilde.
-
+
+
+
+ Nedlastingar
+ Greenshot - ein gratis skjermknipsar som effektiviserer kvardagen
+ Greenshot er gratis og har open kjeldekode
+ Om du finn ut at Greenshot sparar deg for mykje tid og/eller pengar, er du velkomen til å <a href="/support/">støtte utviklinga</a> av programmet!
+ Greenshot blir utgjeven under _GPL_, så programmet kan lastast ned og brukast utan kostnad, også i verksemder.
+ Sjå meir?
+ Sjølvsagt kan Greenshot by på meir! Ta ein gløtt på _skjermbilde_ av programmet i bruk, eller prøv den _nyaste utgåva_.
+ Kva er Greenshot?
+ Tar med eit tastetrykk bilde av eit vindauge, område eller heile skjermen - du kan til og med knipse heile nettsider (med rulling) frå Internet Explorer.
+ Enkel notering, markering og sensurering i knipsfiksaren.
+ Greenshot er eit lite og nett Windows-verktøy med dei fylgjande eigenskapane:
+ ...og endå meir som forenklar arbeidet med skjermbilde - kvar dag!
+ Eksporter skjermbildet til fil, skrivar, utklyppstavle, e-post, Office-program eller skytenester som til dømes Flickr og Picasa.
+ Med det enkle, konfigurerbare grensesnittet er Greenshot eit effektivt verktøy for prosjektleiarar, programvareutviklararar, tekniske skribentar, testarar og alle andre som har nytte av å ta skjermbilde.
+
\ No newline at end of file
diff --git a/Greenshot/Languages/language-website-sv-SE.xml b/Greenshot/Languages/website/language-website-sv-SE.xml
similarity index 100%
rename from Greenshot/Languages/language-website-sv-SE.xml
rename to Greenshot/Languages/website/language-website-sv-SE.xml
diff --git a/Greenshot/Languages/language-website-uk-UA.xml b/Greenshot/Languages/website/language-website-uk-UA.xml
similarity index 99%
rename from Greenshot/Languages/language-website-uk-UA.xml
rename to Greenshot/Languages/website/language-website-uk-UA.xml
index ef3dfe65c..db80898d3 100644
--- a/Greenshot/Languages/language-website-uk-UA.xml
+++ b/Greenshot/Languages/website/language-website-uk-UA.xml
@@ -1,19 +1,19 @@
-
-
-
- Завантаження
- Greenshot — безкоштовний інструмент для створення знімків екрану, оптимізований для покращення продуктивності
- Greenshot безкоштовний і з відкритим кодом
- Якщо Вам здається, що Greenshot зберігає чимало Вашого часу та/або грошей, Ви можете <a href="/support/">підтримати розробку</a> цього програмного забезпечення для створення знімків екрану.
- Greenshot розповсюджується відповідно до <a href="http://uk.wikipedia.org/wiki/GNU_General_Public_License" target="_blank">GPL</a>, тобто це програмне забезпечення можна вільно завантажувати та використовувати навіть з комерційною метою.
- Хочете побачити більше?
- Звісно, Greenshot може зробити для Вас набагато більше. Подивіться кілька <a title="Знімки Greenshot у дії" href="/screenshots/">знімків</a> Greenshot у дії та спробуйте <a title="Завантажити найновішу стабільну версію Greenshot" href="/downloads/">останній реліз</a>.
- Що таке Greenshot???
- Швидке створення знімків вибраної області, вікна або всього екрану; Ви навіть можете захоплювати всю (з прокручуванням) Інтернет-сторінку в Internet Explorer.
- Легке коментування, підсвічування або виділення частин знімку.
- Greenshot — це невеличка програма для створення знімків екрану для Windows з такими основними можливостями:
- ...та чимало інших можливостей, що спрощують створення та обробку знімків.
- Кілька варіантів експорту знімків: збереження в файл, друк, копіювання в буфер обміну, долучення до електронного листа, надсилання до офісних програм або вивантаження на фото-хостинги на зразок Flickr, Picasa та інші.
- Завдяки простоті налаштування та інтуїтивності, Greenshot є ефективним інструментом для керівників проектів, розробників програмного забезпечення, технічних авторів, тестерів та будь-кого іншого, кому потрібно створювати знімки.
-
-
+
+
+
+ Завантаження
+ Greenshot — безкоштовний інструмент для створення знімків екрану, оптимізований для покращення продуктивності
+ Greenshot безкоштовний і з відкритим кодом
+ Якщо Вам здається, що Greenshot зберігає чимало Вашого часу та/або грошей, Ви можете <a href="/support/">підтримати розробку</a> цього програмного забезпечення для створення знімків екрану.
+ Greenshot розповсюджується відповідно до <a href="http://uk.wikipedia.org/wiki/GNU_General_Public_License" target="_blank">GPL</a>, тобто це програмне забезпечення можна вільно завантажувати та використовувати навіть з комерційною метою.
+ Хочете побачити більше?
+ Звісно, Greenshot може зробити для Вас набагато більше. Подивіться кілька <a title="Знімки Greenshot у дії" href="/screenshots/">знімків</a> Greenshot у дії та спробуйте <a title="Завантажити найновішу стабільну версію Greenshot" href="/downloads/">останній реліз</a>.
+ Що таке Greenshot???
+ Швидке створення знімків вибраної області, вікна або всього екрану; Ви навіть можете захоплювати всю (з прокручуванням) Інтернет-сторінку в Internet Explorer.
+ Легке коментування, підсвічування або виділення частин знімку.
+ Greenshot — це невеличка програма для створення знімків екрану для Windows з такими основними можливостями:
+ ...та чимало інших можливостей, що спрощують створення та обробку знімків.
+ Кілька варіантів експорту знімків: збереження в файл, друк, копіювання в буфер обміну, долучення до електронного листа, надсилання до офісних програм або вивантаження на фото-хостинги на зразок Flickr, Picasa та інші.
+ Завдяки простоті налаштування та інтуїтивності, Greenshot є ефективним інструментом для керівників проектів, розробників програмного забезпечення, технічних авторів, тестерів та будь-кого іншого, кому потрібно створювати знімки.
+
+
diff --git a/GreenshotConfluencePlugin/GreenshotConfluencePlugin.csproj b/GreenshotConfluencePlugin/GreenshotConfluencePlugin.csproj
index 46091586c..b969ea5ce 100644
--- a/GreenshotConfluencePlugin/GreenshotConfluencePlugin.csproj
+++ b/GreenshotConfluencePlugin/GreenshotConfluencePlugin.csproj
@@ -12,6 +12,16 @@
+
+
+
+
+
+
+ Never
+
+
+
diff --git a/GreenshotConfluencePlugin/Properties/AssemblyInfo.cs b/GreenshotConfluencePlugin/Properties/AssemblyInfo.cs
index bbedaea56..edc19b7cb 100644
--- a/GreenshotConfluencePlugin/Properties/AssemblyInfo.cs
+++ b/GreenshotConfluencePlugin/Properties/AssemblyInfo.cs
@@ -1,29 +1,28 @@
/*
* Greenshot - a free and open source screenshot tool
* Copyright (C) 2007-2020 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 .
*/
using Greenshot.Plugin;
using System.Runtime.InteropServices;
-using System.Security;
-// General Information about an assembly is controlled through the following
+// 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.
// The PluginAttribute describes the "entryType" and if the plugin is configurable
@@ -32,6 +31,3 @@ using System.Security;
// 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)]
-
-// Solve Link-Demand issues
-[assembly: SecurityTransparent]
diff --git a/GreenshotJiraPlugin/Hooking/TitleChangeEventArgs.cs b/GreenshotJiraPlugin/Hooking/TitleChangeEventArgs.cs
deleted file mode 100644
index 6ec8878fd..000000000
--- a/GreenshotJiraPlugin/Hooking/TitleChangeEventArgs.cs
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * dapplo - building blocks for desktop applications
- * Copyright (C) Dapplo 2015-2016
- *
- * For more information see: http://dapplo.net/
- * dapplo repositories are hosted on GitHub: https://github.com/dapplo
- *
- * 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 .
- */
-
-using System;
-
-namespace GreenshotJiraPlugin.Hooking
-{
- ///
- /// Event arguments for the TitleChangeEvent
- ///
- public class TitleChangeEventArgs : EventArgs
- {
- ///
- /// HWnd of the window which has a changed title
- ///
- public IntPtr HWnd
- {
- get;
- set;
- }
-
- ///
- /// Title which is changed
- ///
- public string Title
- {
- get;
- set;
- }
- }
-
-}
diff --git a/GreenshotJiraPlugin/Hooking/TitleChangeEventDelegate.cs b/GreenshotJiraPlugin/Hooking/TitleChangeEventDelegate.cs
deleted file mode 100644
index 29847a1e5..000000000
--- a/GreenshotJiraPlugin/Hooking/TitleChangeEventDelegate.cs
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * dapplo - building blocks for desktop applications
- * Copyright (C) Dapplo 2015-2016
- *
- * For more information see: http://dapplo.net/
- * dapplo repositories are hosted on GitHub: https://github.com/dapplo
- *
- * 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 .
- */
-
-namespace GreenshotJiraPlugin.Hooking
-{
- ///
- /// Delegate for the title change event
- ///
- ///
- public delegate void TitleChangeEventDelegate(TitleChangeEventArgs eventArgs);
-}
\ No newline at end of file
diff --git a/GreenshotJiraPlugin/JiraMonitor.cs b/GreenshotJiraPlugin/JiraMonitor.cs
index 409fc9140..3598142bd 100644
--- a/GreenshotJiraPlugin/JiraMonitor.cs
+++ b/GreenshotJiraPlugin/JiraMonitor.cs
@@ -27,17 +27,17 @@ using System.Threading;
using System.Threading.Tasks;
using Dapplo.Jira;
using Dapplo.Log;
-using GreenshotJiraPlugin.Hooking;
+using GreenshotPlugin.Hooking;
namespace GreenshotJiraPlugin
{
- ///
- /// This class will monitor all _jira activity by registering for title changes
- /// It keeps a list of the last "accessed" jiras, and makes it easy to upload to one.
- /// Make sure this is instanciated on the UI thread!
- ///
- public class JiraMonitor : IDisposable
+ ///
+ /// This class will monitor all _jira activity by registering for title changes
+ /// It keeps a list of the last "accessed" jiras, and makes it easy to upload to one.
+ /// Make sure this is instanciated on the UI thread!
+ ///
+ public class JiraMonitor : IDisposable
{
private static readonly LogSource Log = new LogSource();
private readonly Regex _jiraKeyPattern = new Regex(@"[A-Z][A-Z0-9]+\-[0-9]+");
diff --git a/GreenshotJiraPlugin/Hooking/WindowsEventHook.cs b/GreenshotPlugin/Hooking/WindowsEventHook.cs
similarity index 91%
rename from GreenshotJiraPlugin/Hooking/WindowsEventHook.cs
rename to GreenshotPlugin/Hooking/WindowsEventHook.cs
index cd13831d3..e24675abd 100644
--- a/GreenshotJiraPlugin/Hooking/WindowsEventHook.cs
+++ b/GreenshotPlugin/Hooking/WindowsEventHook.cs
@@ -1,149 +1,149 @@
-/*
- * dapplo - building blocks for desktop applications
- * Copyright (C) Dapplo 2015-2016
- *
- * For more information see: http://dapplo.net/
- * dapplo repositories are hosted on GitHub: https://github.com/dapplo
- *
- * 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 .
- */
-
-using System;
-using System.Collections.Generic;
-using System.Runtime.InteropServices;
-using GreenshotPlugin.UnmanagedHelpers;
-
-namespace GreenshotJiraPlugin.Hooking
-{
- ///
- /// The WinEventHook can register handlers to become important windows events
- /// This makes it possible to know a.o. when a window is created, moved, updated and closed.
- ///
- public class WindowsEventHook : IDisposable
- {
- private readonly WinEventDelegate _winEventHandler;
- private GCHandle _gcHandle;
-
- ///
- /// Used with Register hook
- ///
- ///
- ///
- ///
- ///
- ///
- ///
- public delegate void WinEventHandler(WinEvent eventType, IntPtr hwnd, EventObjects idObject, int idChild, uint dwEventThread, uint dwmsEventTime);
-
- ///
- /// Create a WindowsEventHook object
- ///
- public WindowsEventHook()
- {
- _winEventHandler = WinEventDelegateHandler;
- _gcHandle = GCHandle.Alloc(_winEventHandler);
- }
-
- [DllImport("user32", SetLastError = true)]
- private static extern bool UnhookWinEvent(IntPtr hWinEventHook);
- [DllImport("user32", SetLastError = true)]
- private static extern IntPtr SetWinEventHook(WinEvent eventMin, WinEvent eventMax, IntPtr hmodWinEventProc, WinEventDelegate lpfnWinEventProc, int idProcess, int idThread, WinEventHookFlags dwFlags);
-
- ///
- /// Used with SetWinEventHook
- ///
- ///
- ///
- ///
- ///
- ///
- ///
- ///
- private delegate void WinEventDelegate(IntPtr hWinEventHook, WinEvent eventType, IntPtr hwnd, EventObjects idObject, int idChild, uint dwEventThread, uint dwmsEventTime);
-
- private readonly IDictionary _winEventHandlers = new Dictionary();
-
- ///
- /// Are hooks active?
- ///
- public bool IsHooked => _winEventHandlers.Count > 0;
-
- ///
- /// Hook a WinEvent
- ///
- ///
- ///
- /// true if success
- public void Hook(WinEvent winEvent, WinEventHandler winEventHandler)
- {
- Hook(winEvent, winEvent, winEventHandler);
- }
-
- ///
- /// Hook a WinEvent
- ///
- ///
- ///
- ///
- public void Hook(WinEvent winEventStart, WinEvent winEventEnd, WinEventHandler winEventHandler)
- {
- var hookPtr = SetWinEventHook(winEventStart, winEventEnd, IntPtr.Zero, _winEventHandler, 0, 0, WinEventHookFlags.WINEVENT_SKIPOWNPROCESS | WinEventHookFlags.WINEVENT_OUTOFCONTEXT);
- _winEventHandlers.Add(hookPtr, winEventHandler);
- }
-
- ///
- /// Remove all hooks
- ///
- private void Unhook()
- {
- foreach (var hookPtr in _winEventHandlers.Keys)
- {
- if (hookPtr != IntPtr.Zero)
- {
- UnhookWinEvent(hookPtr);
- }
- }
- _winEventHandlers.Clear();
- _gcHandle.Free();
- }
-
- ///
- /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
- ///
- public void Dispose()
- {
- Unhook();
- }
-
- ///
- /// Call the WinEventHandler for this event
- ///
- ///
- ///
- ///
- ///
- ///
- ///
- ///
- private void WinEventDelegateHandler(IntPtr hWinEventHook, WinEvent eventType, IntPtr hWnd, EventObjects idObject, int idChild, uint dwEventThread, uint dwmsEventTime)
- {
- if (_winEventHandlers.TryGetValue(hWinEventHook, out var handler))
- {
- handler(eventType, hWnd, idObject, idChild, dwEventThread, dwmsEventTime);
- }
- }
-
- }
-
-}
+/*
+ * dapplo - building blocks for desktop applications
+ * Copyright (C) Dapplo 2015-2016
+ *
+ * For more information see: http://dapplo.net/
+ * dapplo repositories are hosted on GitHub: https://github.com/dapplo
+ *
+ * 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 .
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+using GreenshotPlugin.UnmanagedHelpers;
+
+namespace GreenshotPlugin.Hooking
+{
+ ///
+ /// The WinEventHook can register handlers to become important windows events
+ /// This makes it possible to know a.o. when a window is created, moved, updated and closed.
+ ///
+ public class WindowsEventHook : IDisposable
+ {
+ private readonly WinEventDelegate _winEventHandler;
+ private GCHandle _gcHandle;
+
+ ///
+ /// Used with Register hook
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public delegate void WinEventHandler(WinEvent eventType, IntPtr hwnd, EventObjects idObject, int idChild, uint dwEventThread, uint dwmsEventTime);
+
+ ///
+ /// Create a WindowsEventHook object
+ ///
+ public WindowsEventHook()
+ {
+ _winEventHandler = WinEventDelegateHandler;
+ _gcHandle = GCHandle.Alloc(_winEventHandler);
+ }
+
+ [DllImport("user32", SetLastError = true)]
+ private static extern bool UnhookWinEvent(IntPtr hWinEventHook);
+ [DllImport("user32", SetLastError = true)]
+ private static extern IntPtr SetWinEventHook(WinEvent eventMin, WinEvent eventMax, IntPtr hmodWinEventProc, WinEventDelegate lpfnWinEventProc, int idProcess, int idThread, WinEventHookFlags dwFlags);
+
+ ///
+ /// Used with SetWinEventHook
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ private delegate void WinEventDelegate(IntPtr hWinEventHook, WinEvent eventType, IntPtr hwnd, EventObjects idObject, int idChild, uint dwEventThread, uint dwmsEventTime);
+
+ private readonly IDictionary _winEventHandlers = new Dictionary();
+
+ ///
+ /// Are hooks active?
+ ///
+ public bool IsHooked => _winEventHandlers.Count > 0;
+
+ ///
+ /// Hook a WinEvent
+ ///
+ ///
+ ///
+ /// true if success
+ public void Hook(WinEvent winEvent, WinEventHandler winEventHandler)
+ {
+ Hook(winEvent, winEvent, winEventHandler);
+ }
+
+ ///
+ /// Hook a WinEvent
+ ///
+ ///
+ ///
+ ///
+ public void Hook(WinEvent winEventStart, WinEvent winEventEnd, WinEventHandler winEventHandler)
+ {
+ var hookPtr = SetWinEventHook(winEventStart, winEventEnd, IntPtr.Zero, _winEventHandler, 0, 0, WinEventHookFlags.WINEVENT_SKIPOWNPROCESS | WinEventHookFlags.WINEVENT_OUTOFCONTEXT);
+ _winEventHandlers.Add(hookPtr, winEventHandler);
+ }
+
+ ///
+ /// Remove all hooks
+ ///
+ private void Unhook()
+ {
+ foreach (var hookPtr in _winEventHandlers.Keys)
+ {
+ if (hookPtr != IntPtr.Zero)
+ {
+ UnhookWinEvent(hookPtr);
+ }
+ }
+ _winEventHandlers.Clear();
+ _gcHandle.Free();
+ }
+
+ ///
+ /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
+ ///
+ public void Dispose()
+ {
+ Unhook();
+ }
+
+ ///
+ /// Call the WinEventHandler for this event
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ private void WinEventDelegateHandler(IntPtr hWinEventHook, WinEvent eventType, IntPtr hWnd, EventObjects idObject, int idChild, uint dwEventThread, uint dwmsEventTime)
+ {
+ if (_winEventHandlers.TryGetValue(hWinEventHook, out var handler))
+ {
+ handler(eventType, hWnd, idObject, idChild, dwEventThread, dwmsEventTime);
+ }
+ }
+
+ }
+
+}
diff --git a/GreenshotPlugin/Hooking/WindowsOpenCloseMonitor.cs b/GreenshotPlugin/Hooking/WindowsOpenCloseMonitor.cs
new file mode 100644
index 000000000..3da390952
--- /dev/null
+++ b/GreenshotPlugin/Hooking/WindowsOpenCloseMonitor.cs
@@ -0,0 +1,171 @@
+/*
+ * dapplo - building blocks for desktop applications
+ * Copyright (C) Dapplo 2015-2016
+ *
+ * For more information see: http://dapplo.net/
+ * dapplo repositories are hosted on GitHub: https://github.com/dapplo
+ *
+ * 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 .
+ */
+
+using System;
+using GreenshotPlugin.Core;
+using GreenshotPlugin.UnmanagedHelpers;
+
+namespace GreenshotPlugin.Hooking
+{
+ ///
+ /// Event arguments for the WindowOpenCloseEvent
+ ///
+ public class WindowOpenCloseEventArgs : EventArgs
+ {
+ public bool IsOpen { get; set; }
+ ///
+ /// HWnd of the window which has a changed title
+ ///
+ public IntPtr HWnd
+ {
+ get;
+ set;
+ }
+
+ ///
+ /// Title which is changed
+ ///
+ public string Title
+ {
+ get;
+ set;
+ }
+
+ public string ClassName { get; set; }
+ }
+ ///
+ /// Delegate for the title change event
+ ///
+ ///
+ public delegate void WindowOpenCloseEventDelegate(WindowOpenCloseEventArgs eventArgs);
+
+ ///
+ /// Monitor all title changes
+ ///
+ public sealed class WindowsOpenCloseMonitor : IDisposable
+ {
+ private WindowsEventHook _hook;
+ private readonly object _lockObject = new object();
+ // ReSharper disable once InconsistentNaming
+ private event WindowOpenCloseEventDelegate _windowOpenCloseEvent;
+
+ ///
+ /// Add / remove event handler to the title monitor
+ ///
+ public event WindowOpenCloseEventDelegate WindowOpenCloseChangeEvent
+ {
+ add
+ {
+ lock (_lockObject)
+ {
+ if (_hook == null)
+ {
+ _hook = new WindowsEventHook();
+ _hook.Hook(WinEvent.EVENT_OBJECT_CREATE, WinEvent.EVENT_OBJECT_DESTROY, WinEventHandler);
+ }
+ _windowOpenCloseEvent += value;
+ }
+ }
+ remove
+ {
+ lock (_lockObject)
+ {
+ _windowOpenCloseEvent -= value;
+ if (_windowOpenCloseEvent == null || _windowOpenCloseEvent.GetInvocationList().Length == 0)
+ {
+ if (_hook != null)
+ {
+ _hook.Dispose();
+ _hook = null;
+ }
+ }
+ }
+ }
+ }
+
+ ///
+ /// WinEventDelegate for the creation & destruction
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ private void WinEventHandler(WinEvent eventType, IntPtr hWnd, EventObjects idObject, int idChild, uint dwEventThread, uint dwmsEventTime)
+ {
+ if (hWnd == IntPtr.Zero || idObject != EventObjects.OBJID_WINDOW)
+ {
+ return;
+ }
+ if (eventType == WinEvent.EVENT_OBJECT_CREATE)
+ {
+ if (_windowOpenCloseEvent != null)
+ {
+ var windowsDetails = new WindowDetails(hWnd);
+ _windowOpenCloseEvent(new WindowOpenCloseEventArgs { HWnd = hWnd, IsOpen = true, Title = windowsDetails.Text, ClassName = windowsDetails.ClassName });
+ }
+ }
+ if (eventType == WinEvent.EVENT_OBJECT_DESTROY)
+ {
+ _windowOpenCloseEvent?.Invoke(new WindowOpenCloseEventArgs { HWnd = hWnd, IsOpen = false });
+ }
+ }
+
+ private bool _disposedValue; // To detect redundant calls
+
+ ///
+ /// Dispose the underlying hook
+ ///
+ public void Dispose(bool disposing)
+ {
+ if (_disposedValue)
+ {
+ return;
+ }
+ lock (_lockObject)
+ {
+ _hook?.Dispose();
+ }
+ _disposedValue = true;
+ }
+
+ ///
+ /// Make sure the finalizer disposes the underlying hook
+ ///
+ ~WindowsOpenCloseMonitor()
+ {
+ // Do not change this code. Put cleanup code in Dispose(bool disposing) above.
+ Dispose(false);
+ }
+
+ ///
+ /// Dispose the underlying hook
+ ///
+ public void Dispose()
+ {
+ // Do not change this code. Put cleanup code in Dispose(bool disposing) above.
+ Dispose(true);
+ GC.SuppressFinalize(this);
+ }
+ }
+
+}
diff --git a/GreenshotJiraPlugin/Hooking/WindowsTitleMonitor.cs b/GreenshotPlugin/Hooking/WindowsTitleMonitor.cs
similarity index 83%
rename from GreenshotJiraPlugin/Hooking/WindowsTitleMonitor.cs
rename to GreenshotPlugin/Hooking/WindowsTitleMonitor.cs
index d92ffe2d3..919357caf 100644
--- a/GreenshotJiraPlugin/Hooking/WindowsTitleMonitor.cs
+++ b/GreenshotPlugin/Hooking/WindowsTitleMonitor.cs
@@ -1,135 +1,164 @@
-/*
- * dapplo - building blocks for desktop applications
- * Copyright (C) Dapplo 2015-2016
- *
- * For more information see: http://dapplo.net/
- * dapplo repositories are hosted on GitHub: https://github.com/dapplo
- *
- * 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 .
- */
-
-using System;
-using GreenshotPlugin.Core;
-using GreenshotPlugin.UnmanagedHelpers;
-
-namespace GreenshotJiraPlugin.Hooking
-{
- ///
- /// Monitor all title changes
- ///
- public sealed class WindowsTitleMonitor : IDisposable
- {
- private WindowsEventHook _hook;
- private readonly object _lockObject = new object();
- // ReSharper disable once InconsistentNaming
- private event TitleChangeEventDelegate _titleChangeEvent;
-
- ///
- /// Add / remove event handler to the title monitor
- ///
- public event TitleChangeEventDelegate TitleChangeEvent
- {
- add
- {
- lock (_lockObject)
- {
- if (_hook == null)
- {
- _hook = new WindowsEventHook();
- _hook.Hook(WinEvent.EVENT_OBJECT_NAMECHANGE, WinEventHandler);
- }
- _titleChangeEvent += value;
- }
- }
- remove
- {
- lock (_lockObject)
- {
- _titleChangeEvent -= value;
- if (_titleChangeEvent == null || _titleChangeEvent.GetInvocationList().Length == 0)
- {
- if (_hook != null)
- {
- _hook.Dispose();
- _hook = null;
- }
- }
- }
- }
- }
-
- ///
- /// WinEventDelegate for the creation & destruction
- ///
- ///
- ///
- ///
- ///
- ///
- ///
- private void WinEventHandler(WinEvent eventType, IntPtr hWnd, EventObjects idObject, int idChild, uint dwEventThread, uint dwmsEventTime)
- {
- if (hWnd == IntPtr.Zero || idObject != EventObjects.OBJID_WINDOW)
- {
- return;
- }
- if (eventType == WinEvent.EVENT_OBJECT_NAMECHANGE)
- {
- if (_titleChangeEvent != null)
- {
- string newTitle = new WindowDetails(hWnd).Text;
- _titleChangeEvent(new TitleChangeEventArgs { HWnd = hWnd, Title = newTitle });
- }
- }
- }
-
- private bool _disposedValue; // To detect redundant calls
-
- ///
- /// Dispose the underlying hook
- ///
- public void Dispose(bool disposing)
- {
- if (_disposedValue)
- {
- return;
- }
- lock (_lockObject)
- {
- _hook?.Dispose();
- }
- _disposedValue = true;
- }
-
- ///
- /// Make sure the finalizer disposes the underlying hook
- ///
- ~WindowsTitleMonitor()
- {
- // Do not change this code. Put cleanup code in Dispose(bool disposing) above.
- Dispose(false);
- }
-
- ///
- /// Dispose the underlying hook
- ///
- public void Dispose()
- {
- // Do not change this code. Put cleanup code in Dispose(bool disposing) above.
- Dispose(true);
- GC.SuppressFinalize(this);
- }
- }
-
-}
+/*
+ * dapplo - building blocks for desktop applications
+ * Copyright (C) Dapplo 2015-2016
+ *
+ * For more information see: http://dapplo.net/
+ * dapplo repositories are hosted on GitHub: https://github.com/dapplo
+ *
+ * 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 .
+ */
+
+using System;
+using GreenshotPlugin.Core;
+using GreenshotPlugin.UnmanagedHelpers;
+
+namespace GreenshotPlugin.Hooking
+{
+ ///
+ /// Event arguments for the TitleChangeEvent
+ ///
+ public class TitleChangeEventArgs : EventArgs
+ {
+ ///
+ /// HWnd of the window which has a changed title
+ ///
+ public IntPtr HWnd
+ {
+ get;
+ set;
+ }
+
+ ///
+ /// Title which is changed
+ ///
+ public string Title
+ {
+ get;
+ set;
+ }
+ }
+ ///
+ /// Delegate for the title change event
+ ///
+ ///
+ public delegate void TitleChangeEventDelegate(TitleChangeEventArgs eventArgs);
+
+ ///
+ /// Monitor all title changes
+ ///
+ public sealed class WindowsTitleMonitor : IDisposable
+ {
+ private WindowsEventHook _hook;
+ private readonly object _lockObject = new object();
+ // ReSharper disable once InconsistentNaming
+ private event TitleChangeEventDelegate _titleChangeEvent;
+
+ ///
+ /// Add / remove event handler to the title monitor
+ ///
+ public event TitleChangeEventDelegate TitleChangeEvent
+ {
+ add
+ {
+ lock (_lockObject)
+ {
+ if (_hook == null)
+ {
+ _hook = new WindowsEventHook();
+ _hook.Hook(WinEvent.EVENT_OBJECT_NAMECHANGE, WinEventHandler);
+ }
+ _titleChangeEvent += value;
+ }
+ }
+ remove
+ {
+ lock (_lockObject)
+ {
+ _titleChangeEvent -= value;
+ if (_titleChangeEvent == null || _titleChangeEvent.GetInvocationList().Length == 0)
+ {
+ if (_hook != null)
+ {
+ _hook.Dispose();
+ _hook = null;
+ }
+ }
+ }
+ }
+ }
+
+ ///
+ /// WinEventDelegate for the creation & destruction
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ private void WinEventHandler(WinEvent eventType, IntPtr hWnd, EventObjects idObject, int idChild, uint dwEventThread, uint dwmsEventTime)
+ {
+ if (hWnd == IntPtr.Zero || idObject != EventObjects.OBJID_WINDOW)
+ {
+ return;
+ }
+ if (eventType == WinEvent.EVENT_OBJECT_NAMECHANGE)
+ {
+ if (_titleChangeEvent != null)
+ {
+ string newTitle = new WindowDetails(hWnd).Text;
+ _titleChangeEvent(new TitleChangeEventArgs { HWnd = hWnd, Title = newTitle });
+ }
+ }
+ }
+
+ private bool _disposedValue; // To detect redundant calls
+
+ ///
+ /// Dispose the underlying hook
+ ///
+ public void Dispose(bool disposing)
+ {
+ if (_disposedValue)
+ {
+ return;
+ }
+ lock (_lockObject)
+ {
+ _hook?.Dispose();
+ }
+ _disposedValue = true;
+ }
+
+ ///
+ /// Make sure the finalizer disposes the underlying hook
+ ///
+ ~WindowsTitleMonitor()
+ {
+ // Do not change this code. Put cleanup code in Dispose(bool disposing) above.
+ Dispose(false);
+ }
+
+ ///
+ /// Dispose the underlying hook
+ ///
+ public void Dispose()
+ {
+ // Do not change this code. Put cleanup code in Dispose(bool disposing) above.
+ Dispose(true);
+ GC.SuppressFinalize(this);
+ }
+ }
+
+}
diff --git a/GreenshotWin10Plugin/GreenshotWin10Plugin.csproj b/GreenshotWin10Plugin/GreenshotWin10Plugin.csproj
index 85d3f19f9..225968f64 100644
--- a/GreenshotWin10Plugin/GreenshotWin10Plugin.csproj
+++ b/GreenshotWin10Plugin/GreenshotWin10Plugin.csproj
@@ -14,7 +14,6 @@
-
diff --git a/GreenshotWin10Plugin/Native/WindowMessageInfo.cs b/GreenshotWin10Plugin/Native/WindowMessageInfo.cs
deleted file mode 100644
index 231e3ec14..000000000
--- a/GreenshotWin10Plugin/Native/WindowMessageInfo.cs
+++ /dev/null
@@ -1,70 +0,0 @@
-// Greenshot - a free and open source screenshot tool
-// Copyright (C) 2007-2020 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 .
-
-using GreenshotPlugin.UnmanagedHelpers;
-using System;
-
-namespace Greenshot.Addon.Win10.Native
-{
- ///
- /// Container for the windows messages
- ///
- public class WindowMessageInfo
- {
- ///
- /// IntPtr with the Handle of the window
- ///
- public IntPtr Handle { get; private set; }
-
- ///
- /// WindowsMessages which is the actual message
- ///
- public WindowsMessages Message { get; private set; }
-
- ///
- /// IntPtr with the word-param
- ///
- public IntPtr WordParam { get; private set; }
-
- ///
- /// IntPtr with the long-param
- ///
- public IntPtr LongParam { get; private set; }
-
- ///
- /// Factory method for the Window Message Info
- ///
- /// IntPtr with the Handle of the window
- /// WindowsMessages which is the actual message
- /// IntPtr with the word-param
- /// IntPtr with the long-param
- ///
- /// WindowMessageInfo
- public static WindowMessageInfo Create(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
- {
- return new WindowMessageInfo
- {
- Handle = hwnd,
- Message = (WindowsMessages)msg,
- WordParam = wParam,
- LongParam = lParam
- };
- }
- }
-}
\ No newline at end of file
diff --git a/GreenshotWin10Plugin/Native/WindowMessageMonitor.cs b/GreenshotWin10Plugin/Native/WindowMessageMonitor.cs
deleted file mode 100644
index 81e40ec66..000000000
--- a/GreenshotWin10Plugin/Native/WindowMessageMonitor.cs
+++ /dev/null
@@ -1,137 +0,0 @@
-// Greenshot - a free and open source screenshot tool
-// Copyright (C) 2007-2020 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 .
-
-using System;
-using System.Reactive.Disposables;
-using System.Reactive.Linq;
-using System.Windows;
-using System.Windows.Interop;
-
-namespace Greenshot.Addon.Win10.Native
-{
-
- ///
- /// A monitor for window messages
- ///
- public static class WindowMessageMonitor
- {
- ///
- /// Create a HwndSource for the specified Window
- ///
- /// Window
- /// HwndSource
- private static HwndSource ToHwndSource(this Window window)
- {
- IntPtr windowHandle = new WindowInteropHelper(window).Handle;
- if (windowHandle == IntPtr.Zero)
- {
- return null;
- }
- return HwndSource.FromHwnd(windowHandle);
- }
-
- ///
- /// Create an observable for the specified window
- ///
- public static IObservable WindowMessages(this Window window)
- {
- return WindowMessages(window, null);
- }
-
- ///
- /// Create an observable for the specified HwndSource
- ///
- public static IObservable WindowMessages(this HwndSource hwndSource)
- {
- return WindowMessages(null, hwndSource);
- }
-
- ///
- /// Create an observable for the specified window or HwndSource
- ///
- /// Window
- /// HwndSource
- /// IObservable
- private static IObservable WindowMessages(Window window, HwndSource hwndSource)
- {
- if (window == null && hwndSource == null)
- {
- throw new NotSupportedException("One of Window or HwndSource must be supplied");
- }
- if (window != null && hwndSource != null)
- {
- throw new NotSupportedException("Either Window or HwndSource must be supplied");
- }
-
- return Observable.Create(observer =>
- {
- // This handles the message, and generates the observable OnNext
- IntPtr WindowMessageHandler(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
- {
- observer.OnNext(WindowMessageInfo.Create(hwnd, msg, wParam, lParam, ref handled));
- // ReSharper disable once AccessToDisposedClosure
- if (hwndSource.IsDisposed)
- {
- observer.OnCompleted();
- }
- return IntPtr.Zero;
- }
-
- void HwndSourceDisposedHandle(object sender, EventArgs e)
- {
- observer.OnCompleted();
- }
-
- void RegisterHwndSource()
- {
- hwndSource.Disposed += HwndSourceDisposedHandle;
- hwndSource.AddHook(WindowMessageHandler);
- }
-
- if (window != null)
- {
- hwndSource = window.ToHwndSource();
- }
- if (hwndSource != null)
- {
- RegisterHwndSource();
- }
- else
- {
- // No, try to get it later
- window.SourceInitialized += (sender, args) =>
- {
- hwndSource = window.ToHwndSource();
- RegisterHwndSource();
- };
- }
-
- return Disposable.Create(() =>
- {
- hwndSource.Disposed -= HwndSourceDisposedHandle;
- hwndSource.RemoveHook(WindowMessageHandler);
- hwndSource.Dispose();
- });
- })
- // Make sure there is always a value produced when connecting
- .Publish()
- .RefCount();
- }
- }
-}
diff --git a/GreenshotWin10Plugin/Win10ShareDestination.cs b/GreenshotWin10Plugin/Win10ShareDestination.cs
index 2a86b585b..20fbde97a 100644
--- a/GreenshotWin10Plugin/Win10ShareDestination.cs
+++ b/GreenshotWin10Plugin/Win10ShareDestination.cs
@@ -28,15 +28,13 @@ using System.Windows.Interop;
using Windows.ApplicationModel.DataTransfer;
using Windows.Storage;
using Windows.Storage.Streams;
-using Greenshot.Addon.Win10.Native;
using Color = Windows.UI.Color;
-using System.Reactive.Linq;
-using GreenshotPlugin.UnmanagedHelpers;
using Greenshot.Plugin;
using GreenshotPlugin.Core;
using System.Drawing;
using GreenshotWin10Plugin.Native;
using System.Windows.Media;
+using GreenshotPlugin.Hooking;
namespace GreenshotWin10Plugin
{
@@ -67,6 +65,8 @@ namespace GreenshotWin10Plugin
public TaskCompletionSource ShareTask { get; } = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously);
public bool IsDataRequested { get; set; }
+
+ public IntPtr SharingHwnd { get; set; }
}
///
@@ -92,28 +92,42 @@ namespace GreenshotWin10Plugin
AllowsTransparency = true,
Background = new SolidColorBrush(Colors.Transparent)
};
+ var shareInfo = new ShareInfo();
triggerWindow.Show();
- var shareInfo = new ShareInfo();
+
+ var focusMonitor = new WindowsOpenCloseMonitor();
+ var windowHandle = new WindowInteropHelper(triggerWindow).Handle;
// This is a bad trick, but don't know how else to do it.
// Wait for the focus to return, and depending on the state close the window!
- triggerWindow.WindowMessages()
- .Where(m => m.Message == WindowsMessages.WM_SETFOCUS).Delay(TimeSpan.FromSeconds(1))
- .Subscribe(info =>
- {
- if (shareInfo.ApplicationName != null)
- {
- return;
- }
+ focusMonitor.WindowOpenCloseChangeEvent += e => {
- shareInfo.ShareTask.TrySetResult(false);
- });
- var windowHandle = new WindowInteropHelper(triggerWindow).Handle;
+ if (e.IsOpen)
+ {
+ if ("Windows Shell Experience Host" == e.Title)
+ {
+ shareInfo.SharingHwnd = e.HWnd;
+ }
+ return;
+ }
+ else
+ {
+ if (e.HWnd == shareInfo.SharingHwnd)
+ {
+ if (shareInfo.ApplicationName != null)
+ {
+ return;
+ }
+ shareInfo.ShareTask.TrySetResult(false);
+ }
+ }
+ };
Share(shareInfo, windowHandle, surface, captureDetails).GetAwaiter().GetResult();
Log.Debug("Sharing finished, closing window.");
triggerWindow.Close();
+ focusMonitor.Dispose();
if (string.IsNullOrWhiteSpace(shareInfo.ApplicationName))
{
exportInformation.ExportMade = false;
@@ -144,123 +158,121 @@ namespace GreenshotWin10Plugin
/// Task with string, which describes the application which was used to share with
private async Task Share(ShareInfo shareInfo, IntPtr handle, ISurface surface, ICaptureDetails captureDetails)
{
- using (var imageStream = new MemoryRandomAccessStream())
- using (var logoStream = new MemoryRandomAccessStream())
- using (var thumbnailStream = new MemoryRandomAccessStream())
+ using var imageStream = new MemoryRandomAccessStream();
+ using var logoStream = new MemoryRandomAccessStream();
+ using var thumbnailStream = new MemoryRandomAccessStream();
+ var outputSettings = new SurfaceOutputSettings();
+ outputSettings.PreventGreenshotFormat();
+
+ // Create capture for export
+ ImageOutput.SaveToStream(surface, imageStream, outputSettings);
+ imageStream.Position = 0;
+ Log.Debug("Created RandomAccessStreamReference for the image");
+ var imageRandomAccessStreamReference = RandomAccessStreamReference.CreateFromStream(imageStream);
+
+ // Create thumbnail
+ RandomAccessStreamReference thumbnailRandomAccessStreamReference;
+ using (var tmpImageForThumbnail = surface.GetImageForExport())
+ using (var thumbnail = ImageHelper.CreateThumbnail(tmpImageForThumbnail, 240, 160))
{
- var outputSettings = new SurfaceOutputSettings();
- outputSettings.PreventGreenshotFormat();
+ ImageOutput.SaveToStream(thumbnail, null, thumbnailStream, outputSettings);
+ thumbnailStream.Position = 0;
+ thumbnailRandomAccessStreamReference = RandomAccessStreamReference.CreateFromStream(thumbnailStream);
+ Log.Debug("Created RandomAccessStreamReference for the thumbnail");
+ }
- // Create capture for export
- ImageOutput.SaveToStream(surface, imageStream, outputSettings);
- imageStream.Position = 0;
- Log.Debug("Created RandomAccessStreamReference for the image");
- var imageRandomAccessStreamReference = RandomAccessStreamReference.CreateFromStream(imageStream);
+ // Create logo
+ RandomAccessStreamReference logoRandomAccessStreamReference;
+ using (var logo = GreenshotResources.getGreenshotIcon().ToBitmap())
+ using (var logoThumbnail = ImageHelper.CreateThumbnail(logo, 30, 30))
+ {
+ ImageOutput.SaveToStream(logoThumbnail, null, logoStream, outputSettings);
+ logoStream.Position = 0;
+ logoRandomAccessStreamReference = RandomAccessStreamReference.CreateFromStream(logoStream);
+ Log.Info("Created RandomAccessStreamReference for the logo");
+ }
- // Create thumbnail
- RandomAccessStreamReference thumbnailRandomAccessStreamReference;
- using (var tmpImageForThumbnail = surface.GetImageForExport())
- using (var thumbnail = ImageHelper.CreateThumbnail(tmpImageForThumbnail, 240, 160))
- {
- ImageOutput.SaveToStream(thumbnail, null, thumbnailStream, outputSettings);
- thumbnailStream.Position = 0;
- thumbnailRandomAccessStreamReference = RandomAccessStreamReference.CreateFromStream(thumbnailStream);
- Log.Debug("Created RandomAccessStreamReference for the thumbnail");
- }
-
- // Create logo
- RandomAccessStreamReference logoRandomAccessStreamReference;
- using (var logo = GreenshotResources.getGreenshotIcon().ToBitmap())
- using (var logoThumbnail = ImageHelper.CreateThumbnail(logo, 30, 30))
- {
- ImageOutput.SaveToStream(logoThumbnail, null, logoStream, outputSettings);
- logoStream.Position = 0;
- logoRandomAccessStreamReference = RandomAccessStreamReference.CreateFromStream(logoStream);
- Log.Info("Created RandomAccessStreamReference for the logo");
- }
-
- var dataTransferManagerHelper = new DataTransferManagerHelper(handle);
- dataTransferManagerHelper.DataTransferManager.ShareProvidersRequested += (sender, args) =>
- {
- shareInfo.AreShareProvidersRequested = true;
- Log.DebugFormat("Share providers requested: {0}", string.Join(",", args.Providers.Select(p => p.Title)));
- };
- dataTransferManagerHelper.DataTransferManager.TargetApplicationChosen += (dtm, args) =>
- {
- shareInfo.ApplicationName = args.ApplicationName;
- Log.DebugFormat("TargetApplicationChosen: {0}", args.ApplicationName);
- };
- var filename = FilenameHelper.GetFilename(OutputFormat.png, captureDetails);
- var storageFile = await StorageFile.CreateStreamedFileAsync(filename, async streamedFileDataRequest =>
- {
- shareInfo.IsDeferredFileCreated = true;
+ var dataTransferManagerHelper = new DataTransferManagerHelper(handle);
+ dataTransferManagerHelper.DataTransferManager.ShareProvidersRequested += (sender, args) =>
+ {
+ shareInfo.AreShareProvidersRequested = true;
+ Log.DebugFormat("Share providers requested: {0}", string.Join(",", args.Providers.Select(p => p.Title)));
+ };
+ dataTransferManagerHelper.DataTransferManager.TargetApplicationChosen += (dtm, args) =>
+ {
+ shareInfo.ApplicationName = args.ApplicationName;
+ Log.DebugFormat("TargetApplicationChosen: {0}", args.ApplicationName);
+ };
+ var filename = FilenameHelper.GetFilename(OutputFormat.png, captureDetails);
+ var storageFile = await StorageFile.CreateStreamedFileAsync(filename, async streamedFileDataRequest =>
+ {
+ shareInfo.IsDeferredFileCreated = true;
// Information on the "how" was found here: https://socialeboladev.wordpress.com/2013/03/15/how-to-use-createstreamedfileasync/
Log.DebugFormat("Creating deferred file {0}", filename);
- try
+ try
+ {
+ using (var deferredStream = streamedFileDataRequest.AsStreamForWrite())
{
- using (var deferredStream = streamedFileDataRequest.AsStreamForWrite())
- {
- await imageStream.CopyToAsync(deferredStream).ConfigureAwait(false);
- await imageStream.FlushAsync().ConfigureAwait(false);
- }
+ await imageStream.CopyToAsync(deferredStream).ConfigureAwait(false);
+ await imageStream.FlushAsync().ConfigureAwait(false);
+ }
// Signal that the stream is ready
streamedFileDataRequest.Dispose();
// Signal that the action is ready, bitmap was exported
shareInfo.ShareTask.TrySetResult(true);
- }
- catch (Exception)
- {
- streamedFileDataRequest.FailAndClose(StreamedFileFailureMode.Incomplete);
- }
- }, imageRandomAccessStreamReference).AsTask().ConfigureAwait(false);
-
- dataTransferManagerHelper.DataTransferManager.DataRequested += (dataTransferManager, dataRequestedEventArgs) =>
+ }
+ catch (Exception)
{
- var deferral = dataRequestedEventArgs.Request.GetDeferral();
- try
- {
- shareInfo.IsDataRequested = true;
- Log.DebugFormat("DataRequested with operation {0}", dataRequestedEventArgs.Request.Data.RequestedOperation);
- var dataPackage = dataRequestedEventArgs.Request.Data;
- dataPackage.OperationCompleted += (dp, eventArgs) =>
- {
- Log.DebugFormat("OperationCompleted: {0}, shared with", eventArgs.Operation);
- shareInfo.CompletedWithOperation = eventArgs.Operation;
- shareInfo.AcceptedFormat = eventArgs.AcceptedFormatId;
+ streamedFileDataRequest.FailAndClose(StreamedFileFailureMode.Incomplete);
+ }
+ }, imageRandomAccessStreamReference).AsTask().ConfigureAwait(false);
- shareInfo.ShareTask.TrySetResult(true);
- };
- dataPackage.Destroyed += (dp, o) =>
- {
- shareInfo.IsDestroyed = true;
- Log.Debug("Destroyed");
- shareInfo.ShareTask.TrySetResult(true);
- };
- dataPackage.ShareCompleted += (dp, shareCompletedEventArgs) =>
- {
- shareInfo.IsShareCompleted = true;
- Log.Debug("ShareCompleted");
- shareInfo.ShareTask.TrySetResult(true);
- };
- dataPackage.Properties.Title = captureDetails.Title;
- dataPackage.Properties.ApplicationName = "Greenshot";
- dataPackage.Properties.Description = "Share a screenshot";
- dataPackage.Properties.Thumbnail = thumbnailRandomAccessStreamReference;
- dataPackage.Properties.Square30x30Logo = logoRandomAccessStreamReference;
- dataPackage.Properties.LogoBackgroundColor = Color.FromArgb(0xff, 0x3d, 0x3d, 0x3d);
- dataPackage.SetStorageItems(new[] {storageFile});
- dataPackage.SetBitmap(imageRandomAccessStreamReference);
- }
- finally
+ dataTransferManagerHelper.DataTransferManager.DataRequested += (dataTransferManager, dataRequestedEventArgs) =>
+ {
+ var deferral = dataRequestedEventArgs.Request.GetDeferral();
+ try
+ {
+ shareInfo.IsDataRequested = true;
+ Log.DebugFormat("DataRequested with operation {0}", dataRequestedEventArgs.Request.Data.RequestedOperation);
+ var dataPackage = dataRequestedEventArgs.Request.Data;
+ dataPackage.OperationCompleted += (dp, eventArgs) =>
{
- deferral.Complete();
- Log.Debug("Called deferral.Complete()");
- }
- };
- dataTransferManagerHelper.ShowShareUi();
- Log.Debug("ShowShareUi finished.");
- await shareInfo.ShareTask.Task.ConfigureAwait(false);
- }
+ Log.DebugFormat("OperationCompleted: {0}, shared with", eventArgs.Operation);
+ shareInfo.CompletedWithOperation = eventArgs.Operation;
+ shareInfo.AcceptedFormat = eventArgs.AcceptedFormatId;
+
+ shareInfo.ShareTask.TrySetResult(true);
+ };
+ dataPackage.Destroyed += (dp, o) =>
+ {
+ shareInfo.IsDestroyed = true;
+ Log.Debug("Destroyed");
+ shareInfo.ShareTask.TrySetResult(true);
+ };
+ dataPackage.ShareCompleted += (dp, shareCompletedEventArgs) =>
+ {
+ shareInfo.IsShareCompleted = true;
+ Log.Debug("ShareCompleted");
+ shareInfo.ShareTask.TrySetResult(true);
+ };
+ dataPackage.Properties.Title = captureDetails.Title;
+ dataPackage.Properties.ApplicationName = "Greenshot";
+ dataPackage.Properties.Description = "Share a screenshot";
+ dataPackage.Properties.Thumbnail = thumbnailRandomAccessStreamReference;
+ dataPackage.Properties.Square30x30Logo = logoRandomAccessStreamReference;
+ dataPackage.Properties.LogoBackgroundColor = Color.FromArgb(0xff, 0x3d, 0x3d, 0x3d);
+ dataPackage.SetStorageItems(new[] { storageFile });
+ dataPackage.SetBitmap(imageRandomAccessStreamReference);
+ }
+ finally
+ {
+ deferral.Complete();
+ Log.Debug("Called deferral.Complete()");
+ }
+ };
+ dataTransferManagerHelper.ShowShareUi();
+ Log.Debug("ShowShareUi finished.");
+ await shareInfo.ShareTask.Task.ConfigureAwait(false);
}
}
}