Added Automate (Simple scripting / macro) to tools menu

This commit is contained in:
Jaex 2015-02-16 15:31:19 +02:00
parent 8c45f19c01
commit a128cb9c0b
20 changed files with 2434 additions and 477 deletions

View file

@ -0,0 +1,127 @@
namespace ShareX.HelpersLib
{
partial class AutomateForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AutomateForm));
this.btnRun = new System.Windows.Forms.Button();
this.rtbInput = new System.Windows.Forms.RichTextBox();
this.pInput = new System.Windows.Forms.Panel();
this.cbFunctions = new System.Windows.Forms.ComboBox();
this.lblFunctions = new System.Windows.Forms.Label();
this.pInput.SuspendLayout();
this.SuspendLayout();
//
// btnRun
//
this.btnRun.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.btnRun.Location = new System.Drawing.Point(8, 484);
this.btnRun.Name = "btnRun";
this.btnRun.Size = new System.Drawing.Size(120, 24);
this.btnRun.TabIndex = 1;
this.btnRun.Text = "Run";
this.btnRun.UseVisualStyleBackColor = true;
this.btnRun.Click += new System.EventHandler(this.btnRun_Click);
//
// rtbInput
//
this.rtbInput.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.rtbInput.Dock = System.Windows.Forms.DockStyle.Fill;
this.rtbInput.Font = new System.Drawing.Font("Verdana", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(162)));
this.rtbInput.Location = new System.Drawing.Point(3, 3);
this.rtbInput.Name = "rtbInput";
this.rtbInput.Size = new System.Drawing.Size(495, 460);
this.rtbInput.TabIndex = 2;
this.rtbInput.Text = resources.GetString("rtbInput.Text");
this.rtbInput.TextChanged += new System.EventHandler(this.rtbInput_TextChanged);
//
// pInput
//
this.pInput.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.pInput.BackColor = System.Drawing.Color.White;
this.pInput.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.pInput.Controls.Add(this.rtbInput);
this.pInput.Location = new System.Drawing.Point(8, 8);
this.pInput.Name = "pInput";
this.pInput.Padding = new System.Windows.Forms.Padding(3);
this.pInput.Size = new System.Drawing.Size(503, 468);
this.pInput.TabIndex = 3;
//
// cbFunctions
//
this.cbFunctions.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.cbFunctions.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cbFunctions.FormattingEnabled = true;
this.cbFunctions.Location = new System.Drawing.Point(343, 484);
this.cbFunctions.Name = "cbFunctions";
this.cbFunctions.Size = new System.Drawing.Size(168, 21);
this.cbFunctions.TabIndex = 4;
//
// lblFunctions
//
this.lblFunctions.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.lblFunctions.AutoSize = true;
this.lblFunctions.Location = new System.Drawing.Point(279, 488);
this.lblFunctions.Name = "lblFunctions";
this.lblFunctions.Size = new System.Drawing.Size(56, 13);
this.lblFunctions.TabIndex = 5;
this.lblFunctions.Text = "Functions:";
//
// AutomateForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(520, 516);
this.Controls.Add(this.lblFunctions);
this.Controls.Add(this.cbFunctions);
this.Controls.Add(this.pInput);
this.Controls.Add(this.btnRun);
this.Name = "AutomateForm";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "ShareX - Automate";
this.pInput.ResumeLayout(false);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Button btnRun;
private System.Windows.Forms.RichTextBox rtbInput;
private System.Windows.Forms.Panel pInput;
private System.Windows.Forms.ComboBox cbFunctions;
private System.Windows.Forms.Label lblFunctions;
}
}

View file

@ -0,0 +1,140 @@
#region License Information (GPL v3)
/*
ShareX - A program that allows you to take screenshots and share any file type
Copyright © 2007-2015 ShareX Developers
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
Optionally you can also view the license at <http://www.gnu.org/licenses/>.
*/
#endregion License Information (GPL v3)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
namespace ShareX.HelpersLib
{
public partial class AutomateForm : Form
{
private FunctionManager functionManager = new FunctionManager();
private Tokenizer tokenizer = new Tokenizer();
private bool isWorking;
public AutomateForm()
{
InitializeComponent();
Icon = ShareXResources.Icon;
tokenizer.Keywords = FunctionManager.Functions.Select(x => x.Key).ToArray();
Tokenize();
cbFunctions.Items.AddRange(tokenizer.Keywords);
}
private void rtbInput_TextChanged(object sender, EventArgs e)
{
Tokenize();
}
private void Tokenize()
{
if (!string.IsNullOrEmpty(rtbInput.Text))
{
List<Token> tokens = tokenizer.Tokenize(rtbInput.Text);
SyntaxHighlighting(tokens);
}
}
private void SyntaxHighlighting(List<Token> tokens)
{
int start = rtbInput.SelectionStart;
int length = rtbInput.SelectionLength;
rtbInput.BeginUpdate();
foreach (Token token in tokens)
{
Color color;
switch (token.Type)
{
default:
continue;
case TokenType.Symbol:
color = Color.Red;
break;
case TokenType.Literal:
color = Color.Brown;
break;
case TokenType.Identifier:
color = Color.DarkBlue;
break;
case TokenType.Numeric:
color = Color.Blue;
break;
case TokenType.Keyword:
color = Color.Green;
break;
}
rtbInput.SelectionStart = token.Position;
rtbInput.SelectionLength = token.Text.Length;
rtbInput.SelectionColor = color;
}
rtbInput.Select(start, length);
rtbInput.EndUpdate();
}
private void btnRun_Click(object sender, EventArgs e)
{
if (!isWorking)
{
isWorking = true;
btnRun.Enabled = false;
string[] lines = rtbInput.Lines;
BackgroundWorker bw = new BackgroundWorker();
bw.DoWork += new DoWorkEventHandler(bw_DoWork);
bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);
bw.RunWorkerAsync(lines);
}
}
private void bw_DoWork(object sender, DoWorkEventArgs e)
{
string[] lines = e.Argument as string[];
try
{
functionManager.Compile(lines);
functionManager.Run();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
isWorking = false;
btnRun.Enabled = true;
}
}
}

View file

@ -0,0 +1,144 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="rtbInput.Text" xml:space="preserve">
<value>Wait 2000
Goto TestFunction
5 KeyPress key_z
3 Goto MyFunction
KeyPress return
Func TestFunction
KeyDown space
KeyUp space
KeyPress key_a
KeyPressText "Test :)"
MouseMove 300 250
MouseDown left
MouseUp left
MouseClick right
Wait 500
MouseClick 100 450 left
MouseWheel 120
Func MyFunction
Wait 1000
KeyPressText "123"</value>
</data>
</root>

View file

@ -0,0 +1,207 @@
#region License Information (GPL v3)
/*
ShareX - A program that allows you to take screenshots and share any file type
Copyright © 2007-2015 ShareX Developers
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
Optionally you can also view the license at <http://www.gnu.org/licenses/>.
*/
#endregion License Information (GPL v3)
using System;
using System.Threading;
using System.Windows.Forms;
namespace ShareX.HelpersLib
{
public class Function
{
public string Name { get; set; }
public string[] Parameters { get; set; }
public int Loop { get; set; }
public FunctionManager FunctionManager { protected get; set; }
public Function()
{
Loop = 1;
}
public void Run()
{
Console.WriteLine(string.Format("{0}({1})", Name, string.Join(", ", Parameters)));
for (int i = 0; i < Loop; i++)
{
Method();
}
}
public virtual void Prepare()
{
}
protected virtual void Method()
{
}
}
public class Function_Goto : Function
{
public override void Prepare()
{
int index;
if (!int.TryParse(Parameters[0], out index))
{
index = FunctionManager.FindFunctionIndex(Parameters[0]);
if (index > -1)
{
Parameters[0] = (index + 1).ToString();
}
}
}
protected override void Method()
{
int lineIndex;
if (int.TryParse(Parameters[0], out lineIndex) && lineIndex > 0)
{
FunctionManager.Run(lineIndex);
}
}
}
public class Function_Wait : Function
{
protected override void Method()
{
int delay;
if (int.TryParse(Parameters[0], out delay))
{
Thread.Sleep(delay);
}
}
}
public class Function_KeyDown : Function
{
protected override void Method()
{
VirtualKeyCode keyCode = (VirtualKeyCode)Enum.Parse(typeof(VirtualKeyCode), Parameters[0], true);
InputHelpers.SendKeyDown(keyCode);
}
}
public class Function_KeyUp : Function
{
protected override void Method()
{
VirtualKeyCode keyCode = (VirtualKeyCode)Enum.Parse(typeof(VirtualKeyCode), Parameters[0], true);
InputHelpers.SendKeyUp(keyCode);
}
}
public class Function_KeyPress : Function
{
protected override void Method()
{
VirtualKeyCode keyCode = (VirtualKeyCode)Enum.Parse(typeof(VirtualKeyCode), Parameters[0], true);
InputHelpers.SendKeyPress(keyCode);
}
}
public class Function_KeyPressText : Function
{
protected override void Method()
{
InputHelpers.SendKeyPressText(Parameters[0]);
}
}
public class Function_MouseDown : Function
{
protected override void Method()
{
MouseButtons button = (MouseButtons)Enum.Parse(typeof(MouseButtons), Parameters[0], true);
InputHelpers.SendMouseDown(button);
}
}
public class Function_MouseUp : Function
{
protected override void Method()
{
MouseButtons button = (MouseButtons)Enum.Parse(typeof(MouseButtons), Parameters[0], true);
InputHelpers.SendMouseUp(button);
}
}
public class Function_MouseClick : Function
{
protected override void Method()
{
MouseButtons button;
if (Parameters.Length == 3)
{
int x, y;
if (int.TryParse(Parameters[0], out x) && int.TryParse(Parameters[1], out y))
{
button = (MouseButtons)Enum.Parse(typeof(MouseButtons), Parameters[2], true);
InputHelpers.SendMouseClick(x, y, button);
}
}
else
{
button = (MouseButtons)Enum.Parse(typeof(MouseButtons), Parameters[0], true);
InputHelpers.SendMouseClick(button);
}
}
}
public class Function_MouseMove : Function
{
protected override void Method()
{
int x, y;
if (int.TryParse(Parameters[0], out x) && int.TryParse(Parameters[1], out y))
{
InputHelpers.SendMouseMove(x, y);
}
}
}
public class Function_MouseWheel : Function
{
protected override void Method()
{
int delta;
if (int.TryParse(Parameters[0], out delta))
{
InputHelpers.SendMouseWheel(delta);
}
}
}
}

View file

@ -0,0 +1,163 @@
#region License Information (GPL v3)
/*
ShareX - A program that allows you to take screenshots and share any file type
Copyright © 2007-2015 ShareX Developers
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
Optionally you can also view the license at <http://www.gnu.org/licenses/>.
*/
#endregion License Information (GPL v3)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
namespace ShareX.HelpersLib
{
public class FunctionManager
{
public static readonly Dictionary<string, Type> Functions = new Dictionary<string, Type>()
{
{ "Func", typeof(Function) },
{ "Goto", typeof(Function_Goto) },
{ "Wait", typeof(Function_Wait) },
{ "KeyDown", typeof(Function_KeyDown) },
{ "KeyUp", typeof(Function_KeyDown) },
{ "KeyPress", typeof(Function_KeyPress) },
{ "KeyPressText", typeof(Function_KeyPressText) },
{ "MouseDown", typeof(Function_MouseDown) },
{ "MouseUp", typeof(Function_MouseUp) },
{ "MouseClick", typeof(Function_MouseClick) },
{ "MouseMove", typeof(Function_MouseMove) },
{ "MouseWheel", typeof(Function_MouseWheel) }
};
public List<Function> FunctionList { get; private set; }
public int LineDelay { get; set; }
private bool stopRequest;
public Function GetFunction(string name, string[] parameters)
{
if (Functions.ContainsKey(name))
{
Function func = (Function)Activator.CreateInstance(Functions[name]);
func.Name = name;
func.Parameters = parameters;
return func;
}
return null;
}
public int FindFunctionIndex(string name)
{
for (int i = 0; i < FunctionList.Count; i++)
{
Function function = FunctionList[i];
if (function != null && function.GetType() == typeof(Function) && function.Parameters[0].
Equals(name, StringComparison.InvariantCultureIgnoreCase))
{
return i;
}
}
return -1;
}
public bool Compile(string[] lines)
{
FunctionList = new List<Function>();
foreach (string line in lines)
{
if (!string.IsNullOrEmpty(line))
{
Tokenizer tokenizer = new Tokenizer();
tokenizer.AutoParseLiteral = true;
tokenizer.Keywords = FunctionManager.Functions.Select(x => x.Key).ToArray();
List<Token> tokens = tokenizer.Tokenize(line);
int loop = 1;
if (tokens[0].Type == TokenType.Numeric)
{
loop = int.Parse(tokens[0].Text);
tokens.RemoveAt(0);
}
if (tokens[0].Type == TokenType.Keyword)
{
string name = tokens[0].Text;
string[] parameters = tokens.Skip(1).Select(x => x.Text).ToArray();
Function tempFunction = GetFunction(name, parameters);
if (tempFunction != null)
{
tempFunction.FunctionManager = this;
tempFunction.Loop = loop;
FunctionList.Add(tempFunction);
continue;
}
}
}
FunctionList.Add(null);
}
foreach (Function function in FunctionList)
{
function.Prepare();
}
return true;
}
public void Run(int startIndex = 0)
{
if (FunctionList != null)
{
Function function;
for (int i = startIndex; i < FunctionList.Count && !stopRequest; i++)
{
function = FunctionList[i];
if (function == null)
{
break;
}
function.Run();
if (LineDelay > 0)
{
Thread.Sleep(LineDelay);
}
}
}
}
public void Stop()
{
stopRequest = true;
}
}
}

View file

@ -0,0 +1,120 @@
#region License Information (GPL v3)
/*
ShareX - A program that allows you to take screenshots and share any file type
Copyright © 2007-2015 ShareX Developers
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
Optionally you can also view the license at <http://www.gnu.org/licenses/>.
*/
#endregion License Information (GPL v3)
using System.Drawing;
using System.Windows.Forms;
namespace ShareX.HelpersLib
{
public static class InputHelpers
{
public static bool SendKeyDown(VirtualKeyCode keyCode)
{
InputManager inputManager = new InputManager();
inputManager.AddKeyDown(keyCode);
return inputManager.SendInputs();
}
public static bool SendKeyUp(VirtualKeyCode keyCode)
{
InputManager inputManager = new InputManager();
inputManager.AddKeyUp(keyCode);
return inputManager.SendInputs();
}
public static bool SendKeyPress(VirtualKeyCode keyCode)
{
InputManager inputManager = new InputManager();
inputManager.AddKeyPress(keyCode);
return inputManager.SendInputs();
}
public static bool SendKeyPressModifiers(VirtualKeyCode keyCode, params VirtualKeyCode[] modifiers)
{
InputManager inputManager = new InputManager();
inputManager.AddKeyPressModifiers(keyCode, modifiers);
return inputManager.SendInputs();
}
public static bool SendKeyPressText(string text)
{
InputManager inputManager = new InputManager();
inputManager.AddKeyPressText(text);
return inputManager.SendInputs();
}
public static bool SendMouseDown(MouseButtons button = MouseButtons.Left)
{
InputManager inputManager = new InputManager();
inputManager.AddMouseDown(button);
return inputManager.SendInputs();
}
public static bool SendMouseUp(MouseButtons button = MouseButtons.Left)
{
InputManager inputManager = new InputManager();
inputManager.AddMouseUp(button);
return inputManager.SendInputs();
}
public static bool SendMouseClick(MouseButtons button = MouseButtons.Left)
{
InputManager inputManager = new InputManager();
inputManager.AddMouseClick(button);
return inputManager.SendInputs();
}
public static bool SendMouseClick(int x, int y, MouseButtons button = MouseButtons.Left)
{
InputManager inputManager = new InputManager();
inputManager.AddMouseClick(x, y, button);
return inputManager.SendInputs();
}
public static bool SendMouseClick(Point position, MouseButtons button = MouseButtons.Left)
{
return SendMouseClick(position.X, position.Y, button);
}
public static bool SendMouseMove(int x, int y)
{
InputManager inputManager = new InputManager();
inputManager.AddMouseMove(x, y);
return inputManager.SendInputs();
}
public static bool SendMouseMove(Point position)
{
return SendMouseMove(position.X, position.Y);
}
public static bool SendMouseWheel(int delta)
{
InputManager inputManager = new InputManager();
inputManager.AddMouseWheel(delta);
return inputManager.SendInputs();
}
}
}

View file

@ -0,0 +1,208 @@
#region License Information (GPL v3)
/*
ShareX - A program that allows you to take screenshots and share any file type
Copyright © 2007-2015 ShareX Developers
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
Optionally you can also view the license at <http://www.gnu.org/licenses/>.
*/
#endregion License Information (GPL v3)
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Runtime.InteropServices;
using System.Text;
using System.Windows.Forms;
namespace ShareX.HelpersLib
{
public class InputManager
{
public List<INPUT> InputList { get; private set; }
public bool AutoClearAfterSend { get; set; }
public InputManager()
{
InputList = new List<INPUT>();
}
public bool SendInputs()
{
INPUT[] inputList = InputList.ToArray();
uint len = (uint)inputList.Length;
uint successfulInputs = NativeMethods.SendInput(len, inputList, Marshal.SizeOf(typeof(INPUT)));
if (AutoClearAfterSend) ClearInputs();
return successfulInputs == len;
}
public void ClearInputs()
{
InputList.Clear();
}
private void AddKeyInput(VirtualKeyCode keyCode, bool isKeyUp)
{
INPUT input = new INPUT();
input.Type = InputType.InputKeyboard;
input.Data.Keyboard = new KEYBDINPUT();
input.Data.Keyboard.wVk = keyCode;
if (isKeyUp) input.Data.Keyboard.dwFlags = KeyboardEventFlags.KEYEVENTF_KEYUP;
InputList.Add(input);
}
public void AddKeyDown(VirtualKeyCode keyCode)
{
AddKeyInput(keyCode, false);
}
public void AddKeyUp(VirtualKeyCode keyCode)
{
AddKeyInput(keyCode, true);
}
public void AddKeyPress(VirtualKeyCode keyCode)
{
AddKeyInput(keyCode, false);
AddKeyInput(keyCode, true);
}
public void AddKeyPressModifiers(VirtualKeyCode keyCode, params VirtualKeyCode[] modifiers)
{
foreach (VirtualKeyCode modifier in modifiers)
{
AddKeyDown(modifier);
}
AddKeyPress(keyCode);
foreach (VirtualKeyCode modifier in modifiers)
{
AddKeyUp(modifier);
}
}
public void AddKeyPressText(string text)
{
byte[] chars = Encoding.ASCII.GetBytes(text);
for (int i = 0; i < chars.Length; i++)
{
ushort scanCode = chars[i];
INPUT input = new INPUT();
input.Type = InputType.InputKeyboard;
input.Data.Keyboard = new KEYBDINPUT();
input.Data.Keyboard.wScan = scanCode;
input.Data.Keyboard.dwFlags = KeyboardEventFlags.KEYEVENTF_UNICODE;
if ((scanCode & 0xFF00) == 0xE000) input.Data.Keyboard.dwFlags |= KeyboardEventFlags.KEYEVENTF_EXTENDEDKEY;
InputList.Add(input);
input.Data.Keyboard.dwFlags |= KeyboardEventFlags.KEYEVENTF_KEYUP;
InputList.Add(input);
}
}
private void AddMouseInput(MouseButtons button, bool isMouseUp)
{
INPUT input = new INPUT();
input.Type = InputType.InputMouse;
input.Data.Mouse = new MOUSEINPUT();
if (button == MouseButtons.Left)
{
input.Data.Mouse.dwFlags = isMouseUp ? MouseEventFlags.MOUSEEVENTF_LEFTUP : MouseEventFlags.MOUSEEVENTF_LEFTDOWN;
}
else if (button == MouseButtons.Right)
{
input.Data.Mouse.dwFlags = isMouseUp ? MouseEventFlags.MOUSEEVENTF_RIGHTUP : MouseEventFlags.MOUSEEVENTF_RIGHTDOWN;
}
else if (button == MouseButtons.Middle)
{
input.Data.Mouse.dwFlags = isMouseUp ? MouseEventFlags.MOUSEEVENTF_MIDDLEUP : MouseEventFlags.MOUSEEVENTF_MIDDLEDOWN;
}
else if (button == MouseButtons.XButton1)
{
input.Data.Mouse.mouseData = (uint)MouseEventDataXButtons.XBUTTON1;
input.Data.Mouse.dwFlags = isMouseUp ? MouseEventFlags.MOUSEEVENTF_XUP : MouseEventFlags.MOUSEEVENTF_XDOWN;
}
else if (button == MouseButtons.XButton2)
{
input.Data.Mouse.mouseData = (uint)MouseEventDataXButtons.XBUTTON2;
input.Data.Mouse.dwFlags = isMouseUp ? MouseEventFlags.MOUSEEVENTF_XUP : MouseEventFlags.MOUSEEVENTF_XDOWN;
}
InputList.Add(input);
}
public void AddMouseDown(MouseButtons button = MouseButtons.Left)
{
AddMouseInput(button, false);
}
public void AddMouseUp(MouseButtons button = MouseButtons.Left)
{
AddMouseInput(button, true);
}
public void AddMouseClick(MouseButtons button = MouseButtons.Left)
{
AddMouseDown(button);
AddMouseUp(button);
}
public void AddMouseClick(int x, int y, MouseButtons button = MouseButtons.Left)
{
AddMouseMove(x, y);
AddMouseClick(button);
}
public void AddMouseClick(Point position, MouseButtons button = MouseButtons.Left)
{
AddMouseMove(position);
AddMouseClick(button);
}
public void AddMouseMove(int x, int y)
{
INPUT input = new INPUT();
input.Type = InputType.InputMouse;
input.Data.Mouse = new MOUSEINPUT();
input.Data.Mouse.dx = (int)Math.Ceiling((double)(x * 65535) / NativeMethods.GetSystemMetrics(SystemMetric.SM_CXSCREEN)) + 1;
input.Data.Mouse.dy = (int)Math.Ceiling((double)(y * 65535) / NativeMethods.GetSystemMetrics(SystemMetric.SM_CYSCREEN)) + 1;
input.Data.Mouse.dwFlags = MouseEventFlags.MOUSEEVENTF_MOVE | MouseEventFlags.MOUSEEVENTF_ABSOLUTE;
InputList.Add(input);
}
public void AddMouseMove(Point position)
{
AddMouseMove(position.X, position.Y);
}
public void AddMouseWheel(int delta)
{
INPUT input = new INPUT();
input.Type = InputType.InputMouse;
input.Data.Mouse = new MOUSEINPUT();
input.Data.Mouse.dwFlags = MouseEventFlags.MOUSEEVENTF_WHEEL;
input.Data.Mouse.mouseData = (uint)delta;
InputList.Add(input);
}
}
}

View file

@ -2032,4 +2032,739 @@ public enum CompositionAction : uint
DWM_EC_DISABLECOMPOSITION = 0,
DWM_EC_ENABLECOMPOSITION = 1
}
public enum InputType : int
{
InputMouse,
InputKeyboard,
InputHardware
}
[Flags]
public enum MouseEventFlags : uint
{
MOUSEEVENTF_MOVE = 0x0001,
MOUSEEVENTF_LEFTDOWN = 0x0002,
MOUSEEVENTF_LEFTUP = 0x0004,
MOUSEEVENTF_RIGHTDOWN = 0x0008,
MOUSEEVENTF_RIGHTUP = 0x0010,
MOUSEEVENTF_MIDDLEDOWN = 0x0020,
MOUSEEVENTF_MIDDLEUP = 0x0040,
MOUSEEVENTF_XDOWN = 0x0080,
MOUSEEVENTF_XUP = 0x0100,
MOUSEEVENTF_WHEEL = 0x0800,
MOUSEEVENTF_VIRTUALDESK = 0x4000,
MOUSEEVENTF_ABSOLUTE = 0x8000
}
[Flags]
public enum MouseEventDataXButtons : uint
{
None = 0x00000000,
XBUTTON1 = 0x00000001,
XBUTTON2 = 0x00000002
}
[Flags]
public enum KeyboardEventFlags : uint
{
KEYEVENTF_EXTENDEDKEY = 0x0001,
KEYEVENTF_KEYUP = 0x0002,
KEYEVENTF_UNICODE = 0x0004,
KEYEVENTF_SCANCODE = 0x0008
}
public enum VirtualKeyCode : ushort
{
///<summary>
///Left mouse button
///</summary>
LBUTTON = 0x01,
///<summary>
///Right mouse button
///</summary>
RBUTTON = 0x02,
///<summary>
///Control-break processing
///</summary>
CANCEL = 0x03,
///<summary>
///Middle mouse button (three-button mouse)
///</summary>
MBUTTON = 0x04,
///<summary>
///Windows 2000/XP: X1 mouse button
///</summary>
XBUTTON1 = 0x05,
///<summary>
///Windows 2000/XP: X2 mouse button
///</summary>
XBUTTON2 = 0x06,
///<summary>
///BACKSPACE key
///</summary>
BACK = 0x08,
///<summary>
///TAB key
///</summary>
TAB = 0x09,
///<summary>
///CLEAR key
///</summary>
CLEAR = 0x0C,
///<summary>
///ENTER key
///</summary>
RETURN = 0x0D,
///<summary>
///SHIFT key
///</summary>
SHIFT = 0x10,
///<summary>
///CTRL key
///</summary>
CONTROL = 0x11,
///<summary>
///ALT key
///</summary>
MENU = 0x12,
///<summary>
///PAUSE key
///</summary>
PAUSE = 0x13,
///<summary>
///CAPS LOCK key
///</summary>
CAPITAL = 0x14,
///<summary>
///Input Method Editor (IME) Kana mode
///</summary>
KANA = 0x15,
///<summary>
///IME Hangul mode
///</summary>
HANGUL = 0x15,
///<summary>
///IME Junja mode
///</summary>
JUNJA = 0x17,
///<summary>
///IME final mode
///</summary>
FINAL = 0x18,
///<summary>
///IME Hanja mode
///</summary>
HANJA = 0x19,
///<summary>
///IME Kanji mode
///</summary>
KANJI = 0x19,
///<summary>
///ESC key
///</summary>
ESCAPE = 0x1B,
///<summary>
///IME convert
///</summary>
CONVERT = 0x1C,
///<summary>
///IME nonconvert
///</summary>
NONCONVERT = 0x1D,
///<summary>
///IME accept
///</summary>
ACCEPT = 0x1E,
///<summary>
///IME mode change request
///</summary>
MODECHANGE = 0x1F,
///<summary>
///SPACEBAR
///</summary>
SPACE = 0x20,
///<summary>
///PAGE UP key
///</summary>
PRIOR = 0x21,
///<summary>
///PAGE DOWN key
///</summary>
NEXT = 0x22,
///<summary>
///END key
///</summary>
END = 0x23,
///<summary>
///HOME key
///</summary>
HOME = 0x24,
///<summary>
///LEFT ARROW key
///</summary>
LEFT = 0x25,
///<summary>
///UP ARROW key
///</summary>
UP = 0x26,
///<summary>
///RIGHT ARROW key
///</summary>
RIGHT = 0x27,
///<summary>
///DOWN ARROW key
///</summary>
DOWN = 0x28,
///<summary>
///SELECT key
///</summary>
SELECT = 0x29,
///<summary>
///PRINT key
///</summary>
PRINT = 0x2A,
///<summary>
///EXECUTE key
///</summary>
EXECUTE = 0x2B,
///<summary>
///PRINT SCREEN key
///</summary>
SNAPSHOT = 0x2C,
///<summary>
///INS key
///</summary>
INSERT = 0x2D,
///<summary>
///DEL key
///</summary>
DELETE = 0x2E,
///<summary>
///HELP key
///</summary>
HELP = 0x2F,
///<summary>
///0 key
///</summary>
KEY_0 = 0x30,
///<summary>
///1 key
///</summary>
KEY_1 = 0x31,
///<summary>
///2 key
///</summary>
KEY_2 = 0x32,
///<summary>
///3 key
///</summary>
KEY_3 = 0x33,
///<summary>
///4 key
///</summary>
KEY_4 = 0x34,
///<summary>
///5 key
///</summary>
KEY_5 = 0x35,
///<summary>
///6 key
///</summary>
KEY_6 = 0x36,
///<summary>
///7 key
///</summary>
KEY_7 = 0x37,
///<summary>
///8 key
///</summary>
KEY_8 = 0x38,
///<summary>
///9 key
///</summary>
KEY_9 = 0x39,
///<summary>
///A key
///</summary>
KEY_A = 0x41,
///<summary>
///B key
///</summary>
KEY_B = 0x42,
///<summary>
///C key
///</summary>
KEY_C = 0x43,
///<summary>
///D key
///</summary>
KEY_D = 0x44,
///<summary>
///E key
///</summary>
KEY_E = 0x45,
///<summary>
///F key
///</summary>
KEY_F = 0x46,
///<summary>
///G key
///</summary>
KEY_G = 0x47,
///<summary>
///H key
///</summary>
KEY_H = 0x48,
///<summary>
///I key
///</summary>
KEY_I = 0x49,
///<summary>
///J key
///</summary>
KEY_J = 0x4A,
///<summary>
///K key
///</summary>
KEY_K = 0x4B,
///<summary>
///L key
///</summary>
KEY_L = 0x4C,
///<summary>
///M key
///</summary>
KEY_M = 0x4D,
///<summary>
///N key
///</summary>
KEY_N = 0x4E,
///<summary>
///O key
///</summary>
KEY_O = 0x4F,
///<summary>
///P key
///</summary>
KEY_P = 0x50,
///<summary>
///Q key
///</summary>
KEY_Q = 0x51,
///<summary>
///R key
///</summary>
KEY_R = 0x52,
///<summary>
///S key
///</summary>
KEY_S = 0x53,
///<summary>
///T key
///</summary>
KEY_T = 0x54,
///<summary>
///U key
///</summary>
KEY_U = 0x55,
///<summary>
///V key
///</summary>
KEY_V = 0x56,
///<summary>
///W key
///</summary>
KEY_W = 0x57,
///<summary>
///X key
///</summary>
KEY_X = 0x58,
///<summary>
///Y key
///</summary>
KEY_Y = 0x59,
///<summary>
///Z key
///</summary>
KEY_Z = 0x5A,
///<summary>
///Left Windows key (Microsoft Natural keyboard)
///</summary>
LWIN = 0x5B,
///<summary>
///Right Windows key (Natural keyboard)
///</summary>
RWIN = 0x5C,
///<summary>
///Applications key (Natural keyboard)
///</summary>
APPS = 0x5D,
///<summary>
///Computer Sleep key
///</summary>
SLEEP = 0x5F,
///<summary>
///Numeric keypad 0 key
///</summary>
NUMPAD0 = 0x60,
///<summary>
///Numeric keypad 1 key
///</summary>
NUMPAD1 = 0x61,
///<summary>
///Numeric keypad 2 key
///</summary>
NUMPAD2 = 0x62,
///<summary>
///Numeric keypad 3 key
///</summary>
NUMPAD3 = 0x63,
///<summary>
///Numeric keypad 4 key
///</summary>
NUMPAD4 = 0x64,
///<summary>
///Numeric keypad 5 key
///</summary>
NUMPAD5 = 0x65,
///<summary>
///Numeric keypad 6 key
///</summary>
NUMPAD6 = 0x66,
///<summary>
///Numeric keypad 7 key
///</summary>
NUMPAD7 = 0x67,
///<summary>
///Numeric keypad 8 key
///</summary>
NUMPAD8 = 0x68,
///<summary>
///Numeric keypad 9 key
///</summary>
NUMPAD9 = 0x69,
///<summary>
///Multiply key
///</summary>
MULTIPLY = 0x6A,
///<summary>
///Add key
///</summary>
ADD = 0x6B,
///<summary>
///Separator key
///</summary>
SEPARATOR = 0x6C,
///<summary>
///Subtract key
///</summary>
SUBTRACT = 0x6D,
///<summary>
///Decimal key
///</summary>
DECIMAL = 0x6E,
///<summary>
///Divide key
///</summary>
DIVIDE = 0x6F,
///<summary>
///F1 key
///</summary>
F1 = 0x70,
///<summary>
///F2 key
///</summary>
F2 = 0x71,
///<summary>
///F3 key
///</summary>
F3 = 0x72,
///<summary>
///F4 key
///</summary>
F4 = 0x73,
///<summary>
///F5 key
///</summary>
F5 = 0x74,
///<summary>
///F6 key
///</summary>
F6 = 0x75,
///<summary>
///F7 key
///</summary>
F7 = 0x76,
///<summary>
///F8 key
///</summary>
F8 = 0x77,
///<summary>
///F9 key
///</summary>
F9 = 0x78,
///<summary>
///F10 key
///</summary>
F10 = 0x79,
///<summary>
///F11 key
///</summary>
F11 = 0x7A,
///<summary>
///F12 key
///</summary>
F12 = 0x7B,
///<summary>
///F13 key
///</summary>
F13 = 0x7C,
///<summary>
///F14 key
///</summary>
F14 = 0x7D,
///<summary>
///F15 key
///</summary>
F15 = 0x7E,
///<summary>
///F16 key
///</summary>
F16 = 0x7F,
///<summary>
///F17 key
///</summary>
F17 = 0x80,
///<summary>
///F18 key
///</summary>
F18 = 0x81,
///<summary>
///F19 key
///</summary>
F19 = 0x82,
///<summary>
///F20 key
///</summary>
F20 = 0x83,
///<summary>
///F21 key
///</summary>
F21 = 0x84,
///<summary>
///F22 key, (PPC only) Key used to lock device.
///</summary>
F22 = 0x85,
///<summary>
///F23 key
///</summary>
F23 = 0x86,
///<summary>
///F24 key
///</summary>
F24 = 0x87,
///<summary>
///NUM LOCK key
///</summary>
NUMLOCK = 0x90,
///<summary>
///SCROLL LOCK key
///</summary>
SCROLL = 0x91,
///<summary>
///Left SHIFT key
///</summary>
LSHIFT = 0xA0,
///<summary>
///Right SHIFT key
///</summary>
RSHIFT = 0xA1,
///<summary>
///Left CONTROL key
///</summary>
LCONTROL = 0xA2,
///<summary>
///Right CONTROL key
///</summary>
RCONTROL = 0xA3,
///<summary>
///Left MENU key
///</summary>
LMENU = 0xA4,
///<summary>
///Right MENU key
///</summary>
RMENU = 0xA5,
///<summary>
///Windows 2000/XP: Browser Back key
///</summary>
BROWSER_BACK = 0xA6,
///<summary>
///Windows 2000/XP: Browser Forward key
///</summary>
BROWSER_FORWARD = 0xA7,
///<summary>
///Windows 2000/XP: Browser Refresh key
///</summary>
BROWSER_REFRESH = 0xA8,
///<summary>
///Windows 2000/XP: Browser Stop key
///</summary>
BROWSER_STOP = 0xA9,
///<summary>
///Windows 2000/XP: Browser Search key
///</summary>
BROWSER_SEARCH = 0xAA,
///<summary>
///Windows 2000/XP: Browser Favorites key
///</summary>
BROWSER_FAVORITES = 0xAB,
///<summary>
///Windows 2000/XP: Browser Start and Home key
///</summary>
BROWSER_HOME = 0xAC,
///<summary>
///Windows 2000/XP: Volume Mute key
///</summary>
VOLUME_MUTE = 0xAD,
///<summary>
///Windows 2000/XP: Volume Down key
///</summary>
VOLUME_DOWN = 0xAE,
///<summary>
///Windows 2000/XP: Volume Up key
///</summary>
VOLUME_UP = 0xAF,
///<summary>
///Windows 2000/XP: Next Track key
///</summary>
MEDIA_NEXT_TRACK = 0xB0,
///<summary>
///Windows 2000/XP: Previous Track key
///</summary>
MEDIA_PREV_TRACK = 0xB1,
///<summary>
///Windows 2000/XP: Stop Media key
///</summary>
MEDIA_STOP = 0xB2,
///<summary>
///Windows 2000/XP: Play/Pause Media key
///</summary>
MEDIA_PLAY_PAUSE = 0xB3,
///<summary>
///Windows 2000/XP: Start Mail key
///</summary>
LAUNCH_MAIL = 0xB4,
///<summary>
///Windows 2000/XP: Select Media key
///</summary>
LAUNCH_MEDIA_SELECT = 0xB5,
///<summary>
///Windows 2000/XP: Start Application 1 key
///</summary>
LAUNCH_APP1 = 0xB6,
///<summary>
///Windows 2000/XP: Start Application 2 key
///</summary>
LAUNCH_APP2 = 0xB7,
///<summary>
///Used for miscellaneous characters; it can vary by keyboard.
///</summary>
OEM_1 = 0xBA,
///<summary>
///Windows 2000/XP: For any country/region, the '+' key
///</summary>
OEM_PLUS = 0xBB,
///<summary>
///Windows 2000/XP: For any country/region, the ',' key
///</summary>
OEM_COMMA = 0xBC,
///<summary>
///Windows 2000/XP: For any country/region, the '-' key
///</summary>
OEM_MINUS = 0xBD,
///<summary>
///Windows 2000/XP: For any country/region, the '.' key
///</summary>
OEM_PERIOD = 0xBE,
///<summary>
///Used for miscellaneous characters; it can vary by keyboard.
///</summary>
OEM_2 = 0xBF,
///<summary>
///Used for miscellaneous characters; it can vary by keyboard.
///</summary>
OEM_3 = 0xC0,
///<summary>
///Used for miscellaneous characters; it can vary by keyboard.
///</summary>
OEM_4 = 0xDB,
///<summary>
///Used for miscellaneous characters; it can vary by keyboard.
///</summary>
OEM_5 = 0xDC,
///<summary>
///Used for miscellaneous characters; it can vary by keyboard.
///</summary>
OEM_6 = 0xDD,
///<summary>
///Used for miscellaneous characters; it can vary by keyboard.
///</summary>
OEM_7 = 0xDE,
///<summary>
///Used for miscellaneous characters; it can vary by keyboard.
///</summary>
OEM_8 = 0xDF,
///<summary>
///Windows 2000/XP: Either the angle bracket key or the backslash key on the RT 102-key keyboard
///</summary>
OEM_102 = 0xE2,
///<summary>
///Windows 95/98/Me, Windows NT 4.0, Windows 2000/XP: IME PROCESS key
///</summary>
PROCESSKEY = 0xE5,
///<summary>
///Windows 2000/XP: Used to pass Unicode characters as if they were keystrokes.
///The VK_PACKET key is the low word of a 32-bit Virtual Key value used for non-keyboard input methods. For more information,
///see Remark in KEYBDINPUT, SendInput, WM_KEYDOWN, and WM_KEYUP
///</summary>
PACKET = 0xE7,
///<summary>
///Attn key
///</summary>
ATTN = 0xF6,
///<summary>
///CrSel key
///</summary>
CRSEL = 0xF7,
///<summary>
///ExSel key
///</summary>
EXSEL = 0xF8,
///<summary>
///Erase EOF key
///</summary>
EREOF = 0xF9,
///<summary>
///Play key
///</summary>
PLAY = 0xFA,
///<summary>
///Zoom key
///</summary>
ZOOM = 0xFB,
///<summary>
///Reserved
///</summary>
NONAME = 0xFC,
///<summary>
///PA1 key
///</summary>
PA1 = 0xFD,
///<summary>
///Clear key
///</summary>
OEM_CLEAR = 0xFE
}
}

View file

@ -183,6 +183,12 @@ public static partial class NativeMethods
[DllImport("user32.dll")]
public static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC);
[DllImport("user32.dll")]
public static extern uint SendInput(uint nInputs, ref INPUT pInputs, int cbSize);
[DllImport("user32.dll")]
public static extern uint SendInput(uint nInputs, [MarshalAs(UnmanagedType.LPArray), In] INPUT[] pInputs, int cbSize);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);

View file

@ -543,4 +543,52 @@ public BITMAPINFOHEADER(int width, int height, ushort bitCount)
biClrImportant = 0;
}
}
public struct INPUT
{
public InputType Type;
public InputUnion Data;
}
[StructLayout(LayoutKind.Explicit)]
public struct InputUnion
{
[FieldOffset(0)]
public MOUSEINPUT Mouse;
[FieldOffset(0)]
public KEYBDINPUT Keyboard;
[FieldOffset(0)]
public HARDWAREINPUT Hardware;
}
[StructLayout(LayoutKind.Sequential)]
public struct MOUSEINPUT
{
public int dx;
public int dy;
public uint mouseData;
public MouseEventFlags dwFlags;
public uint time;
public IntPtr dwExtraInfo;
}
[StructLayout(LayoutKind.Sequential)]
public struct KEYBDINPUT
{
public VirtualKeyCode wVk;
public ushort wScan;
public KeyboardEventFlags dwFlags;
public uint time;
public IntPtr dwExtraInfo;
}
[StructLayout(LayoutKind.Sequential)]
public struct HARDWAREINPUT
{
public int uMsg;
public short wParamL;
public short wParamH;
}
}

View file

@ -77,6 +77,14 @@
</ItemGroup>
<ItemGroup>
<Compile Include="ActionsCodeMenuEntry.cs" />
<Compile Include="Automate\AutomateForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Automate\AutomateForm.Designer.cs">
<DependentUpon>AutomateForm.cs</DependentUpon>
</Compile>
<Compile Include="Automate\Function.cs" />
<Compile Include="Automate\FunctionManager.cs" />
<Compile Include="ClipboardFormat.cs" />
<Compile Include="CodeMenu.cs" />
<Compile Include="ColorMatrixManager.cs" />
@ -125,6 +133,8 @@
<Compile Include="Helpers\URLHelpers.cs" />
<Compile Include="Helpers\MathHelpers.cs" />
<Compile Include="CodeMenuEntry.cs" />
<Compile Include="Input\InputHelpers.cs" />
<Compile Include="Input\InputManager.cs" />
<Compile Include="ListViewColumnSorter.cs" />
<Compile Include="MimeTypes.cs" />
<Compile Include="Native\LayeredForm.cs">
@ -365,6 +375,9 @@
<Compile Include="WindowState.cs" />
<Compile Include="XmlColor.cs" />
<Compile Include="XmlFont.cs" />
<EmbeddedResource Include="Automate\AutomateForm.resx">
<DependentUpon>AutomateForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Colors\ColorPickerForm.de.resx">
<DependentUpon>ColorPickerForm.cs</DependentUpon>
</EmbeddedResource>

View file

@ -40,7 +40,7 @@ namespace ShareX.UploadersLib
{
public class Uploader
{
private static readonly string UserAgent = "ShareX " + Application.ProductVersion;
private static readonly string UserAgent = "ShareX";
public delegate void ProgressEventHandler(ProgressManager progress);
public event ProgressEventHandler ProgressChanged;

View file

@ -81,6 +81,7 @@ private void InitializeComponent()
this.tsmiFTPClient = new System.Windows.Forms.ToolStripMenuItem();
this.tsmiTweetMessage = new System.Windows.Forms.ToolStripMenuItem();
this.tsmiMonitorTest = new System.Windows.Forms.ToolStripMenuItem();
this.tsmiAutomate = new System.Windows.Forms.ToolStripMenuItem();
this.tssMain1 = new System.Windows.Forms.ToolStripSeparator();
this.tsddbAfterCaptureTasks = new System.Windows.Forms.ToolStripDropDownButton();
this.tsddbAfterUploadTasks = new System.Windows.Forms.ToolStripDropDownButton();
@ -562,6 +563,7 @@ private void InitializeComponent()
this.tsmiDNSChanger,
this.tsmiQRCode,
this.tsmiRuler,
this.tsmiAutomate,
this.tsmiIndexFolder,
this.tsmiFTPClient,
this.tsmiTweetMessage,
@ -654,6 +656,13 @@ private void InitializeComponent()
resources.ApplyResources(this.tsmiMonitorTest, "tsmiMonitorTest");
this.tsmiMonitorTest.Click += new System.EventHandler(this.tsmiMonitorTest_Click);
//
// tsmiAutomate
//
this.tsmiAutomate.Image = global::ShareX.Properties.Resources.robot;
this.tsmiAutomate.Name = "tsmiAutomate";
resources.ApplyResources(this.tsmiAutomate, "tsmiAutomate");
this.tsmiAutomate.Click += new System.EventHandler(this.tsmiAutomate_Click);
//
// tssMain1
//
this.tssMain1.Margin = new System.Windows.Forms.Padding(0, 3, 0, 3);
@ -1927,5 +1936,6 @@ private void InitializeComponent()
private System.Windows.Forms.ToolStripMenuItem tsmiTrayScreenColorPicker;
public System.Windows.Forms.ToolStripMenuItem tsmiTrayRecentItems;
private System.Windows.Forms.ContextMenuStrip cmsTray;
private System.Windows.Forms.ToolStripMenuItem tsmiAutomate;
}
}

View file

@ -900,6 +900,11 @@ private void tsmiRuler_Click(object sender, EventArgs e)
TaskHelpers.OpenRuler();
}
private void tsmiAutomate_Click(object sender, EventArgs e)
{
TaskHelpers.OpenAutomate();
}
private void tsmiIndexFolder_Click(object sender, EventArgs e)
{
TaskHelpers.OpenIndexFolder();

View file

@ -180,45 +180,6 @@
<data name="&gt;&gt;lblSplitter.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="chFilename.Text" xml:space="preserve">
<value>Filename</value>
</data>
<data name="chFilename.Width" type="System.Int32, mscorlib">
<value>150</value>
</data>
<data name="chStatus.Text" xml:space="preserve">
<value>Status</value>
</data>
<data name="chProgress.Text" xml:space="preserve">
<value>Progress</value>
</data>
<data name="chProgress.Width" type="System.Int32, mscorlib">
<value>125</value>
</data>
<data name="chSpeed.Text" xml:space="preserve">
<value>Speed</value>
</data>
<data name="chSpeed.Width" type="System.Int32, mscorlib">
<value>75</value>
</data>
<data name="chElapsed.Text" xml:space="preserve">
<value>Elapsed</value>
</data>
<data name="chElapsed.Width" type="System.Int32, mscorlib">
<value>45</value>
</data>
<data name="chRemaining.Text" xml:space="preserve">
<value>Remaining</value>
</data>
<data name="chRemaining.Width" type="System.Int32, mscorlib">
<value>45</value>
</data>
<data name="chURL.Text" xml:space="preserve">
<value>URL</value>
</data>
<data name="chURL.Width" type="System.Int32, mscorlib">
<value>145</value>
</data>
<data name="lvUploads.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
@ -315,6 +276,45 @@
<data name="&gt;&gt;scMain.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="chFilename.Text" xml:space="preserve">
<value>Filename</value>
</data>
<data name="chFilename.Width" type="System.Int32, mscorlib">
<value>150</value>
</data>
<data name="chStatus.Text" xml:space="preserve">
<value>Status</value>
</data>
<data name="chProgress.Text" xml:space="preserve">
<value>Progress</value>
</data>
<data name="chProgress.Width" type="System.Int32, mscorlib">
<value>125</value>
</data>
<data name="chSpeed.Text" xml:space="preserve">
<value>Speed</value>
</data>
<data name="chSpeed.Width" type="System.Int32, mscorlib">
<value>75</value>
</data>
<data name="chElapsed.Text" xml:space="preserve">
<value>Elapsed</value>
</data>
<data name="chElapsed.Width" type="System.Int32, mscorlib">
<value>45</value>
</data>
<data name="chRemaining.Text" xml:space="preserve">
<value>Remaining</value>
</data>
<data name="chRemaining.Width" type="System.Int32, mscorlib">
<value>45</value>
</data>
<data name="chURL.Text" xml:space="preserve">
<value>URL</value>
</data>
<data name="chURL.Width" type="System.Int32, mscorlib">
<value>145</value>
</data>
<metadata name="tsMain.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
@ -324,6 +324,306 @@
<data name="tsMain.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Left</value>
</data>
<data name="tsddbCapture.ImageAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleLeft</value>
</data>
<data name="tsddbCapture.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
<value>Magenta</value>
</data>
<data name="tsddbCapture.Size" type="System.Drawing.Size, System.Drawing">
<value>147, 20</value>
</data>
<data name="tsddbCapture.Text" xml:space="preserve">
<value>Capture</value>
</data>
<data name="tsddbUpload.ImageAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleLeft</value>
</data>
<data name="tsddbUpload.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
<value>Magenta</value>
</data>
<data name="tsddbUpload.Size" type="System.Drawing.Size, System.Drawing">
<value>147, 20</value>
</data>
<data name="tsddbUpload.Text" xml:space="preserve">
<value>Upload</value>
</data>
<data name="tsddbWorkflows.ImageAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>BottomLeft</value>
</data>
<data name="tsddbWorkflows.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
<value>Magenta</value>
</data>
<data name="tsddbWorkflows.Size" type="System.Drawing.Size, System.Drawing">
<value>147, 20</value>
</data>
<data name="tsddbWorkflows.Text" xml:space="preserve">
<value>Workflows</value>
</data>
<data name="tsmiColorPicker.Size" type="System.Drawing.Size, System.Drawing">
<value>183, 22</value>
</data>
<data name="tsmiColorPicker.Text" xml:space="preserve">
<value>Color picker...</value>
</data>
<data name="tsmiScreenColorPicker.Size" type="System.Drawing.Size, System.Drawing">
<value>183, 22</value>
</data>
<data name="tsmiScreenColorPicker.Text" xml:space="preserve">
<value>Screen color picker...</value>
</data>
<data name="tsmiImageEditor.Size" type="System.Drawing.Size, System.Drawing">
<value>183, 22</value>
</data>
<data name="tsmiImageEditor.Text" xml:space="preserve">
<value>Image editor...</value>
</data>
<data name="tsmiImageEffects.Size" type="System.Drawing.Size, System.Drawing">
<value>183, 22</value>
</data>
<data name="tsmiImageEffects.Text" xml:space="preserve">
<value>Image effects...</value>
</data>
<data name="tsmiHashCheck.Size" type="System.Drawing.Size, System.Drawing">
<value>183, 22</value>
</data>
<data name="tsmiHashCheck.Text" xml:space="preserve">
<value>Hash check...</value>
</data>
<data name="tsmiDNSChanger.Size" type="System.Drawing.Size, System.Drawing">
<value>183, 22</value>
</data>
<data name="tsmiDNSChanger.Text" xml:space="preserve">
<value>DNS changer...</value>
</data>
<data name="tsmiQRCode.Size" type="System.Drawing.Size, System.Drawing">
<value>183, 22</value>
</data>
<data name="tsmiQRCode.Text" xml:space="preserve">
<value>QR code...</value>
</data>
<data name="tsmiRuler.Size" type="System.Drawing.Size, System.Drawing">
<value>183, 22</value>
</data>
<data name="tsmiRuler.Text" xml:space="preserve">
<value>Ruler...</value>
</data>
<data name="tsmiAutomate.Size" type="System.Drawing.Size, System.Drawing">
<value>183, 22</value>
</data>
<data name="tsmiAutomate.Text" xml:space="preserve">
<value>Automate...</value>
</data>
<data name="tsmiIndexFolder.Size" type="System.Drawing.Size, System.Drawing">
<value>183, 22</value>
</data>
<data name="tsmiIndexFolder.Text" xml:space="preserve">
<value>Index folder...</value>
</data>
<data name="tsmiFTPClient.Size" type="System.Drawing.Size, System.Drawing">
<value>183, 22</value>
</data>
<data name="tsmiFTPClient.Text" xml:space="preserve">
<value>FTP client...</value>
</data>
<data name="tsmiTweetMessage.Size" type="System.Drawing.Size, System.Drawing">
<value>183, 22</value>
</data>
<data name="tsmiTweetMessage.Text" xml:space="preserve">
<value>Tweet message...</value>
</data>
<data name="tsmiMonitorTest.Size" type="System.Drawing.Size, System.Drawing">
<value>183, 22</value>
</data>
<data name="tsmiMonitorTest.Text" xml:space="preserve">
<value>Monitor test...</value>
</data>
<data name="tsddbTools.ImageAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleLeft</value>
</data>
<data name="tsddbTools.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
<value>Magenta</value>
</data>
<data name="tsddbTools.Size" type="System.Drawing.Size, System.Drawing">
<value>147, 20</value>
</data>
<data name="tsddbTools.Text" xml:space="preserve">
<value>Tools</value>
</data>
<data name="tssMain1.Size" type="System.Drawing.Size, System.Drawing">
<value>147, 6</value>
</data>
<data name="tsddbAfterCaptureTasks.ImageAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleLeft</value>
</data>
<data name="tsddbAfterCaptureTasks.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
<value>Magenta</value>
</data>
<data name="tsddbAfterCaptureTasks.Size" type="System.Drawing.Size, System.Drawing">
<value>147, 20</value>
</data>
<data name="tsddbAfterCaptureTasks.Text" xml:space="preserve">
<value>After capture tasks</value>
</data>
<data name="tsddbAfterUploadTasks.ImageAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleLeft</value>
</data>
<data name="tsddbAfterUploadTasks.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
<value>Magenta</value>
</data>
<data name="tsddbAfterUploadTasks.Size" type="System.Drawing.Size, System.Drawing">
<value>147, 20</value>
</data>
<data name="tsddbAfterUploadTasks.Text" xml:space="preserve">
<value>After upload tasks</value>
</data>
<data name="tsddbDestinations.ImageAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleLeft</value>
</data>
<data name="tsddbDestinations.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
<value>Magenta</value>
</data>
<data name="tsddbDestinations.Size" type="System.Drawing.Size, System.Drawing">
<value>147, 20</value>
</data>
<data name="tsddbDestinations.Text" xml:space="preserve">
<value>Destinations</value>
</data>
<data name="tsbApplicationSettings.ImageAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleLeft</value>
</data>
<data name="tsbApplicationSettings.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
<value>Magenta</value>
</data>
<data name="tsbApplicationSettings.Size" type="System.Drawing.Size, System.Drawing">
<value>147, 20</value>
</data>
<data name="tsbApplicationSettings.Text" xml:space="preserve">
<value>Application settings...</value>
</data>
<data name="tsbTaskSettings.ImageAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleLeft</value>
</data>
<data name="tsbTaskSettings.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
<value>Magenta</value>
</data>
<data name="tsbTaskSettings.Size" type="System.Drawing.Size, System.Drawing">
<value>147, 20</value>
</data>
<data name="tsbTaskSettings.Text" xml:space="preserve">
<value>Task settings...</value>
</data>
<data name="tsbHotkeySettings.ImageAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleLeft</value>
</data>
<data name="tsbHotkeySettings.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
<value>Magenta</value>
</data>
<data name="tsbHotkeySettings.Size" type="System.Drawing.Size, System.Drawing">
<value>147, 20</value>
</data>
<data name="tsbHotkeySettings.Text" xml:space="preserve">
<value>Hotkey settings...</value>
</data>
<data name="tssMain2.Size" type="System.Drawing.Size, System.Drawing">
<value>147, 6</value>
</data>
<data name="tsbScreenshotsFolder.ImageAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleLeft</value>
</data>
<data name="tsbScreenshotsFolder.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
<value>Magenta</value>
</data>
<data name="tsbScreenshotsFolder.Size" type="System.Drawing.Size, System.Drawing">
<value>147, 20</value>
</data>
<data name="tsbScreenshotsFolder.Text" xml:space="preserve">
<value>Screenshots folder...</value>
</data>
<data name="tsbHistory.ImageAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleLeft</value>
</data>
<data name="tsbHistory.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
<value>Magenta</value>
</data>
<data name="tsbHistory.Size" type="System.Drawing.Size, System.Drawing">
<value>147, 20</value>
</data>
<data name="tsbHistory.Text" xml:space="preserve">
<value>History...</value>
</data>
<data name="tsbImageHistory.ImageAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleLeft</value>
</data>
<data name="tsbImageHistory.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
<value>Magenta</value>
</data>
<data name="tsbImageHistory.Size" type="System.Drawing.Size, System.Drawing">
<value>147, 20</value>
</data>
<data name="tsbImageHistory.Text" xml:space="preserve">
<value>Image history...</value>
</data>
<data name="tsddbDebug.ImageAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleLeft</value>
</data>
<data name="tsddbDebug.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
<value>Magenta</value>
</data>
<data name="tsddbDebug.Size" type="System.Drawing.Size, System.Drawing">
<value>147, 20</value>
</data>
<data name="tsddbDebug.Text" xml:space="preserve">
<value>Debug</value>
</data>
<data name="tsmiDonate.ImageAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleLeft</value>
</data>
<data name="tsmiDonate.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
<value>Magenta</value>
</data>
<data name="tsmiDonate.Size" type="System.Drawing.Size, System.Drawing">
<value>147, 20</value>
</data>
<data name="tsmiDonate.Text" xml:space="preserve">
<value>Donate...</value>
</data>
<data name="tsmiAbout.ImageAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleLeft</value>
</data>
<data name="tsmiAbout.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
<value>Magenta</value>
</data>
<data name="tsmiAbout.Size" type="System.Drawing.Size, System.Drawing">
<value>147, 20</value>
</data>
<data name="tsmiAbout.Text" xml:space="preserve">
<value>About...</value>
</data>
<data name="tsMain.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="tsMain.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>6, 6, 6, 6</value>
</data>
<data name="tsMain.Size" type="System.Drawing.Size, System.Drawing">
<value>160, 407</value>
</data>
<data name="tsMain.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="&gt;&gt;tsMain.Name" xml:space="preserve">
<value>tsMain</value>
</data>
<data name="&gt;&gt;tsMain.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tsMain.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;tsMain.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="tsmiFullscreen.Size" type="System.Drawing.Size, System.Drawing">
<value>217, 22</value>
</data>
@ -426,18 +726,6 @@
<data name="tsmiAutoCapture.Text" xml:space="preserve">
<value>Auto capture...</value>
</data>
<data name="tsddbCapture.ImageAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleLeft</value>
</data>
<data name="tsddbCapture.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
<value>Magenta</value>
</data>
<data name="tsddbCapture.Size" type="System.Drawing.Size, System.Drawing">
<value>147, 20</value>
</data>
<data name="tsddbCapture.Text" xml:space="preserve">
<value>Capture</value>
</data>
<data name="tsmiUploadFile.Size" type="System.Drawing.Size, System.Drawing">
<value>203, 22</value>
</data>
@ -468,141 +756,6 @@
<data name="tsmiUploadDragDrop.Text" xml:space="preserve">
<value>Drag and drop upload...</value>
</data>
<data name="tsddbUpload.ImageAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleLeft</value>
</data>
<data name="tsddbUpload.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
<value>Magenta</value>
</data>
<data name="tsddbUpload.Size" type="System.Drawing.Size, System.Drawing">
<value>147, 20</value>
</data>
<data name="tsddbUpload.Text" xml:space="preserve">
<value>Upload</value>
</data>
<data name="tsddbWorkflows.ImageAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>BottomLeft</value>
</data>
<data name="tsddbWorkflows.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
<value>Magenta</value>
</data>
<data name="tsddbWorkflows.Size" type="System.Drawing.Size, System.Drawing">
<value>147, 20</value>
</data>
<data name="tsddbWorkflows.Text" xml:space="preserve">
<value>Workflows</value>
</data>
<data name="tsmiColorPicker.Size" type="System.Drawing.Size, System.Drawing">
<value>183, 22</value>
</data>
<data name="tsmiColorPicker.Text" xml:space="preserve">
<value>Color picker...</value>
</data>
<data name="tsmiScreenColorPicker.Size" type="System.Drawing.Size, System.Drawing">
<value>183, 22</value>
</data>
<data name="tsmiScreenColorPicker.Text" xml:space="preserve">
<value>Screen color picker...</value>
</data>
<data name="tsmiImageEditor.Size" type="System.Drawing.Size, System.Drawing">
<value>183, 22</value>
</data>
<data name="tsmiImageEditor.Text" xml:space="preserve">
<value>Image editor...</value>
</data>
<data name="tsmiImageEffects.Size" type="System.Drawing.Size, System.Drawing">
<value>183, 22</value>
</data>
<data name="tsmiImageEffects.Text" xml:space="preserve">
<value>Image effects...</value>
</data>
<data name="tsmiHashCheck.Size" type="System.Drawing.Size, System.Drawing">
<value>183, 22</value>
</data>
<data name="tsmiHashCheck.Text" xml:space="preserve">
<value>Hash check...</value>
</data>
<data name="tsmiDNSChanger.Size" type="System.Drawing.Size, System.Drawing">
<value>183, 22</value>
</data>
<data name="tsmiDNSChanger.Text" xml:space="preserve">
<value>DNS changer...</value>
</data>
<data name="tsmiQRCode.Size" type="System.Drawing.Size, System.Drawing">
<value>183, 22</value>
</data>
<data name="tsmiQRCode.Text" xml:space="preserve">
<value>QR code...</value>
</data>
<data name="tsmiRuler.Size" type="System.Drawing.Size, System.Drawing">
<value>183, 22</value>
</data>
<data name="tsmiRuler.Text" xml:space="preserve">
<value>Ruler...</value>
</data>
<data name="tsmiIndexFolder.Size" type="System.Drawing.Size, System.Drawing">
<value>183, 22</value>
</data>
<data name="tsmiIndexFolder.Text" xml:space="preserve">
<value>Index folder...</value>
</data>
<data name="tsmiFTPClient.Size" type="System.Drawing.Size, System.Drawing">
<value>183, 22</value>
</data>
<data name="tsmiFTPClient.Text" xml:space="preserve">
<value>FTP client...</value>
</data>
<data name="tsmiTweetMessage.Size" type="System.Drawing.Size, System.Drawing">
<value>183, 22</value>
</data>
<data name="tsmiTweetMessage.Text" xml:space="preserve">
<value>Tweet message...</value>
</data>
<data name="tsmiMonitorTest.Size" type="System.Drawing.Size, System.Drawing">
<value>183, 22</value>
</data>
<data name="tsmiMonitorTest.Text" xml:space="preserve">
<value>Monitor test...</value>
</data>
<data name="tsddbTools.ImageAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleLeft</value>
</data>
<data name="tsddbTools.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
<value>Magenta</value>
</data>
<data name="tsddbTools.Size" type="System.Drawing.Size, System.Drawing">
<value>147, 20</value>
</data>
<data name="tsddbTools.Text" xml:space="preserve">
<value>Tools</value>
</data>
<data name="tssMain1.Size" type="System.Drawing.Size, System.Drawing">
<value>147, 6</value>
</data>
<data name="tsddbAfterCaptureTasks.ImageAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleLeft</value>
</data>
<data name="tsddbAfterCaptureTasks.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
<value>Magenta</value>
</data>
<data name="tsddbAfterCaptureTasks.Size" type="System.Drawing.Size, System.Drawing">
<value>147, 20</value>
</data>
<data name="tsddbAfterCaptureTasks.Text" xml:space="preserve">
<value>After capture tasks</value>
</data>
<data name="tsddbAfterUploadTasks.ImageAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleLeft</value>
</data>
<data name="tsddbAfterUploadTasks.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
<value>Magenta</value>
</data>
<data name="tsddbAfterUploadTasks.Size" type="System.Drawing.Size, System.Drawing">
<value>147, 20</value>
</data>
<data name="tsddbAfterUploadTasks.Text" xml:space="preserve">
<value>After upload tasks</value>
</data>
<data name="tsmiImageUploaders.Size" type="System.Drawing.Size, System.Drawing">
<value>187, 22</value>
</data>
@ -642,93 +795,6 @@
<data name="tsmiDestinationSettings.Text" xml:space="preserve">
<value>Destination settings...</value>
</data>
<data name="tsddbDestinations.ImageAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleLeft</value>
</data>
<data name="tsddbDestinations.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
<value>Magenta</value>
</data>
<data name="tsddbDestinations.Size" type="System.Drawing.Size, System.Drawing">
<value>147, 20</value>
</data>
<data name="tsddbDestinations.Text" xml:space="preserve">
<value>Destinations</value>
</data>
<data name="tsbApplicationSettings.ImageAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleLeft</value>
</data>
<data name="tsbApplicationSettings.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
<value>Magenta</value>
</data>
<data name="tsbApplicationSettings.Size" type="System.Drawing.Size, System.Drawing">
<value>147, 20</value>
</data>
<data name="tsbApplicationSettings.Text" xml:space="preserve">
<value>Application settings...</value>
</data>
<data name="tsbTaskSettings.ImageAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleLeft</value>
</data>
<data name="tsbTaskSettings.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
<value>Magenta</value>
</data>
<data name="tsbTaskSettings.Size" type="System.Drawing.Size, System.Drawing">
<value>147, 20</value>
</data>
<data name="tsbTaskSettings.Text" xml:space="preserve">
<value>Task settings...</value>
</data>
<data name="tsbHotkeySettings.ImageAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleLeft</value>
</data>
<data name="tsbHotkeySettings.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
<value>Magenta</value>
</data>
<data name="tsbHotkeySettings.Size" type="System.Drawing.Size, System.Drawing">
<value>147, 20</value>
</data>
<data name="tsbHotkeySettings.Text" xml:space="preserve">
<value>Hotkey settings...</value>
</data>
<data name="tssMain2.Size" type="System.Drawing.Size, System.Drawing">
<value>147, 6</value>
</data>
<data name="tsbScreenshotsFolder.ImageAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleLeft</value>
</data>
<data name="tsbScreenshotsFolder.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
<value>Magenta</value>
</data>
<data name="tsbScreenshotsFolder.Size" type="System.Drawing.Size, System.Drawing">
<value>147, 20</value>
</data>
<data name="tsbScreenshotsFolder.Text" xml:space="preserve">
<value>Screenshots folder...</value>
</data>
<data name="tsbHistory.ImageAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleLeft</value>
</data>
<data name="tsbHistory.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
<value>Magenta</value>
</data>
<data name="tsbHistory.Size" type="System.Drawing.Size, System.Drawing">
<value>147, 20</value>
</data>
<data name="tsbHistory.Text" xml:space="preserve">
<value>History...</value>
</data>
<data name="tsbImageHistory.ImageAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleLeft</value>
</data>
<data name="tsbImageHistory.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
<value>Magenta</value>
</data>
<data name="tsbImageHistory.Size" type="System.Drawing.Size, System.Drawing">
<value>147, 20</value>
</data>
<data name="tsbImageHistory.Text" xml:space="preserve">
<value>Image history...</value>
</data>
<data name="tsmiShowDebugLog.Size" type="System.Drawing.Size, System.Drawing">
<value>173, 22</value>
</data>
@ -765,69 +831,18 @@
<data name="tsmiTestURLSharing.Text" xml:space="preserve">
<value>Test URL sharing</value>
</data>
<data name="tsddbDebug.ImageAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleLeft</value>
</data>
<data name="tsddbDebug.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
<value>Magenta</value>
</data>
<data name="tsddbDebug.Size" type="System.Drawing.Size, System.Drawing">
<value>147, 20</value>
</data>
<data name="tsddbDebug.Text" xml:space="preserve">
<value>Debug</value>
</data>
<data name="tsmiDonate.ImageAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleLeft</value>
</data>
<data name="tsmiDonate.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
<value>Magenta</value>
</data>
<data name="tsmiDonate.Size" type="System.Drawing.Size, System.Drawing">
<value>147, 20</value>
</data>
<data name="tsmiDonate.Text" xml:space="preserve">
<value>Donate...</value>
</data>
<data name="tsmiAbout.ImageAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleLeft</value>
</data>
<data name="tsmiAbout.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
<value>Magenta</value>
</data>
<data name="tsmiAbout.Size" type="System.Drawing.Size, System.Drawing">
<value>147, 20</value>
</data>
<data name="tsmiAbout.Text" xml:space="preserve">
<value>About...</value>
</data>
<data name="tsMain.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="tsMain.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>6, 6, 6, 6</value>
</data>
<data name="tsMain.Size" type="System.Drawing.Size, System.Drawing">
<value>160, 407</value>
</data>
<data name="tsMain.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="&gt;&gt;tsMain.Name" xml:space="preserve">
<value>tsMain</value>
</data>
<data name="&gt;&gt;tsMain.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tsMain.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;tsMain.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<metadata name="cmsTaskInfo.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>286, 17</value>
</metadata>
<data name="cmsTaskInfo.Size" type="System.Drawing.Size, System.Drawing">
<value>173, 318</value>
</data>
<data name="&gt;&gt;cmsTaskInfo.Name" xml:space="preserve">
<value>cmsTaskInfo</value>
</data>
<data name="&gt;&gt;cmsTaskInfo.Type" xml:space="preserve">
<value>System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="tsmiShowErrors.Size" type="System.Drawing.Size, System.Drawing">
<value>172, 22</value>
</data>
@ -840,6 +855,12 @@
<data name="tsmiStopUpload.Text" xml:space="preserve">
<value>Stop upload</value>
</data>
<data name="tsmiOpen.Size" type="System.Drawing.Size, System.Drawing">
<value>172, 22</value>
</data>
<data name="tsmiOpen.Text" xml:space="preserve">
<value>Open</value>
</data>
<data name="tsmiOpenURL.Size" type="System.Drawing.Size, System.Drawing">
<value>156, 22</value>
</data>
@ -885,11 +906,11 @@
<data name="tsmiOpenThumbnailFile.Text" xml:space="preserve">
<value>Thumbnail file</value>
</data>
<data name="tsmiOpen.Size" type="System.Drawing.Size, System.Drawing">
<data name="tsmiCopy.Size" type="System.Drawing.Size, System.Drawing">
<value>172, 22</value>
</data>
<data name="tsmiOpen.Text" xml:space="preserve">
<value>Open</value>
<data name="tsmiCopy.Text" xml:space="preserve">
<value>Copy</value>
</data>
<data name="tsmiCopyURL.Size" type="System.Drawing.Size, System.Drawing">
<value>233, 22</value>
@ -1023,12 +1044,6 @@
<data name="tssCopy5.Visible" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="tsmiCopy.Size" type="System.Drawing.Size, System.Drawing">
<value>172, 22</value>
</data>
<data name="tsmiCopy.Text" xml:space="preserve">
<value>Copy</value>
</data>
<data name="tsmiUploadSelectedFile.Size" type="System.Drawing.Size, System.Drawing">
<value>172, 22</value>
</data>
@ -1086,38 +1101,29 @@
<data name="tsmiHideMenu.Text" xml:space="preserve">
<value>Hide menu</value>
</data>
<data name="tsmiImagePreviewShow.Size" type="System.Drawing.Size, System.Drawing">
<value>152, 22</value>
</data>
<data name="tsmiImagePreviewShow.Text" xml:space="preserve">
<value>Show</value>
</data>
<data name="tsmiImagePreviewHide.Size" type="System.Drawing.Size, System.Drawing">
<value>152, 22</value>
</data>
<data name="tsmiImagePreviewHide.Text" xml:space="preserve">
<value>Hide</value>
</data>
<data name="tsmiImagePreviewAutomatic.Size" type="System.Drawing.Size, System.Drawing">
<value>152, 22</value>
</data>
<data name="tsmiImagePreviewAutomatic.Text" xml:space="preserve">
<value>Automatic</value>
</data>
<data name="tsmiImagePreview.Size" type="System.Drawing.Size, System.Drawing">
<value>172, 22</value>
</data>
<data name="tsmiImagePreview.Text" xml:space="preserve">
<value>Image preview</value>
</data>
<data name="cmsTaskInfo.Size" type="System.Drawing.Size, System.Drawing">
<value>173, 340</value>
<data name="tsmiImagePreviewShow.Size" type="System.Drawing.Size, System.Drawing">
<value>130, 22</value>
</data>
<data name="&gt;&gt;cmsTaskInfo.Name" xml:space="preserve">
<value>cmsTaskInfo</value>
<data name="tsmiImagePreviewShow.Text" xml:space="preserve">
<value>Show</value>
</data>
<data name="&gt;&gt;cmsTaskInfo.Type" xml:space="preserve">
<value>System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<data name="tsmiImagePreviewHide.Size" type="System.Drawing.Size, System.Drawing">
<value>130, 22</value>
</data>
<data name="tsmiImagePreviewHide.Text" xml:space="preserve">
<value>Hide</value>
</data>
<data name="tsmiImagePreviewAutomatic.Size" type="System.Drawing.Size, System.Drawing">
<value>130, 22</value>
</data>
<data name="tsmiImagePreviewAutomatic.Text" xml:space="preserve">
<value>Automatic</value>
</data>
<metadata name="niTray.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>105, 17</value>
@ -1125,6 +1131,24 @@
<metadata name="cmsTray.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>190, 17</value>
</metadata>
<data name="cmsTray.Size" type="System.Drawing.Size, System.Drawing">
<value>189, 418</value>
</data>
<data name="&gt;&gt;cmsTray.Name" xml:space="preserve">
<value>cmsTray</value>
</data>
<data name="&gt;&gt;cmsTray.Type" xml:space="preserve">
<value>System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="niTray.Text" xml:space="preserve">
<value>ShareX</value>
</data>
<data name="tsmiTrayCapture.Size" type="System.Drawing.Size, System.Drawing">
<value>188, 22</value>
</data>
<data name="tsmiTrayCapture.Text" xml:space="preserve">
<value>Capture</value>
</data>
<data name="tsmiTrayFullscreen.Size" type="System.Drawing.Size, System.Drawing">
<value>217, 22</value>
</data>
@ -1227,11 +1251,11 @@
<data name="tsmiTrayAutoCapture.Text" xml:space="preserve">
<value>Auto capture...</value>
</data>
<data name="tsmiTrayCapture.Size" type="System.Drawing.Size, System.Drawing">
<data name="tsmiTrayUpload.Size" type="System.Drawing.Size, System.Drawing">
<value>188, 22</value>
</data>
<data name="tsmiTrayCapture.Text" xml:space="preserve">
<value>Capture</value>
<data name="tsmiTrayUpload.Text" xml:space="preserve">
<value>Upload</value>
</data>
<data name="tsmiTrayUploadFile.Size" type="System.Drawing.Size, System.Drawing">
<value>203, 22</value>
@ -1263,18 +1287,18 @@
<data name="tsmiTrayUploadDragDrop.Text" xml:space="preserve">
<value>Drag and drop upload...</value>
</data>
<data name="tsmiTrayUpload.Size" type="System.Drawing.Size, System.Drawing">
<value>188, 22</value>
</data>
<data name="tsmiTrayUpload.Text" xml:space="preserve">
<value>Upload</value>
</data>
<data name="tsmiTrayWorkflows.Size" type="System.Drawing.Size, System.Drawing">
<value>188, 22</value>
</data>
<data name="tsmiTrayWorkflows.Text" xml:space="preserve">
<value>Workflows</value>
</data>
<data name="tsmiTrayTools.Size" type="System.Drawing.Size, System.Drawing">
<value>188, 22</value>
</data>
<data name="tsmiTrayTools.Text" xml:space="preserve">
<value>Tools</value>
</data>
<data name="tsmiTrayColorPicker.Size" type="System.Drawing.Size, System.Drawing">
<value>183, 22</value>
</data>
@ -1347,12 +1371,6 @@
<data name="tsmiTrayMonitorTest.Text" xml:space="preserve">
<value>Monitor test...</value>
</data>
<data name="tsmiTrayTools.Size" type="System.Drawing.Size, System.Drawing">
<value>188, 22</value>
</data>
<data name="tsmiTrayTools.Text" xml:space="preserve">
<value>Tools</value>
</data>
<data name="tssTray1.Size" type="System.Drawing.Size, System.Drawing">
<value>185, 6</value>
</data>
@ -1368,6 +1386,12 @@
<data name="tsmiTrayAfterUploadTasks.Text" xml:space="preserve">
<value>After upload</value>
</data>
<data name="tsmiTrayDestinations.Size" type="System.Drawing.Size, System.Drawing">
<value>188, 22</value>
</data>
<data name="tsmiTrayDestinations.Text" xml:space="preserve">
<value>Destinations</value>
</data>
<data name="tsmiTrayImageUploaders.Size" type="System.Drawing.Size, System.Drawing">
<value>187, 22</value>
</data>
@ -1407,12 +1431,6 @@
<data name="tsmiTrayDestinationSettings.Text" xml:space="preserve">
<value>Destination settings...</value>
</data>
<data name="tsmiTrayDestinations.Size" type="System.Drawing.Size, System.Drawing">
<value>188, 22</value>
</data>
<data name="tsmiTrayDestinations.Text" xml:space="preserve">
<value>Destinations</value>
</data>
<data name="tsmiTrayApplicationSettings.Size" type="System.Drawing.Size, System.Drawing">
<value>188, 22</value>
</data>
@ -1488,18 +1506,6 @@
<data name="tsmiTrayExit.Text" xml:space="preserve">
<value>Exit</value>
</data>
<data name="cmsTray.Size" type="System.Drawing.Size, System.Drawing">
<value>189, 418</value>
</data>
<data name="&gt;&gt;cmsTray.Name" xml:space="preserve">
<value>cmsTray</value>
</data>
<data name="&gt;&gt;cmsTray.Type" xml:space="preserve">
<value>System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="niTray.Text" xml:space="preserve">
<value>ShareX</value>
<comment>@Invariant</comment></data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
@ -1520,7 +1526,7 @@
</data>
<data name="$this.Text" xml:space="preserve">
<value>ShareX</value>
<comment>@Invariant</comment></data>
</data>
<data name="&gt;&gt;chFilename.Name" xml:space="preserve">
<value>chFilename</value>
</data>
@ -1791,6 +1797,12 @@
<data name="&gt;&gt;tsmiMonitorTest.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tsmiAutomate.Name" xml:space="preserve">
<value>tsmiAutomate</value>
</data>
<data name="&gt;&gt;tsmiAutomate.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tssMain1.Name" xml:space="preserve">
<value>tssMain1</value>
</data>
@ -2635,6 +2647,6 @@
<value>MainForm</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>ShareX.HotkeyForm, ShareX, Version=9.6.1.0, Culture=neutral, PublicKeyToken=null</value>
<value>ShareX.HotkeyForm, ShareX, Version=9.7.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
</root>

View file

@ -1229,6 +1229,16 @@ public static System.Drawing.Bitmap Rectangle {
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
public static System.Drawing.Bitmap robot {
get {
object obj = ResourceManager.GetObject("robot", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>

View file

@ -144,8 +144,8 @@ Press 'No' to cancel the current upload and disable screenshot auto uploading.</
<data name="UploadTask_DoUploadJob_Uploading" xml:space="preserve">
<value>Uploading</value>
</data>
<data name="ScreenColorPicker_UpdateControls_Stop_screen_color_picker" xml:space="preserve">
<value>Stop screen color picker</value>
<data name="layer_shape_curve" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\layer-shape-curve.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Triangle" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Triangle.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
@ -165,6 +165,9 @@ Press 'No' to cancel the current upload and disable screenshot auto uploading.</
<data name="ScreenRecordForm_StartRecording_FFmpeg_error" xml:space="preserve">
<value>FFmpeg error</value>
</data>
<data name="checkbox_check" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\checkbox_check.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="ScreenRecordForm_DownloaderForm_InstallRequested_FFmpeg_successfully_downloaded_" xml:space="preserve">
<value>FFmpeg successfully downloaded.</value>
</data>
@ -207,9 +210,6 @@ Press 'No' to cancel the current upload and disable screenshot auto uploading.</
<data name="TaskManager_task_UploadCompleted_ShareX___Task_completed" xml:space="preserve">
<value>Task completed</value>
</data>
<data name="edit_scale" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\edit-scale.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="folder_open_image" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\folder-open-image.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
@ -234,9 +234,6 @@ Press 'No' to cancel the current upload and disable screenshot auto uploading.</
<data name="UploadTask_ThreadDoWork_URL_is_empty_" xml:space="preserve">
<value>URL is empty.</value>
</data>
<data name="MainForm_tsmiTestTextUpload_Click_Text_upload_test" xml:space="preserve">
<value>Text upload test</value>
</data>
<data name="ApplicationSettingsForm_btnBrowsePersonalFolderPath_Click_Choose_ShareX_personal_folder_path" xml:space="preserve">
<value>Choose ShareX personal folder path</value>
</data>
@ -250,9 +247,6 @@ Please select a different hotkey or quit the conflicting application and reopen
<data name="MainForm_tsmiDeleteSelectedFile_Click_File_delete_confirmation" xml:space="preserve">
<value>File delete confirmation</value>
</data>
<data name="layer_shape_curve" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\layer-shape-curve.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="AutoCaptureForm_Execute_Stop" xml:space="preserve">
<value>Stop</value>
</data>
@ -268,17 +262,14 @@ Please select a different hotkey or quit the conflicting application and reopen
<data name="UploadManager_IsUploadConfirmed_Don_t_show_this_message_again_" xml:space="preserve">
<value>Don't show this message again.</value>
</data>
<data name="cn" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\cn.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="ScreenRecordForm_DownloaderForm_InstallRequested_Download_of_FFmpeg_failed_" xml:space="preserve">
<value>Download of FFmpeg failed.</value>
<data name="TaskSettingsForm_UpdateUploaderMenuNames_Task___0_" xml:space="preserve">
<value>Task: {0}</value>
</data>
<data name="ScreenRecordForm_StartRecording_FFmpeg_video_and_audio_source_both_can_t_be__None__" xml:space="preserve">
<value>FFmpeg video and audio source both can't be "None".</value>
</data>
<data name="toolbox" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\toolbox.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
<data name="edit_scale" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\edit-scale.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="steam" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\steam.ico;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
@ -289,8 +280,8 @@ Please select a different hotkey or quit the conflicting application and reopen
<data name="application_blue" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\resources\application-blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="application_task" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\resources\application-task.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
<data name="ActionsForm_btnOK_Click_File_path_can_t_be_empty_" xml:space="preserve">
<value>File path can't be empty.</value>
</data>
<data name="TaskSettingsForm_UpdateWindowTitle_Task_settings" xml:space="preserve">
<value>Task settings</value>
@ -337,17 +328,20 @@ Would you like to automatically download it?</value>
<data name="layer_pencil" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\layer--pencil.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="TaskHelpers_OpenQuickScreenColorPicker_Copied_to_clipboard___0_" xml:space="preserve">
<value>Copied to clipboard: {0}</value>
<data name="document_copy" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\document-copy.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="camera" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\camera.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="MainForm_UpdateMenu_Hide_menu" xml:space="preserve">
<value>Hide menu</value>
</data>
<data name="barcode_2d" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\barcode-2d.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
<data name="monitor" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\monitor.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="layout_select_content" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\layout-select-content.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
<data name="navigation_000_button" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\navigation-000-button.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="ScreenColorPicker_btnCopyAll_Click_Cursor_position" xml:space="preserve">
<value>Cursor position (X, Y) = {0}, {1}</value>
@ -370,9 +364,6 @@ Would you like to automatically download it?</value>
<data name="ActionsForm_btnPathBrowse_Click_Choose_file_path" xml:space="preserve">
<value>Choose file path</value>
</data>
<data name="TaskSettingsForm_UpdateUploaderMenuNames_Task___0_" xml:space="preserve">
<value>Task: {0}</value>
</data>
<data name="HotkeyManager_ShowFailedHotkeys_Hotkey_registration_failed" xml:space="preserve">
<value>Hotkey registration failed</value>
</data>
@ -394,9 +385,6 @@ Would you like to automatically download it?</value>
<data name="folder_tree" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\folder-tree.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="pencil" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\pencil.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="TaskManager_task_UploadCompleted_Error" xml:space="preserve">
<value>Error</value>
</data>
@ -425,6 +413,9 @@ here</value>
<data name="GitHub" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\GitHub.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="clipboard-list" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\clipboard-list.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="traffic_cone" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\traffic-cone.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
@ -434,8 +425,8 @@ here</value>
<data name="TaskSettingsForm_UpdateUploaderMenuNames_File_uploader___0_" xml:space="preserve">
<value>File uploader: {0}</value>
</data>
<data name="TaskSettingsForm_UpdateUploaderMenuNames_URL_shortener___0_" xml:space="preserve">
<value>URL shortener: {0}</value>
<data name="AboutForm_AboutForm_Project_page" xml:space="preserve">
<value>Project page</value>
</data>
<data name="TaskHelpers_TweetMessage_Tweet_successfully_sent_" xml:space="preserve">
<value>Tweet successfully sent.</value>
@ -450,6 +441,9 @@ Please run ShareX as administrator to change personal folder path.</value>
<data name="gear" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\gear.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="image_saturation" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\image-saturation.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="folder" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\folder.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
@ -460,12 +454,15 @@ Please run ShareX as administrator to change personal folder path.</value>
<value>Click to stop recording.</value>
<comment>Text must be equal or lower than 54 characters because of tray icon text length limit.</comment>
</data>
<data name="navigation_000_button" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\navigation-000-button.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
<data name="MainForm_UpdateWorkflowsMenu_You_can_add_workflows_from_hotkey_settings___" xml:space="preserve">
<value>You can add workflows from hotkey settings...</value>
</data>
<data name="navigation_090_button" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\navigation-090-button.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="layers_arrange" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\layers-arrange.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="WatchFolderForm_btnPathBrowse_Click_Choose_folder_path" xml:space="preserve">
<value>Choose folder path</value>
</data>
@ -479,17 +476,23 @@ Would you like to restart ShareX?</value>
<data name="layer_shape" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\layer-shape.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="eraser" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\eraser.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="image_pencil" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\image--pencil.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="image_saturation" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\image-saturation.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
<data name="TaskHelpers_OpenQuickScreenColorPicker_Copied_to_clipboard___0_" xml:space="preserve">
<value>Copied to clipboard: {0}</value>
</data>
<data name="Program_Run_Error" xml:space="preserve">
<value>Error</value>
</data>
<data name="ScreenColorPicker_UpdateControls_Start_screen_color_picker" xml:space="preserve">
<value>Start screen color picker</value>
<data name="cn" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\cn.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="categories" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\categories.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="FileExistForm_txtNewName_TextChanged_Use_new_name__" xml:space="preserve">
<value>Use new name: </value>
@ -497,8 +500,8 @@ Would you like to restart ShareX?</value>
<data name="globe" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\globe.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="BeforeUploadForm_BeforeUploadForm__0__is_about_to_be_uploaded_to__1___You_may_choose_a_different_destination_" xml:space="preserve">
<value>{0} is about to be uploaded to {1}. You may choose a different destination.</value>
<data name="ScreenColorPicker_UpdateControls_Stop_screen_color_picker" xml:space="preserve">
<value>Stop screen color picker</value>
</data>
<data name="upload_cloud" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\upload-cloud.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
@ -545,11 +548,8 @@ Would you like to restart ShareX?</value>
<data name="TaskSettingsForm_UpdateUploaderMenuNames_After_capture___0_" xml:space="preserve">
<value>After capture: {0}</value>
</data>
<data name="camera" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\camera.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="AboutForm_AboutForm_Project_page" xml:space="preserve">
<value>Project page</value>
<data name="TaskSettingsForm_UpdateUploaderMenuNames_URL_shortener___0_" xml:space="preserve">
<value>URL shortener: {0}</value>
</data>
<data name="clipboard" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\clipboard.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
@ -569,8 +569,8 @@ Would you like to restart ShareX?</value>
<data name="arrow_090" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\arrow-090.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="notebook" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\notebook.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
<data name="layout_select_content" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\layout-select-content.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="de" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\de.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
@ -591,9 +591,6 @@ Would you like to restart ShareX?</value>
<value>Download failed:
{0}</value>
</data>
<data name="TaskSettingsForm_UpdateUploaderMenuNames_After_upload___0_" xml:space="preserve">
<value>After upload: {0}</value>
</data>
<data name="layer_shape_ellipse" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\layer-shape-ellipse.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
@ -609,8 +606,8 @@ Would you like to restart ShareX?</value>
<data name="layer_shape_polygon" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\layer-shape-polygon.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="checkbox_check" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\checkbox_check.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
<data name="toolbox" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\toolbox.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="UploadTask_OnUploadCompleted_Stopped" xml:space="preserve">
<value>Stopped</value>
@ -633,27 +630,27 @@ Would you like to restart ShareX?</value>
<data name="wrench_screwdriver" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\wrench-screwdriver.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="application_browser" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\resources\application-browser.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="ErrorSound" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\ErrorSound.wav;System.IO.MemoryStream, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="TaskSettingsForm_txtNameFormatPatternActiveWindow_TextChanged_Preview_" xml:space="preserve">
<value>Preview:</value>
</data>
<data name="document_copy" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\document-copy.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
<data name="MainForm_tsmiTestTextUpload_Click_Text_upload_test" xml:space="preserve">
<value>Text upload test</value>
</data>
<data name="application_browser" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\resources\application-browser.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
<data name="application_task" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\resources\application-task.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="application_icon_large" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\application-icon-large.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
<data name="notebook" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\notebook.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Twitter" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Twitter.ico;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="MainForm_UpdateWorkflowsMenu_You_can_add_workflows_from_hotkey_settings___" xml:space="preserve">
<value>You can add workflows from hotkey settings...</value>
</data>
<data name="TaskSettingsForm_UpdateWindowTitle_Task_settings_for__0_" xml:space="preserve">
<value>Task settings for {0}</value>
</data>
@ -666,32 +663,38 @@ Would you like to restart ShareX?</value>
<data name="UploadTask_OnUploadCompleted_Done" xml:space="preserve">
<value>Done</value>
</data>
<data name="ActionsForm_btnOK_Click_File_path_can_t_be_empty_" xml:space="preserve">
<value>File path can't be empty.</value>
<data name="application_icon_large" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\application-icon-large.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="RoundedRectangle" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\RoundedRectangle.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="monitor" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\monitor.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
<data name="BeforeUploadForm_BeforeUploadForm__0__is_about_to_be_uploaded_to__1___You_may_choose_a_different_destination_" xml:space="preserve">
<value>{0} is about to be uploaded to {1}. You may choose a different destination.</value>
</data>
<data name="AboutForm_AboutForm_Website" xml:space="preserve">
<value>Website</value>
</data>
<data name="categories" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\categories.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
<data name="pencil" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\pencil.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="layers_arrange" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\layers-arrange.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
<data name="TaskSettingsForm_UpdateUploaderMenuNames_After_upload___0_" xml:space="preserve">
<value>After upload: {0}</value>
</data>
<data name="eraser" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\eraser.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
<data name="barcode_2d" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\barcode-2d.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="ScreenRecordForm_StartRecording_Click_tray_icon_to_start_recording_" xml:space="preserve">
<value>Click to start recording.</value>
<comment>Text must be equal or lower than 54 characters because of tray icon text length limit.</comment>
</data>
<data name="clipboard-list" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\clipboard-list.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
<data name="ScreenRecordForm_DownloaderForm_InstallRequested_Download_of_FFmpeg_failed_" xml:space="preserve">
<value>Download of FFmpeg failed.</value>
</data>
<data name="ScreenColorPicker_UpdateControls_Start_screen_color_picker" xml:space="preserve">
<value>Start screen color picker</value>
</data>
<data name="robot" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\robot.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>

BIN
ShareX/Resources/robot.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 820 B

View file

@ -750,6 +750,7 @@
<None Include="Resources\globe.png" />
<None Include="Resources\us.png" />
<None Include="Resources\clipboard-list.png" />
<None Include="Resources\robot.png" />
<Content Include="ShareX_Icon.ico" />
<None Include="Resources\globe--pencil.png" />
<None Include="Resources\camcorder--pencil.png" />

View file

@ -546,6 +546,11 @@ public static void OpenRuler()
}
}
public static void OpenAutomate()
{
new AutomateForm().Show();
}
public static void OpenHashCheck()
{
new HashCheckForm().Show();