mirror of
https://github.com/greenshot/greenshot
synced 2025-08-19 21:13:23 -07:00
Fixed language loading issues
Removed System.Reactive as package, by using code that was already there Fixed an issue loading the confluence plugin, and finding the icon
This commit is contained in:
parent
2293c70610
commit
f8f203b7b8
35 changed files with 902 additions and 964 deletions
|
@ -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";

|
||||
)" />
|
||||
</Target>
|
||||
</Project>
|
||||
|
|
|
@ -72,4 +72,9 @@
|
|||
<SetEnvironmentVariableTask Name="AssemblyInformationalVersion" Value="$(AssemblyInformationalVersion)" />
|
||||
<Exec Command="$(PkgTools_InnoSetup)\tools\ISCC.exe $(SolutionDir)\greenshot\releases\innosetup\setup.iss" />
|
||||
</Target>
|
||||
<PropertyGroup Condition="'$(Configuration)' == 'Debug'">
|
||||
<PreBuildEvent>
|
||||
copy "$(SolutionDir)Greenshot\log4net-debug.xml" "$(SolutionDir)Greenshot\bin\$(Configuration)\net471\log4net.xml"
|
||||
</PreBuildEvent>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<language description="Deutsch" ietf="de-DE" version="1.0.0" languagegroup="1">
|
||||
<resources>
|
||||
<resource name="startup">{#ExeName} starten wenn Windows hochfährt</resource>
|
||||
<resource name="startgreenshot">{#ExeName} starten</resource>
|
||||
<resource name="jira">Jira Plug-in</resource>
|
||||
<resource name="confluence">Confluence Plug-in</resource>
|
||||
<resource name="externalcommand">Öffne mit ein externem Kommando Plug-in</resource>
|
||||
<resource name="ocr">OCR Plug-in (benötigt Microsoft Office Document Imaging (MODI))</resource>
|
||||
<resource name="imgur">Imgur Plug-in (Siehe: http://imgur.com)</resource>
|
||||
<resource name="language">Zusätzliche Sprachen</resource>
|
||||
<resource name="optimize">Optimierung der Leistung, kann etwas dauern.</resource>
|
||||
</resources>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<language description="Deutsch" ietf="de-DE" version="1.0.0" languagegroup="1">
|
||||
<resources>
|
||||
<resource name="startup">{#ExeName} starten wenn Windows hochfährt</resource>
|
||||
<resource name="startgreenshot">{#ExeName} starten</resource>
|
||||
<resource name="jira">Jira Plug-in</resource>
|
||||
<resource name="confluence">Confluence Plug-in</resource>
|
||||
<resource name="externalcommand">Öffne mit ein externem Kommando Plug-in</resource>
|
||||
<resource name="ocr">OCR Plug-in (benötigt Microsoft Office Document Imaging (MODI))</resource>
|
||||
<resource name="imgur">Imgur Plug-in (Siehe: http://imgur.com)</resource>
|
||||
<resource name="language">Zusätzliche Sprachen</resource>
|
||||
<resource name="optimize">Optimierung der Leistung, kann etwas dauern.</resource>
|
||||
</resources>
|
||||
</language>
|
|
@ -1,14 +1,14 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<language description="English" ietf="en-US" version="1.0.0" languagegroup="1">
|
||||
<resources>
|
||||
<resource name="startup">Start {#ExeName} with Windows start</resource>
|
||||
<resource name="startgreenshot">Start {#ExeName}</resource>
|
||||
<resource name="jira">Jira plug-in</resource>
|
||||
<resource name="confluence">Confluence plug-in</resource>
|
||||
<resource name="externalcommand">Open with external command plug-in</resource>
|
||||
<resource name="ocr">OCR plug-in (needs Microsoft Office Document Imaging (MODI))</resource>
|
||||
<resource name="imgur">Imgur plug-in (See: http://imgur.com)</resource>
|
||||
<resource name="language">Additional languages</resource>
|
||||
<resource name="optimize">Optimizing performance, this may take a while.</resource>
|
||||
</resources>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<language description="English" ietf="en-US" version="1.0.0" languagegroup="1">
|
||||
<resources>
|
||||
<resource name="startup">Start {#ExeName} with Windows start</resource>
|
||||
<resource name="startgreenshot">Start {#ExeName}</resource>
|
||||
<resource name="jira">Jira plug-in</resource>
|
||||
<resource name="confluence">Confluence plug-in</resource>
|
||||
<resource name="externalcommand">Open with external command plug-in</resource>
|
||||
<resource name="ocr">OCR plug-in (needs Microsoft Office Document Imaging (MODI))</resource>
|
||||
<resource name="imgur">Imgur plug-in (See: http://imgur.com)</resource>
|
||||
<resource name="language">Additional languages</resource>
|
||||
<resource name="optimize">Optimizing performance, this may take a while.</resource>
|
||||
</resources>
|
||||
</language>
|
|
@ -1,14 +1,14 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<language description="Español" ietf="es-ES" version="1.0.4" languagegroup="1">
|
||||
<resources>
|
||||
<resource name="confluence">Extensión para Confluence</resource>
|
||||
<resource name="externalcommand">Extensión para abrir con programas externos</resource>
|
||||
<resource name="imgur">Extensión para Imgur (Ver http://imgur.com)</resource>
|
||||
<resource name="jira">Extensión para Jira</resource>
|
||||
<resource name="language">Idiomas adicionales</resource>
|
||||
<resource name="ocr">Extensión para OCR (necesita Microsoft Office Document Imaging (MODI))</resource>
|
||||
<resource name="optimize">Optimizando rendimiento; por favor, espera.</resource>
|
||||
<resource name="startgreenshot">Lanzar {#ExeName}</resource>
|
||||
<resource name="startup">Lanzar {#ExeName} al iniciarse Windows</resource>
|
||||
</resources>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<language description="Español" ietf="es-ES" version="1.0.4" languagegroup="1">
|
||||
<resources>
|
||||
<resource name="confluence">Extensión para Confluence</resource>
|
||||
<resource name="externalcommand">Extensión para abrir con programas externos</resource>
|
||||
<resource name="imgur">Extensión para Imgur (Ver http://imgur.com)</resource>
|
||||
<resource name="jira">Extensión para Jira</resource>
|
||||
<resource name="language">Idiomas adicionales</resource>
|
||||
<resource name="ocr">Extensión para OCR (necesita Microsoft Office Document Imaging (MODI))</resource>
|
||||
<resource name="optimize">Optimizando rendimiento; por favor, espera.</resource>
|
||||
<resource name="startgreenshot">Lanzar {#ExeName}</resource>
|
||||
<resource name="startup">Lanzar {#ExeName} al iniciarse Windows</resource>
|
||||
</resources>
|
||||
</language>
|
|
@ -1,14 +1,14 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<language description="Finnish" ietf="fi-FI" version="1.0.0" languagegroup="1">
|
||||
<resources>
|
||||
<resource name="startup">Käynnistä {#ExeName} Windowsin käynnistyessä</resource>
|
||||
<resource name="startgreenshot">Käynnistä {#ExeName}</resource>
|
||||
<resource name="jira">Jira-liitännäinen</resource>
|
||||
<resource name="confluence">Confluence-liitännäinen</resource>
|
||||
<resource name="externalcommand">Avaa Ulkoinen komento-liitännäisellä</resource>
|
||||
<resource name="ocr">OCR-liitännäinen (Tarvitaan: Microsoft Office Document Imaging (MODI))</resource>
|
||||
<resource name="imgur">Imgur-liitännäinen (Katso: http://imgur.com)</resource>
|
||||
<resource name="language">Lisäkielet</resource>
|
||||
<resource name="optimize">Optimoidaan suorituskykyä, tämä voi kestää hetken.</resource>
|
||||
</resources>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<language description="Finnish" ietf="fi-FI" version="1.0.0" languagegroup="1">
|
||||
<resources>
|
||||
<resource name="startup">Käynnistä {#ExeName} Windowsin käynnistyessä</resource>
|
||||
<resource name="startgreenshot">Käynnistä {#ExeName}</resource>
|
||||
<resource name="jira">Jira-liitännäinen</resource>
|
||||
<resource name="confluence">Confluence-liitännäinen</resource>
|
||||
<resource name="externalcommand">Avaa Ulkoinen komento-liitännäisellä</resource>
|
||||
<resource name="ocr">OCR-liitännäinen (Tarvitaan: Microsoft Office Document Imaging (MODI))</resource>
|
||||
<resource name="imgur">Imgur-liitännäinen (Katso: http://imgur.com)</resource>
|
||||
<resource name="language">Lisäkielet</resource>
|
||||
<resource name="optimize">Optimoidaan suorituskykyä, tämä voi kestää hetken.</resource>
|
||||
</resources>
|
||||
</language>
|
|
@ -1,14 +1,14 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<language description="French" ietf="fr-FR" version="1.0.1" languagegroup="1">
|
||||
<resources>
|
||||
<resource name="confluence">Greffon Confluence</resource>
|
||||
<resource name="externalcommand">Ouvrir avec le greffon de commande externe</resource>
|
||||
<resource name="imgur">Greffon Imgur (Voir: http://imgur.com)</resource>
|
||||
<resource name="jira">Greffon Jira</resource>
|
||||
<resource name="language">Langues additionnelles</resource>
|
||||
<resource name="ocr">Greffon OCR (nécessite Document Imaging de Microsoft Office [MODI])</resource>
|
||||
<resource name="optimize">Optimisation des performances, Ceci peut prendre un certain temps.</resource>
|
||||
<resource name="startgreenshot">Démarrer {#ExeName}</resource>
|
||||
<resource name="startup">Lancer {#ExeName} au démarrage de Windows</resource>
|
||||
</resources>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<language description="French" ietf="fr-FR" version="1.0.1" languagegroup="1">
|
||||
<resources>
|
||||
<resource name="confluence">Greffon Confluence</resource>
|
||||
<resource name="externalcommand">Ouvrir avec le greffon de commande externe</resource>
|
||||
<resource name="imgur">Greffon Imgur (Voir: http://imgur.com)</resource>
|
||||
<resource name="jira">Greffon Jira</resource>
|
||||
<resource name="language">Langues additionnelles</resource>
|
||||
<resource name="ocr">Greffon OCR (nécessite Document Imaging de Microsoft Office [MODI])</resource>
|
||||
<resource name="optimize">Optimisation des performances, Ceci peut prendre un certain temps.</resource>
|
||||
<resource name="startgreenshot">Démarrer {#ExeName}</resource>
|
||||
<resource name="startup">Lancer {#ExeName} au démarrage de Windows</resource>
|
||||
</resources>
|
||||
</language>
|
|
@ -1,14 +1,14 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<language description="Nederlands" ietf="nl-NL" version="1.0.0" languagegroup="1">
|
||||
<resources>
|
||||
<resource name="optimize">Prestaties verbeteren, kan even duren.</resource>
|
||||
<resource name="language">Extra talen</resource>
|
||||
<resource name="imgur">Imgur plug-in (Zie: http://imgur.com)</resource>
|
||||
<resource name="ocr">OCR plug-in (heeft Microsoft Office Document Imaging (MODI) nodig)</resource>
|
||||
<resource name="externalcommand">Open met externes commando plug-in</resource>
|
||||
<resource name="confluence">Confluence plug-in</resource>
|
||||
<resource name="jira">Jira plug-in</resource>
|
||||
<resource name="startgreenshot">Start {#ExeName}</resource>
|
||||
<resource name="startup">Start {#ExeName} wanneer Windows opstart</resource>
|
||||
</resources>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<language description="Nederlands" ietf="nl-NL" version="1.0.0" languagegroup="1">
|
||||
<resources>
|
||||
<resource name="optimize">Prestaties verbeteren, kan even duren.</resource>
|
||||
<resource name="language">Extra talen</resource>
|
||||
<resource name="imgur">Imgur plug-in (Zie: http://imgur.com)</resource>
|
||||
<resource name="ocr">OCR plug-in (heeft Microsoft Office Document Imaging (MODI) nodig)</resource>
|
||||
<resource name="externalcommand">Open met externes commando plug-in</resource>
|
||||
<resource name="confluence">Confluence plug-in</resource>
|
||||
<resource name="jira">Jira plug-in</resource>
|
||||
<resource name="startgreenshot">Start {#ExeName}</resource>
|
||||
<resource name="startup">Start {#ExeName} wanneer Windows opstart</resource>
|
||||
</resources>
|
||||
</language>
|
|
@ -1,14 +1,14 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<language description="Norwegian Nynorsk" ietf="nn-NO" version="1.0.2" languagegroup="1">
|
||||
<resources>
|
||||
<resource name="confluence">Confluence-tillegg</resource>
|
||||
<resource name="externalcommand">Tillegg for å opne med ekstern kommando</resource>
|
||||
<resource name="imgur">Imgur-tillegg (sjå http://imgur.com)</resource>
|
||||
<resource name="jira">Jira-tillegg</resource>
|
||||
<resource name="language">Andre språk</resource>
|
||||
<resource name="ocr">OCR-tillegg (krev Microsoft Office Document Imaging (MODI))</resource>
|
||||
<resource name="optimize">Optimaliserar ytelse, dette kan ta litt tid...</resource>
|
||||
<resource name="startgreenshot">Start {#ExeName}</resource>
|
||||
<resource name="startup">Start {#ExeName} når Windows startar</resource>
|
||||
</resources>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<language description="Norwegian Nynorsk" ietf="nn-NO" version="1.0.2" languagegroup="1">
|
||||
<resources>
|
||||
<resource name="confluence">Confluence-tillegg</resource>
|
||||
<resource name="externalcommand">Tillegg for å opne med ekstern kommando</resource>
|
||||
<resource name="imgur">Imgur-tillegg (sjå http://imgur.com)</resource>
|
||||
<resource name="jira">Jira-tillegg</resource>
|
||||
<resource name="language">Andre språk</resource>
|
||||
<resource name="ocr">OCR-tillegg (krev Microsoft Office Document Imaging (MODI))</resource>
|
||||
<resource name="optimize">Optimaliserar ytelse, dette kan ta litt tid...</resource>
|
||||
<resource name="startgreenshot">Start {#ExeName}</resource>
|
||||
<resource name="startup">Start {#ExeName} når Windows startar</resource>
|
||||
</resources>
|
||||
</language>
|
|
@ -1,14 +1,14 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<language description="Српски" ietf="sr-RS" version="1.0.0" languagegroup="1">
|
||||
<resources>
|
||||
<resource name="confluence">Прикључак за Конфлуенс</resource>
|
||||
<resource name="externalcommand">Отвори са прикључком за спољне наредбе</resource>
|
||||
<resource name="imgur">Прикључак за Имиџер (http://imgur.com)</resource>
|
||||
<resource name="jira">Прикључак за Џиру</resource>
|
||||
<resource name="language">Додатни језици</resource>
|
||||
<resource name="ocr">OCR прикључак (захтева Microsoft Office Document Imaging (MODI))</resource>
|
||||
<resource name="optimize">Оптимизујем перформансе…</resource>
|
||||
<resource name="startgreenshot">Покрени Гриншот</resource>
|
||||
<resource name="startup">Покрени програм са системом</resource>
|
||||
</resources>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<language description="Српски" ietf="sr-RS" version="1.0.0" languagegroup="1">
|
||||
<resources>
|
||||
<resource name="confluence">Прикључак за Конфлуенс</resource>
|
||||
<resource name="externalcommand">Отвори са прикључком за спољне наредбе</resource>
|
||||
<resource name="imgur">Прикључак за Имиџер (http://imgur.com)</resource>
|
||||
<resource name="jira">Прикључак за Џиру</resource>
|
||||
<resource name="language">Додатни језици</resource>
|
||||
<resource name="ocr">OCR прикључак (захтева Microsoft Office Document Imaging (MODI))</resource>
|
||||
<resource name="optimize">Оптимизујем перформансе…</resource>
|
||||
<resource name="startgreenshot">Покрени Гриншот</resource>
|
||||
<resource name="startup">Покрени програм са системом</resource>
|
||||
</resources>
|
||||
</language>
|
|
@ -1,14 +1,14 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<language description="Українська" ietf="uk-UA" version="1.0.0" languagegroup="5">
|
||||
<resources>
|
||||
<resource name="startup">Запускати {#ExeName} під час запуску Windows</resource>
|
||||
<resource name="startgreenshot">Запустити {#ExeName}</resource>
|
||||
<resource name="jira">Плагін Jira</resource>
|
||||
<resource name="confluence">Плагін Confluence</resource>
|
||||
<resource name="externalcommand">Плагін запуску зовнішньої команди</resource>
|
||||
<resource name="ocr">Плагін OCR (потребує Microsoft Office Document Imaging (MODI))</resource>
|
||||
<resource name="imgur">Плагін Imgur (див.: http://imgur.com)</resource>
|
||||
<resource name="language">Додаткові мови</resource>
|
||||
<resource name="optimize">Оптимізація продуктивності, це може зайняти певний час.</resource>
|
||||
</resources>
|
||||
</language>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<language description="Українська" ietf="uk-UA" version="1.0.0" languagegroup="5">
|
||||
<resources>
|
||||
<resource name="startup">Запускати {#ExeName} під час запуску Windows</resource>
|
||||
<resource name="startgreenshot">Запустити {#ExeName}</resource>
|
||||
<resource name="jira">Плагін Jira</resource>
|
||||
<resource name="confluence">Плагін Confluence</resource>
|
||||
<resource name="externalcommand">Плагін запуску зовнішньої команди</resource>
|
||||
<resource name="ocr">Плагін OCR (потребує Microsoft Office Document Imaging (MODI))</resource>
|
||||
<resource name="imgur">Плагін Imgur (див.: http://imgur.com)</resource>
|
||||
<resource name="language">Додаткові мови</resource>
|
||||
<resource name="optimize">Оптимізація продуктивності, це може зайняти певний час.</resource>
|
||||
</resources>
|
||||
</language>
|
|
@ -1,14 +1,14 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<language description="简体中文" ietf="zh-CN" version="" languagegroup="">
|
||||
<resources>
|
||||
<resource name="confluence">Confluence插件</resource>
|
||||
<resource name="externalcommand">使用外部命令打开插件</resource>
|
||||
<resource name="imgur">Imgur插件( (请访问: http://imgur.com))</resource>
|
||||
<resource name="jira">Jira插件</resource>
|
||||
<resource name="language">其它语言</resource>
|
||||
<resource name="ocr">OCR插件(需要Microsoft Office Document Imaging (MODI)的支持)</resource>
|
||||
<resource name="optimize">正在优化性能,这可能需要一点时间。</resource>
|
||||
<resource name="startgreenshot">启动{#ExeName}</resource>
|
||||
<resource name="startup">让{#ExeName}随Windows一起启动</resource>
|
||||
</resources>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<language description="简体中文" ietf="zh-CN" version="" languagegroup="">
|
||||
<resources>
|
||||
<resource name="confluence">Confluence插件</resource>
|
||||
<resource name="externalcommand">使用外部命令打开插件</resource>
|
||||
<resource name="imgur">Imgur插件( (请访问: http://imgur.com))</resource>
|
||||
<resource name="jira">Jira插件</resource>
|
||||
<resource name="language">其它语言</resource>
|
||||
<resource name="ocr">OCR插件(需要Microsoft Office Document Imaging (MODI)的支持)</resource>
|
||||
<resource name="optimize">正在优化性能,这可能需要一点时间。</resource>
|
||||
<resource name="startgreenshot">启动{#ExeName}</resource>
|
||||
<resource name="startup">让{#ExeName}随Windows一起启动</resource>
|
||||
</resources>
|
||||
</language>
|
|
@ -1,20 +1,20 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<language description="Deutsch" ietf="de-DE" version="1" languagegroup="?">
|
||||
<resources>
|
||||
<resource name="home_downloads">Downloads</resource>
|
||||
<resource name="home_headline">Greenshot - ein kostenloses Screenshot-Programm für maximale Produktivität</resource>
|
||||
<resource name="home_opensource">Greenshot ist kostenlos und open-source</resource>
|
||||
<resource name="home_opensource_donate">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.</resource>
|
||||
<resource name="home_opensource_gpl">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.</resource>
|
||||
<resource name="home_seemore">Und weiter?</resource>
|
||||
<resource name="home_seemore_screenshots">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.</resource>
|
||||
<resource name="home_whatis">Was ist Greenshot?</resource>
|
||||
<resource name="home_whatis_create">Schnelle Erstellung von kompletten oder teilweisen Screenshots.</resource>
|
||||
<resource name="home_whatis_edit">Einfaches Hinzufügen von Kommentaren, Hervorhebungen oder Unkenntlichmachungen.</resource>
|
||||
<resource name="home_whatis_intro">Greenshot ist ein kompaktes Screenshot-Programm für Windows mit den folgenden Hauptfunktionen:</resource>
|
||||
<resource name="home_whatis_more">... und viele weitere Möglichkeiten, die die Erstellung von und die Arbeit mit Screenshots vereinfachen - Tag für Tag.</resource>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<language description="Deutsch" ietf="de-DE" version="1" languagegroup="?">
|
||||
<resources>
|
||||
<resource name="home_downloads">Downloads</resource>
|
||||
<resource name="home_headline">Greenshot - ein kostenloses Screenshot-Programm für maximale Produktivität</resource>
|
||||
<resource name="home_opensource">Greenshot ist kostenlos und open-source</resource>
|
||||
<resource name="home_opensource_donate">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.</resource>
|
||||
<resource name="home_opensource_gpl">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.</resource>
|
||||
<resource name="home_seemore">Und weiter?</resource>
|
||||
<resource name="home_seemore_screenshots">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.</resource>
|
||||
<resource name="home_whatis">Was ist Greenshot?</resource>
|
||||
<resource name="home_whatis_create">Schnelle Erstellung von kompletten oder teilweisen Screenshots.</resource>
|
||||
<resource name="home_whatis_edit">Einfaches Hinzufügen von Kommentaren, Hervorhebungen oder Unkenntlichmachungen.</resource>
|
||||
<resource name="home_whatis_intro">Greenshot ist ein kompaktes Screenshot-Programm für Windows mit den folgenden Hauptfunktionen:</resource>
|
||||
<resource name="home_whatis_more">... und viele weitere Möglichkeiten, die die Erstellung von und die Arbeit mit Screenshots vereinfachen - Tag für Tag.</resource>
|
||||
<resource name="home_whatis_send">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.</resource>
|
||||
<resource name="home_whatis_usage">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.</resource>
|
||||
</resources>
|
||||
an einen Drucker, ein MS Office-Dokument oder als E-Mail-Anhang; Sie können es auch zu verschiedene Bild-Hosting-Services hochladen.</resource>
|
||||
<resource name="home_whatis_usage">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.</resource>
|
||||
</resources>
|
||||
</language>
|
|
@ -1,19 +1,19 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<language description="English" ietf="en-US" version="1.0.0" languagegroup="1">
|
||||
<resources>
|
||||
<resource name="home_downloads">Downloads</resource>
|
||||
<resource name="home_headline">Greenshot - a free screenshot tool optimized for productivity</resource>
|
||||
<resource name="home_opensource">Greenshot is free and open source</resource>
|
||||
<resource name="home_opensource_donate">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.</resource>
|
||||
<resource name="home_opensource_gpl">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.</resource>
|
||||
<resource name="home_seemore">Want to see more?</resource>
|
||||
<resource name="home_seemore_screenshots">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>.</resource>
|
||||
<resource name="home_whatis">What is Greenshot????</resource>
|
||||
<resource name="home_whatis_create">Quickly create screenshots of a selected region, window or fullscreen; you can even capture complete (scrolling) web pages from Internet Explorer.</resource>
|
||||
<resource name="home_whatis_edit">Easily annotate, highlight or obfuscate parts of the screenshot.</resource>
|
||||
<resource name="home_whatis_intro">Greenshot is a light-weight screenshot software tool for Windows with the following key features:</resource>
|
||||
<resource name="home_whatis_more">...and a lot more options simplyfying creation of and work with screenshots every day.</resource>
|
||||
<resource name="home_whatis_send">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.</resource>
|
||||
<resource name="home_whatis_usage">Being easy to understand and configurable, Greenshot is an efficient tool for project managers, software developers, technical writers, testers and anyone else creating screenshots.</resource>
|
||||
</resources>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<language description="English" ietf="en-US" version="1.0.0" languagegroup="1">
|
||||
<resources>
|
||||
<resource name="home_downloads">Downloads</resource>
|
||||
<resource name="home_headline">Greenshot - a free screenshot tool optimized for productivity</resource>
|
||||
<resource name="home_opensource">Greenshot is free and open source</resource>
|
||||
<resource name="home_opensource_donate">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.</resource>
|
||||
<resource name="home_opensource_gpl">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.</resource>
|
||||
<resource name="home_seemore">Want to see more?</resource>
|
||||
<resource name="home_seemore_screenshots">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>.</resource>
|
||||
<resource name="home_whatis">What is Greenshot????</resource>
|
||||
<resource name="home_whatis_create">Quickly create screenshots of a selected region, window or fullscreen; you can even capture complete (scrolling) web pages from Internet Explorer.</resource>
|
||||
<resource name="home_whatis_edit">Easily annotate, highlight or obfuscate parts of the screenshot.</resource>
|
||||
<resource name="home_whatis_intro">Greenshot is a light-weight screenshot software tool for Windows with the following key features:</resource>
|
||||
<resource name="home_whatis_more">...and a lot more options simplyfying creation of and work with screenshots every day.</resource>
|
||||
<resource name="home_whatis_send">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.</resource>
|
||||
<resource name="home_whatis_usage">Being easy to understand and configurable, Greenshot is an efficient tool for project managers, software developers, technical writers, testers and anyone else creating screenshots.</resource>
|
||||
</resources>
|
||||
</language>
|
|
@ -1,19 +1,19 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<language description="Español" ietf="es-ES" version="1.0.2" languagegroup="1">
|
||||
<resources>
|
||||
<resource name="home_downloads">Descargas</resource>
|
||||
<resource name="home_headline">Greenshot - herramienta libre de captura de pantalla, optimizada para una mayor productividad</resource>
|
||||
<resource name="home_opensource">Greenshot es código libre y abierto</resource>
|
||||
<resource name="home_opensource_donate">Si Greenshot te ahorra tiempo y/o dinero, puedes <a href="/support/">apoyar el desarrollo</a> de esta aplicación de captura de pantallas.</resource>
|
||||
<resource name="home_opensource_gpl">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.</resource>
|
||||
<resource name="home_seemore">¿Quieres ver más?</resource>
|
||||
<resource name="home_seemore_screenshots">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>.</resource>
|
||||
<resource name="home_whatis">¿Qué es Greenshot?</resource>
|
||||
<resource name="home_whatis_create">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.</resource>
|
||||
<resource name="home_whatis_edit">Anotación, resalte y ocultación de partes de la captura de pantalla fácilmente.</resource>
|
||||
<resource name="home_whatis_intro">Greenshot es una herramienta ligera de captura de pantalla para Windows con las características esenciales:</resource>
|
||||
<resource name="home_whatis_more">... y muchas más opciones para simplificar el día a día en la creación y el trabajo con capturas de pantalla.</resource>
|
||||
<resource name="home_whatis_send">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.</resource>
|
||||
<resource name="home_whatis_usage">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.</resource>
|
||||
</resources>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<language description="Español" ietf="es-ES" version="1.0.2" languagegroup="1">
|
||||
<resources>
|
||||
<resource name="home_downloads">Descargas</resource>
|
||||
<resource name="home_headline">Greenshot - herramienta libre de captura de pantalla, optimizada para una mayor productividad</resource>
|
||||
<resource name="home_opensource">Greenshot es código libre y abierto</resource>
|
||||
<resource name="home_opensource_donate">Si Greenshot te ahorra tiempo y/o dinero, puedes <a href="/support/">apoyar el desarrollo</a> de esta aplicación de captura de pantallas.</resource>
|
||||
<resource name="home_opensource_gpl">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.</resource>
|
||||
<resource name="home_seemore">¿Quieres ver más?</resource>
|
||||
<resource name="home_seemore_screenshots">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>.</resource>
|
||||
<resource name="home_whatis">¿Qué es Greenshot?</resource>
|
||||
<resource name="home_whatis_create">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.</resource>
|
||||
<resource name="home_whatis_edit">Anotación, resalte y ocultación de partes de la captura de pantalla fácilmente.</resource>
|
||||
<resource name="home_whatis_intro">Greenshot es una herramienta ligera de captura de pantalla para Windows con las características esenciales:</resource>
|
||||
<resource name="home_whatis_more">... y muchas más opciones para simplificar el día a día en la creación y el trabajo con capturas de pantalla.</resource>
|
||||
<resource name="home_whatis_send">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.</resource>
|
||||
<resource name="home_whatis_usage">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.</resource>
|
||||
</resources>
|
||||
</language>
|
|
@ -1,19 +1,19 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<language description="French" ietf="fr-FR" version="1.0.0" languagegroup="1">
|
||||
<resources>
|
||||
<resource name="home_downloads">Téléchargement</resource>
|
||||
<resource name="home_headline">Greenshot - Un outil de capture d’écran gratuit pour une productivité optimale</resource>
|
||||
<resource name="home_opensource">Greenshot est gratuit et «Open Source».</resource>
|
||||
<resource name="home_opensource_donate">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.</resource>
|
||||
<resource name="home_opensource_gpl">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.</resource>
|
||||
<resource name="home_seemore">Voulez-vous en savoir plus?</resource>
|
||||
<resource name="home_seemore_screenshots">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>.</resource>
|
||||
<resource name="home_whatis">Qu’est ce que Greenshot?</resource>
|
||||
<resource name="home_whatis_create">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.</resource>
|
||||
<resource name="home_whatis_edit">Annoter, surligner, assombrir ou brouiller facilement des parties de la capture.</resource>
|
||||
<resource name="home_whatis_intro">Greenshot est un logiciel de capture d’écran léger pour Windows avec les fonctionnalités majeures suivantes:</resource>
|
||||
<resource name="home_whatis_more">...et bien d'autres options qui permettent de simplifier le travail de création ou de gestion journaliers des captures d’écran.</resource>
|
||||
<resource name="home_whatis_send">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.</resource>
|
||||
<resource name="home_whatis_usage">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.</resource>
|
||||
</resources>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<language description="French" ietf="fr-FR" version="1.0.0" languagegroup="1">
|
||||
<resources>
|
||||
<resource name="home_downloads">Téléchargement</resource>
|
||||
<resource name="home_headline">Greenshot - Un outil de capture d’écran gratuit pour une productivité optimale</resource>
|
||||
<resource name="home_opensource">Greenshot est gratuit et «Open Source».</resource>
|
||||
<resource name="home_opensource_donate">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.</resource>
|
||||
<resource name="home_opensource_gpl">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.</resource>
|
||||
<resource name="home_seemore">Voulez-vous en savoir plus?</resource>
|
||||
<resource name="home_seemore_screenshots">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>.</resource>
|
||||
<resource name="home_whatis">Qu’est ce que Greenshot?</resource>
|
||||
<resource name="home_whatis_create">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.</resource>
|
||||
<resource name="home_whatis_edit">Annoter, surligner, assombrir ou brouiller facilement des parties de la capture.</resource>
|
||||
<resource name="home_whatis_intro">Greenshot est un logiciel de capture d’écran léger pour Windows avec les fonctionnalités majeures suivantes:</resource>
|
||||
<resource name="home_whatis_more">...et bien d'autres options qui permettent de simplifier le travail de création ou de gestion journaliers des captures d’écran.</resource>
|
||||
<resource name="home_whatis_send">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.</resource>
|
||||
<resource name="home_whatis_usage">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.</resource>
|
||||
</resources>
|
||||
</language>
|
|
@ -1,19 +1,19 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<language description="Italiano" ietf="it-IT" version="1.0.2" languagegroup="1">
|
||||
<resources>
|
||||
<resource name="home_downloads">Download</resource>
|
||||
<resource name="home_headline">Greenshot - strumento di cattura gratis ottimizzato per la produttività</resource>
|
||||
<resource name="home_opensource">Greenshot è gratuito e open source</resource>
|
||||
<resource name="home_opensource_donate">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.</resource>
|
||||
<resource name="home_opensource_gpl">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.</resource>
|
||||
<resource name="home_seemore">Vuoi saperne di più?</resource>
|
||||
<resource name="home_seemore_screenshots">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>.</resource>
|
||||
<resource name="home_whatis">Greenshot - Che cosa è questo?</resource>
|
||||
<resource name="home_whatis_create">Rapidamente rendere le immagini di uno schermo selezionata regione, finestra o completo schermo. È possibile anche catturare le pagine web da Internet Explorer completi (scorrimento).</resource>
|
||||
<resource name="home_whatis_edit">Annotare, evidenziare o nascondere parti di screenshot è facilmente.</resource>
|
||||
<resource name="home_whatis_intro">Greenshot è uno strumento di cattura schermo per Windows con leggeri caratteristiche essenziali:</resource>
|
||||
<resource name="home_whatis_more">... e molte altre opzioni per creare e lavorare con le immagini ogni giorno.</resource>
|
||||
<resource name="home_whatis_send">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.</resource>
|
||||
<resource name="home_whatis_usage">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.</resource>
|
||||
</resources>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<language description="Italiano" ietf="it-IT" version="1.0.2" languagegroup="1">
|
||||
<resources>
|
||||
<resource name="home_downloads">Download</resource>
|
||||
<resource name="home_headline">Greenshot - strumento di cattura gratis ottimizzato per la produttività</resource>
|
||||
<resource name="home_opensource">Greenshot è gratuito e open source</resource>
|
||||
<resource name="home_opensource_donate">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.</resource>
|
||||
<resource name="home_opensource_gpl">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.</resource>
|
||||
<resource name="home_seemore">Vuoi saperne di più?</resource>
|
||||
<resource name="home_seemore_screenshots">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>.</resource>
|
||||
<resource name="home_whatis">Greenshot - Che cosa è questo?</resource>
|
||||
<resource name="home_whatis_create">Rapidamente rendere le immagini di uno schermo selezionata regione, finestra o completo schermo. È possibile anche catturare le pagine web da Internet Explorer completi (scorrimento).</resource>
|
||||
<resource name="home_whatis_edit">Annotare, evidenziare o nascondere parti di screenshot è facilmente.</resource>
|
||||
<resource name="home_whatis_intro">Greenshot è uno strumento di cattura schermo per Windows con leggeri caratteristiche essenziali:</resource>
|
||||
<resource name="home_whatis_more">... e molte altre opzioni per creare e lavorare con le immagini ogni giorno.</resource>
|
||||
<resource name="home_whatis_send">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.</resource>
|
||||
<resource name="home_whatis_usage">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.</resource>
|
||||
</resources>
|
||||
</language>
|
|
@ -1,19 +1,19 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<language description="Norwegian Nynorsk" ietf="nn-NO" version="1.0.2" languagegroup="1">
|
||||
<resources>
|
||||
<resource name="home_downloads">Nedlastingar</resource>
|
||||
<resource name="home_headline">Greenshot - ein gratis skjermknipsar som effektiviserer kvardagen</resource>
|
||||
<resource name="home_opensource">Greenshot er gratis og har open kjeldekode</resource>
|
||||
<resource name="home_opensource_donate">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!</resource>
|
||||
<resource name="home_opensource_gpl">Greenshot blir utgjeven under _GPL_, så programmet kan lastast ned og brukast utan kostnad, også i verksemder.</resource>
|
||||
<resource name="home_seemore">Sjå meir?</resource>
|
||||
<resource name="home_seemore_screenshots">Sjølvsagt kan Greenshot by på meir! Ta ein gløtt på _skjermbilde_ av programmet i bruk, eller prøv den _nyaste utgåva_.</resource>
|
||||
<resource name="home_whatis">Kva er Greenshot?</resource>
|
||||
<resource name="home_whatis_create">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.</resource>
|
||||
<resource name="home_whatis_edit">Enkel notering, markering og sensurering i knipsfiksaren.</resource>
|
||||
<resource name="home_whatis_intro">Greenshot er eit lite og nett Windows-verktøy med dei fylgjande eigenskapane:</resource>
|
||||
<resource name="home_whatis_more">...og endå meir som forenklar arbeidet med skjermbilde - kvar dag!</resource>
|
||||
<resource name="home_whatis_send">Eksporter skjermbildet til fil, skrivar, utklyppstavle, e-post, Office-program eller skytenester som til dømes Flickr og Picasa.</resource>
|
||||
<resource name="home_whatis_usage">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.</resource>
|
||||
</resources>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<language description="Norwegian Nynorsk" ietf="nn-NO" version="1.0.2" languagegroup="1">
|
||||
<resources>
|
||||
<resource name="home_downloads">Nedlastingar</resource>
|
||||
<resource name="home_headline">Greenshot - ein gratis skjermknipsar som effektiviserer kvardagen</resource>
|
||||
<resource name="home_opensource">Greenshot er gratis og har open kjeldekode</resource>
|
||||
<resource name="home_opensource_donate">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!</resource>
|
||||
<resource name="home_opensource_gpl">Greenshot blir utgjeven under _GPL_, så programmet kan lastast ned og brukast utan kostnad, også i verksemder.</resource>
|
||||
<resource name="home_seemore">Sjå meir?</resource>
|
||||
<resource name="home_seemore_screenshots">Sjølvsagt kan Greenshot by på meir! Ta ein gløtt på _skjermbilde_ av programmet i bruk, eller prøv den _nyaste utgåva_.</resource>
|
||||
<resource name="home_whatis">Kva er Greenshot?</resource>
|
||||
<resource name="home_whatis_create">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.</resource>
|
||||
<resource name="home_whatis_edit">Enkel notering, markering og sensurering i knipsfiksaren.</resource>
|
||||
<resource name="home_whatis_intro">Greenshot er eit lite og nett Windows-verktøy med dei fylgjande eigenskapane:</resource>
|
||||
<resource name="home_whatis_more">...og endå meir som forenklar arbeidet med skjermbilde - kvar dag!</resource>
|
||||
<resource name="home_whatis_send">Eksporter skjermbildet til fil, skrivar, utklyppstavle, e-post, Office-program eller skytenester som til dømes Flickr og Picasa.</resource>
|
||||
<resource name="home_whatis_usage">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.</resource>
|
||||
</resources>
|
||||
</language>
|
|
@ -1,19 +1,19 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<language description="Українська" ietf="uk-UA" version="1.0.0" languagegroup="5">
|
||||
<resources>
|
||||
<resource name="home_downloads">Завантаження</resource>
|
||||
<resource name="home_headline">Greenshot — безкоштовний інструмент для створення знімків екрану, оптимізований для покращення продуктивності</resource>
|
||||
<resource name="home_opensource">Greenshot безкоштовний і з відкритим кодом</resource>
|
||||
<resource name="home_opensource_donate">Якщо Вам здається, що Greenshot зберігає чимало Вашого часу та/або грошей, Ви можете <a href="/support/">підтримати розробку</a> цього програмного забезпечення для створення знімків екрану.</resource>
|
||||
<resource name="home_opensource_gpl">Greenshot розповсюджується відповідно до <a href="http://uk.wikipedia.org/wiki/GNU_General_Public_License" target="_blank">GPL</a>, тобто це програмне забезпечення можна вільно завантажувати та використовувати навіть з комерційною метою.</resource>
|
||||
<resource name="home_seemore">Хочете побачити більше?</resource>
|
||||
<resource name="home_seemore_screenshots">Звісно, Greenshot може зробити для Вас набагато більше. Подивіться кілька <a title="Знімки Greenshot у дії" href="/screenshots/">знімків</a> Greenshot у дії та спробуйте <a title="Завантажити найновішу стабільну версію Greenshot" href="/downloads/">останній реліз</a>.</resource>
|
||||
<resource name="home_whatis">Що таке Greenshot???</resource>
|
||||
<resource name="home_whatis_create">Швидке створення знімків вибраної області, вікна або всього екрану; Ви навіть можете захоплювати всю (з прокручуванням) Інтернет-сторінку в Internet Explorer.</resource>
|
||||
<resource name="home_whatis_edit">Легке коментування, підсвічування або виділення частин знімку.</resource>
|
||||
<resource name="home_whatis_intro">Greenshot — це невеличка програма для створення знімків екрану для Windows з такими основними можливостями:</resource>
|
||||
<resource name="home_whatis_more">...та чимало інших можливостей, що спрощують створення та обробку знімків.</resource>
|
||||
<resource name="home_whatis_send">Кілька варіантів експорту знімків: збереження в файл, друк, копіювання в буфер обміну, долучення до електронного листа, надсилання до офісних програм або вивантаження на фото-хостинги на зразок Flickr, Picasa та інші.</resource>
|
||||
<resource name="home_whatis_usage">Завдяки простоті налаштування та інтуїтивності, Greenshot є ефективним інструментом для керівників проектів, розробників програмного забезпечення, технічних авторів, тестерів та будь-кого іншого, кому потрібно створювати знімки.</resource>
|
||||
</resources>
|
||||
</language>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<language description="Українська" ietf="uk-UA" version="1.0.0" languagegroup="5">
|
||||
<resources>
|
||||
<resource name="home_downloads">Завантаження</resource>
|
||||
<resource name="home_headline">Greenshot — безкоштовний інструмент для створення знімків екрану, оптимізований для покращення продуктивності</resource>
|
||||
<resource name="home_opensource">Greenshot безкоштовний і з відкритим кодом</resource>
|
||||
<resource name="home_opensource_donate">Якщо Вам здається, що Greenshot зберігає чимало Вашого часу та/або грошей, Ви можете <a href="/support/">підтримати розробку</a> цього програмного забезпечення для створення знімків екрану.</resource>
|
||||
<resource name="home_opensource_gpl">Greenshot розповсюджується відповідно до <a href="http://uk.wikipedia.org/wiki/GNU_General_Public_License" target="_blank">GPL</a>, тобто це програмне забезпечення можна вільно завантажувати та використовувати навіть з комерційною метою.</resource>
|
||||
<resource name="home_seemore">Хочете побачити більше?</resource>
|
||||
<resource name="home_seemore_screenshots">Звісно, Greenshot може зробити для Вас набагато більше. Подивіться кілька <a title="Знімки Greenshot у дії" href="/screenshots/">знімків</a> Greenshot у дії та спробуйте <a title="Завантажити найновішу стабільну версію Greenshot" href="/downloads/">останній реліз</a>.</resource>
|
||||
<resource name="home_whatis">Що таке Greenshot???</resource>
|
||||
<resource name="home_whatis_create">Швидке створення знімків вибраної області, вікна або всього екрану; Ви навіть можете захоплювати всю (з прокручуванням) Інтернет-сторінку в Internet Explorer.</resource>
|
||||
<resource name="home_whatis_edit">Легке коментування, підсвічування або виділення частин знімку.</resource>
|
||||
<resource name="home_whatis_intro">Greenshot — це невеличка програма для створення знімків екрану для Windows з такими основними можливостями:</resource>
|
||||
<resource name="home_whatis_more">...та чимало інших можливостей, що спрощують створення та обробку знімків.</resource>
|
||||
<resource name="home_whatis_send">Кілька варіантів експорту знімків: збереження в файл, друк, копіювання в буфер обміну, долучення до електронного листа, надсилання до офісних програм або вивантаження на фото-хостинги на зразок Flickr, Picasa та інші.</resource>
|
||||
<resource name="home_whatis_usage">Завдяки простоті налаштування та інтуїтивності, Greenshot є ефективним інструментом для керівників проектів, розробників програмного забезпечення, технічних авторів, тестерів та будь-кого іншого, кому потрібно створювати знімки.</resource>
|
||||
</resources>
|
||||
</language>
|
|
@ -12,6 +12,16 @@
|
|||
</None>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<None Remove="Images\Confluence.ico" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Resource Include="Images\Confluence.ico">
|
||||
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
|
||||
</Resource>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<WebReferences Include="Web References\" />
|
||||
<WebReferenceUrl Include="http://confluence/rpc/soap-axis/confluenceservice-v1%3fwsdl">
|
||||
|
|
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
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]
|
||||
|
|
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
using System;
|
||||
|
||||
namespace GreenshotJiraPlugin.Hooking
|
||||
{
|
||||
/// <summary>
|
||||
/// Event arguments for the TitleChangeEvent
|
||||
/// </summary>
|
||||
public class TitleChangeEventArgs : EventArgs
|
||||
{
|
||||
/// <summary>
|
||||
/// HWnd of the window which has a changed title
|
||||
/// </summary>
|
||||
public IntPtr HWnd
|
||||
{
|
||||
get;
|
||||
set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Title which is changed
|
||||
/// </summary>
|
||||
public string Title
|
||||
{
|
||||
get;
|
||||
set;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
namespace GreenshotJiraPlugin.Hooking
|
||||
{
|
||||
/// <summary>
|
||||
/// Delegate for the title change event
|
||||
/// </summary>
|
||||
/// <param name="eventArgs"></param>
|
||||
public delegate void TitleChangeEventDelegate(TitleChangeEventArgs eventArgs);
|
||||
}
|
|
@ -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
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// 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!
|
||||
/// </summary>
|
||||
public class JiraMonitor : IDisposable
|
||||
/// <summary>
|
||||
/// 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!
|
||||
/// </summary>
|
||||
public class JiraMonitor : IDisposable
|
||||
{
|
||||
private static readonly LogSource Log = new LogSource();
|
||||
private readonly Regex _jiraKeyPattern = new Regex(@"[A-Z][A-Z0-9]+\-[0-9]+");
|
||||
|
|
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Runtime.InteropServices;
|
||||
using GreenshotPlugin.UnmanagedHelpers;
|
||||
|
||||
namespace GreenshotJiraPlugin.Hooking
|
||||
{
|
||||
/// <summary>
|
||||
/// 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.
|
||||
/// </summary>
|
||||
public class WindowsEventHook : IDisposable
|
||||
{
|
||||
private readonly WinEventDelegate _winEventHandler;
|
||||
private GCHandle _gcHandle;
|
||||
|
||||
/// <summary>
|
||||
/// Used with Register hook
|
||||
/// </summary>
|
||||
/// <param name="eventType"></param>
|
||||
/// <param name="hwnd"></param>
|
||||
/// <param name="idObject"></param>
|
||||
/// <param name="idChild"></param>
|
||||
/// <param name="dwEventThread"></param>
|
||||
/// <param name="dwmsEventTime"></param>
|
||||
public delegate void WinEventHandler(WinEvent eventType, IntPtr hwnd, EventObjects idObject, int idChild, uint dwEventThread, uint dwmsEventTime);
|
||||
|
||||
/// <summary>
|
||||
/// Create a WindowsEventHook object
|
||||
/// </summary>
|
||||
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);
|
||||
|
||||
/// <summary>
|
||||
/// Used with SetWinEventHook
|
||||
/// </summary>
|
||||
/// <param name="hWinEventHook"></param>
|
||||
/// <param name="eventType"></param>
|
||||
/// <param name="hwnd"></param>
|
||||
/// <param name="idObject"></param>
|
||||
/// <param name="idChild"></param>
|
||||
/// <param name="dwEventThread"></param>
|
||||
/// <param name="dwmsEventTime"></param>
|
||||
private delegate void WinEventDelegate(IntPtr hWinEventHook, WinEvent eventType, IntPtr hwnd, EventObjects idObject, int idChild, uint dwEventThread, uint dwmsEventTime);
|
||||
|
||||
private readonly IDictionary<IntPtr, WinEventHandler> _winEventHandlers = new Dictionary<IntPtr, WinEventHandler>();
|
||||
|
||||
/// <summary>
|
||||
/// Are hooks active?
|
||||
/// </summary>
|
||||
public bool IsHooked => _winEventHandlers.Count > 0;
|
||||
|
||||
/// <summary>
|
||||
/// Hook a WinEvent
|
||||
/// </summary>
|
||||
/// <param name="winEvent"></param>
|
||||
/// <param name="winEventHandler"></param>
|
||||
/// <returns>true if success</returns>
|
||||
public void Hook(WinEvent winEvent, WinEventHandler winEventHandler)
|
||||
{
|
||||
Hook(winEvent, winEvent, winEventHandler);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Hook a WinEvent
|
||||
/// </summary>
|
||||
/// <param name="winEventStart"></param>
|
||||
/// <param name="winEventEnd"></param>
|
||||
/// <param name="winEventHandler"></param>
|
||||
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);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Remove all hooks
|
||||
/// </summary>
|
||||
private void Unhook()
|
||||
{
|
||||
foreach (var hookPtr in _winEventHandlers.Keys)
|
||||
{
|
||||
if (hookPtr != IntPtr.Zero)
|
||||
{
|
||||
UnhookWinEvent(hookPtr);
|
||||
}
|
||||
}
|
||||
_winEventHandlers.Clear();
|
||||
_gcHandle.Free();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
|
||||
/// </summary>
|
||||
public void Dispose()
|
||||
{
|
||||
Unhook();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Call the WinEventHandler for this event
|
||||
/// </summary>
|
||||
/// <param name="hWinEventHook"></param>
|
||||
/// <param name="eventType"></param>
|
||||
/// <param name="hWnd"></param>
|
||||
/// <param name="idObject"></param>
|
||||
/// <param name="idChild"></param>
|
||||
/// <param name="dwEventThread"></param>
|
||||
/// <param name="dwmsEventTime"></param>
|
||||
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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Runtime.InteropServices;
|
||||
using GreenshotPlugin.UnmanagedHelpers;
|
||||
|
||||
namespace GreenshotPlugin.Hooking
|
||||
{
|
||||
/// <summary>
|
||||
/// 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.
|
||||
/// </summary>
|
||||
public class WindowsEventHook : IDisposable
|
||||
{
|
||||
private readonly WinEventDelegate _winEventHandler;
|
||||
private GCHandle _gcHandle;
|
||||
|
||||
/// <summary>
|
||||
/// Used with Register hook
|
||||
/// </summary>
|
||||
/// <param name="eventType"></param>
|
||||
/// <param name="hwnd"></param>
|
||||
/// <param name="idObject"></param>
|
||||
/// <param name="idChild"></param>
|
||||
/// <param name="dwEventThread"></param>
|
||||
/// <param name="dwmsEventTime"></param>
|
||||
public delegate void WinEventHandler(WinEvent eventType, IntPtr hwnd, EventObjects idObject, int idChild, uint dwEventThread, uint dwmsEventTime);
|
||||
|
||||
/// <summary>
|
||||
/// Create a WindowsEventHook object
|
||||
/// </summary>
|
||||
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);
|
||||
|
||||
/// <summary>
|
||||
/// Used with SetWinEventHook
|
||||
/// </summary>
|
||||
/// <param name="hWinEventHook"></param>
|
||||
/// <param name="eventType"></param>
|
||||
/// <param name="hwnd"></param>
|
||||
/// <param name="idObject"></param>
|
||||
/// <param name="idChild"></param>
|
||||
/// <param name="dwEventThread"></param>
|
||||
/// <param name="dwmsEventTime"></param>
|
||||
private delegate void WinEventDelegate(IntPtr hWinEventHook, WinEvent eventType, IntPtr hwnd, EventObjects idObject, int idChild, uint dwEventThread, uint dwmsEventTime);
|
||||
|
||||
private readonly IDictionary<IntPtr, WinEventHandler> _winEventHandlers = new Dictionary<IntPtr, WinEventHandler>();
|
||||
|
||||
/// <summary>
|
||||
/// Are hooks active?
|
||||
/// </summary>
|
||||
public bool IsHooked => _winEventHandlers.Count > 0;
|
||||
|
||||
/// <summary>
|
||||
/// Hook a WinEvent
|
||||
/// </summary>
|
||||
/// <param name="winEvent"></param>
|
||||
/// <param name="winEventHandler"></param>
|
||||
/// <returns>true if success</returns>
|
||||
public void Hook(WinEvent winEvent, WinEventHandler winEventHandler)
|
||||
{
|
||||
Hook(winEvent, winEvent, winEventHandler);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Hook a WinEvent
|
||||
/// </summary>
|
||||
/// <param name="winEventStart"></param>
|
||||
/// <param name="winEventEnd"></param>
|
||||
/// <param name="winEventHandler"></param>
|
||||
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);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Remove all hooks
|
||||
/// </summary>
|
||||
private void Unhook()
|
||||
{
|
||||
foreach (var hookPtr in _winEventHandlers.Keys)
|
||||
{
|
||||
if (hookPtr != IntPtr.Zero)
|
||||
{
|
||||
UnhookWinEvent(hookPtr);
|
||||
}
|
||||
}
|
||||
_winEventHandlers.Clear();
|
||||
_gcHandle.Free();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
|
||||
/// </summary>
|
||||
public void Dispose()
|
||||
{
|
||||
Unhook();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Call the WinEventHandler for this event
|
||||
/// </summary>
|
||||
/// <param name="hWinEventHook"></param>
|
||||
/// <param name="eventType"></param>
|
||||
/// <param name="hWnd"></param>
|
||||
/// <param name="idObject"></param>
|
||||
/// <param name="idChild"></param>
|
||||
/// <param name="dwEventThread"></param>
|
||||
/// <param name="dwmsEventTime"></param>
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
171
GreenshotPlugin/Hooking/WindowsOpenCloseMonitor.cs
Normal file
171
GreenshotPlugin/Hooking/WindowsOpenCloseMonitor.cs
Normal file
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
using System;
|
||||
using GreenshotPlugin.Core;
|
||||
using GreenshotPlugin.UnmanagedHelpers;
|
||||
|
||||
namespace GreenshotPlugin.Hooking
|
||||
{
|
||||
/// <summary>
|
||||
/// Event arguments for the WindowOpenCloseEvent
|
||||
/// </summary>
|
||||
public class WindowOpenCloseEventArgs : EventArgs
|
||||
{
|
||||
public bool IsOpen { get; set; }
|
||||
/// <summary>
|
||||
/// HWnd of the window which has a changed title
|
||||
/// </summary>
|
||||
public IntPtr HWnd
|
||||
{
|
||||
get;
|
||||
set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Title which is changed
|
||||
/// </summary>
|
||||
public string Title
|
||||
{
|
||||
get;
|
||||
set;
|
||||
}
|
||||
|
||||
public string ClassName { get; set; }
|
||||
}
|
||||
/// <summary>
|
||||
/// Delegate for the title change event
|
||||
/// </summary>
|
||||
/// <param name="eventArgs"></param>
|
||||
public delegate void WindowOpenCloseEventDelegate(WindowOpenCloseEventArgs eventArgs);
|
||||
|
||||
/// <summary>
|
||||
/// Monitor all title changes
|
||||
/// </summary>
|
||||
public sealed class WindowsOpenCloseMonitor : IDisposable
|
||||
{
|
||||
private WindowsEventHook _hook;
|
||||
private readonly object _lockObject = new object();
|
||||
// ReSharper disable once InconsistentNaming
|
||||
private event WindowOpenCloseEventDelegate _windowOpenCloseEvent;
|
||||
|
||||
/// <summary>
|
||||
/// Add / remove event handler to the title monitor
|
||||
/// </summary>
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// WinEventDelegate for the creation & destruction
|
||||
/// </summary>
|
||||
/// <param name="eventType"></param>
|
||||
/// <param name="hWnd"></param>
|
||||
/// <param name="idObject"></param>
|
||||
/// <param name="idChild"></param>
|
||||
/// <param name="dwEventThread"></param>
|
||||
/// <param name="dwmsEventTime"></param>
|
||||
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
|
||||
|
||||
/// <summary>
|
||||
/// Dispose the underlying hook
|
||||
/// </summary>
|
||||
public void Dispose(bool disposing)
|
||||
{
|
||||
if (_disposedValue)
|
||||
{
|
||||
return;
|
||||
}
|
||||
lock (_lockObject)
|
||||
{
|
||||
_hook?.Dispose();
|
||||
}
|
||||
_disposedValue = true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Make sure the finalizer disposes the underlying hook
|
||||
/// </summary>
|
||||
~WindowsOpenCloseMonitor()
|
||||
{
|
||||
// Do not change this code. Put cleanup code in Dispose(bool disposing) above.
|
||||
Dispose(false);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Dispose the underlying hook
|
||||
/// </summary>
|
||||
public void Dispose()
|
||||
{
|
||||
// Do not change this code. Put cleanup code in Dispose(bool disposing) above.
|
||||
Dispose(true);
|
||||
GC.SuppressFinalize(this);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
using System;
|
||||
using GreenshotPlugin.Core;
|
||||
using GreenshotPlugin.UnmanagedHelpers;
|
||||
|
||||
namespace GreenshotJiraPlugin.Hooking
|
||||
{
|
||||
/// <summary>
|
||||
/// Monitor all title changes
|
||||
/// </summary>
|
||||
public sealed class WindowsTitleMonitor : IDisposable
|
||||
{
|
||||
private WindowsEventHook _hook;
|
||||
private readonly object _lockObject = new object();
|
||||
// ReSharper disable once InconsistentNaming
|
||||
private event TitleChangeEventDelegate _titleChangeEvent;
|
||||
|
||||
/// <summary>
|
||||
/// Add / remove event handler to the title monitor
|
||||
/// </summary>
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// WinEventDelegate for the creation & destruction
|
||||
/// </summary>
|
||||
/// <param name="eventType"></param>
|
||||
/// <param name="hWnd"></param>
|
||||
/// <param name="idObject"></param>
|
||||
/// <param name="idChild"></param>
|
||||
/// <param name="dwEventThread"></param>
|
||||
/// <param name="dwmsEventTime"></param>
|
||||
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
|
||||
|
||||
/// <summary>
|
||||
/// Dispose the underlying hook
|
||||
/// </summary>
|
||||
public void Dispose(bool disposing)
|
||||
{
|
||||
if (_disposedValue)
|
||||
{
|
||||
return;
|
||||
}
|
||||
lock (_lockObject)
|
||||
{
|
||||
_hook?.Dispose();
|
||||
}
|
||||
_disposedValue = true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Make sure the finalizer disposes the underlying hook
|
||||
/// </summary>
|
||||
~WindowsTitleMonitor()
|
||||
{
|
||||
// Do not change this code. Put cleanup code in Dispose(bool disposing) above.
|
||||
Dispose(false);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Dispose the underlying hook
|
||||
/// </summary>
|
||||
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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
using System;
|
||||
using GreenshotPlugin.Core;
|
||||
using GreenshotPlugin.UnmanagedHelpers;
|
||||
|
||||
namespace GreenshotPlugin.Hooking
|
||||
{
|
||||
/// <summary>
|
||||
/// Event arguments for the TitleChangeEvent
|
||||
/// </summary>
|
||||
public class TitleChangeEventArgs : EventArgs
|
||||
{
|
||||
/// <summary>
|
||||
/// HWnd of the window which has a changed title
|
||||
/// </summary>
|
||||
public IntPtr HWnd
|
||||
{
|
||||
get;
|
||||
set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Title which is changed
|
||||
/// </summary>
|
||||
public string Title
|
||||
{
|
||||
get;
|
||||
set;
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Delegate for the title change event
|
||||
/// </summary>
|
||||
/// <param name="eventArgs"></param>
|
||||
public delegate void TitleChangeEventDelegate(TitleChangeEventArgs eventArgs);
|
||||
|
||||
/// <summary>
|
||||
/// Monitor all title changes
|
||||
/// </summary>
|
||||
public sealed class WindowsTitleMonitor : IDisposable
|
||||
{
|
||||
private WindowsEventHook _hook;
|
||||
private readonly object _lockObject = new object();
|
||||
// ReSharper disable once InconsistentNaming
|
||||
private event TitleChangeEventDelegate _titleChangeEvent;
|
||||
|
||||
/// <summary>
|
||||
/// Add / remove event handler to the title monitor
|
||||
/// </summary>
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// WinEventDelegate for the creation & destruction
|
||||
/// </summary>
|
||||
/// <param name="eventType"></param>
|
||||
/// <param name="hWnd"></param>
|
||||
/// <param name="idObject"></param>
|
||||
/// <param name="idChild"></param>
|
||||
/// <param name="dwEventThread"></param>
|
||||
/// <param name="dwmsEventTime"></param>
|
||||
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
|
||||
|
||||
/// <summary>
|
||||
/// Dispose the underlying hook
|
||||
/// </summary>
|
||||
public void Dispose(bool disposing)
|
||||
{
|
||||
if (_disposedValue)
|
||||
{
|
||||
return;
|
||||
}
|
||||
lock (_lockObject)
|
||||
{
|
||||
_hook?.Dispose();
|
||||
}
|
||||
_disposedValue = true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Make sure the finalizer disposes the underlying hook
|
||||
/// </summary>
|
||||
~WindowsTitleMonitor()
|
||||
{
|
||||
// Do not change this code. Put cleanup code in Dispose(bool disposing) above.
|
||||
Dispose(false);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Dispose the underlying hook
|
||||
/// </summary>
|
||||
public void Dispose()
|
||||
{
|
||||
// Do not change this code. Put cleanup code in Dispose(bool disposing) above.
|
||||
Dispose(true);
|
||||
GC.SuppressFinalize(this);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -14,7 +14,6 @@
|
|||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Windows.SDK.Contracts" version="10.0.18362.2005" />
|
||||
<PackageReference Include="System.Reactive" Version="4.3.2" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\GreenshotPlugin\GreenshotPlugin.csproj" />
|
||||
|
|
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
using GreenshotPlugin.UnmanagedHelpers;
|
||||
using System;
|
||||
|
||||
namespace Greenshot.Addon.Win10.Native
|
||||
{
|
||||
/// <summary>
|
||||
/// Container for the windows messages
|
||||
/// </summary>
|
||||
public class WindowMessageInfo
|
||||
{
|
||||
/// <summary>
|
||||
/// IntPtr with the Handle of the window
|
||||
/// </summary>
|
||||
public IntPtr Handle { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// WindowsMessages which is the actual message
|
||||
/// </summary>
|
||||
public WindowsMessages Message { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// IntPtr with the word-param
|
||||
/// </summary>
|
||||
public IntPtr WordParam { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// IntPtr with the long-param
|
||||
/// </summary>
|
||||
public IntPtr LongParam { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Factory method for the Window Message Info
|
||||
/// </summary>
|
||||
/// <param name="hwnd">IntPtr with the Handle of the window</param>
|
||||
/// <param name="msg">WindowsMessages which is the actual message</param>
|
||||
/// <param name="wParam">IntPtr with the word-param</param>
|
||||
/// <param name="lParam">IntPtr with the long-param</param>
|
||||
/// <param name="handled"></param>
|
||||
/// <returns>WindowMessageInfo</returns>
|
||||
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
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
using System;
|
||||
using System.Reactive.Disposables;
|
||||
using System.Reactive.Linq;
|
||||
using System.Windows;
|
||||
using System.Windows.Interop;
|
||||
|
||||
namespace Greenshot.Addon.Win10.Native
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// A monitor for window messages
|
||||
/// </summary>
|
||||
public static class WindowMessageMonitor
|
||||
{
|
||||
/// <summary>
|
||||
/// Create a HwndSource for the specified Window
|
||||
/// </summary>
|
||||
/// <param name="window">Window</param>
|
||||
/// <returns>HwndSource</returns>
|
||||
private static HwndSource ToHwndSource(this Window window)
|
||||
{
|
||||
IntPtr windowHandle = new WindowInteropHelper(window).Handle;
|
||||
if (windowHandle == IntPtr.Zero)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
return HwndSource.FromHwnd(windowHandle);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Create an observable for the specified window
|
||||
/// </summary>
|
||||
public static IObservable<WindowMessageInfo> WindowMessages(this Window window)
|
||||
{
|
||||
return WindowMessages(window, null);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Create an observable for the specified HwndSource
|
||||
/// </summary>
|
||||
public static IObservable<WindowMessageInfo> WindowMessages(this HwndSource hwndSource)
|
||||
{
|
||||
return WindowMessages(null, hwndSource);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Create an observable for the specified window or HwndSource
|
||||
/// </summary>
|
||||
/// <param name="window">Window</param>
|
||||
/// <param name="hwndSource">HwndSource</param>
|
||||
/// <returns>IObservable</returns>
|
||||
private static IObservable<WindowMessageInfo> 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<WindowMessageInfo>(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();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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<bool> ShareTask { get; } = new TaskCompletionSource<bool>(TaskCreationOptions.RunContinuationsAsynchronously);
|
||||
public bool IsDataRequested { get; set; }
|
||||
|
||||
public IntPtr SharingHwnd { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -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
|
|||
/// <returns>Task with string, which describes the application which was used to share with</returns>
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue