From 24c36acfe8e9ac00ec1f7fd75300104d6003b89c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=AD=B1=E5=82=91?= <840465812@qq.com>
Date: Wed, 28 Apr 2021 21:33:58 +0800
Subject: [PATCH] =?UTF-8?q?1.=20=E5=AE=8C=E6=88=90=20UI=E7=95=8C=E9=9D=A2?=
=?UTF-8?q?=202.=20=E5=AE=8C=E6=88=90=20=E6=A0=B8=E5=BF=83=E5=8A=9F?=
=?UTF-8?q?=E8=83=BD=203.=20=E5=A2=9E=E5=8A=A0=20=E8=8B=A5=E6=97=A0?=
=?UTF-8?q?=E7=83=AD=E9=94=AE=E5=88=99=E9=BB=98=E8=AE=A4=E5=A2=9E=E5=8A=A0?=
=?UTF-8?q?=E8=87=AA=E8=BA=AB=E5=94=A4=E5=87=BA=E7=83=AD=E9=94=AE=204.=20?=
=?UTF-8?q?=E5=A2=9E=E5=8A=A0=20=E5=BA=94=E7=94=A8=E7=A8=8B=E5=BA=8F?=
=?UTF-8?q?=E5=9B=BE=E6=A0=87=205.=20=E5=A2=9E=E5=8A=A0=20=E7=B3=BB?=
=?UTF-8?q?=E7=BB=9F=E6=89=98=E7=9B=98=E5=8A=9F=E8=83=BD=EF=BC=8C=E5=8F=AF?=
=?UTF-8?q?=E4=BB=A5=E9=80=9A=E8=BF=87=E6=89=98=E7=9B=98=E6=8E=A7=E5=88=B6?=
=?UTF-8?q?=E5=BA=94=E7=94=A8=E6=98=BE=E7=A4=BA=E9=9A=90=E8=97=8F=EF=BC=8C?=
=?UTF-8?q?=E6=9C=80=E5=B0=8F=E5=8C=96=E9=BB=98=E8=AE=A4=E9=9A=90=E8=97=8F?=
=?UTF-8?q?=E7=AA=97=E5=8F=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
KeyGo/AppControl.cs | 24 +-
KeyGo/FormHotKey.Designer.cs | 1 +
KeyGo/FormHotKey.cs | 57 ++-
KeyGo/FormMain.Designer.cs | 53 ++-
KeyGo/FormMain.cs | 140 ++++--
KeyGo/FormMain.resx | 572 +++++++++++++++++++++++++
KeyGo/HotKeyItem.cs | 6 +-
KeyGo/KeyGo.cs | 101 ++++-
KeyGo/KeyGo.csproj | 22 +-
KeyGo/KeyGo.ico | Bin 0 -> 16749 bytes
KeyGo/Program.cs | 23 +-
KeyGo/Properties/Resources.Designer.cs | 105 +++--
KeyGo/Properties/Resources.resx | 29 +-
KeyGo/Resources/ImgAdd.png | Bin 0 -> 528 bytes
KeyGo/Resources/ImgDel.png | Bin 0 -> 716 bytes
KeyGo/Resources/ImgDisable.png | Bin 0 -> 829 bytes
KeyGo/Resources/ImgEnable.png | Bin 0 -> 760 bytes
KeyGo/Resources/ImgSet.png | Bin 0 -> 750 bytes
KeyGo/UCHotKeyItem.Designer.cs | 119 +++++
KeyGo/UCHotKeyItem.cs | 135 ++++++
KeyGo/UCHotKeyItem.resx | 120 ++++++
21 files changed, 1385 insertions(+), 122 deletions(-)
create mode 100644 KeyGo/KeyGo.ico
create mode 100644 KeyGo/Resources/ImgAdd.png
create mode 100644 KeyGo/Resources/ImgDel.png
create mode 100644 KeyGo/Resources/ImgDisable.png
create mode 100644 KeyGo/Resources/ImgEnable.png
create mode 100644 KeyGo/Resources/ImgSet.png
create mode 100644 KeyGo/UCHotKeyItem.Designer.cs
create mode 100644 KeyGo/UCHotKeyItem.cs
create mode 100644 KeyGo/UCHotKeyItem.resx
diff --git a/KeyGo/AppControl.cs b/KeyGo/AppControl.cs
index 03905b2..f91fa29 100644
--- a/KeyGo/AppControl.cs
+++ b/KeyGo/AppControl.cs
@@ -5,13 +5,13 @@ using System.Runtime.InteropServices;
namespace KeyGo
{
- public class AppControl
+ public static class AppControl
{
///
/// 获取本应用程序当前正在运行的进程,若不存在则返回null
///
/// 当前正在运行的进程
- private static Process GetCurrentRunningInstance()
+ public static Process GetCurrentRunningInstance()
{
Process current = Process.GetCurrentProcess();
Process[] processes = Process.GetProcessesByName(current.ProcessName);
@@ -36,21 +36,28 @@ namespace KeyGo
/// 显示指定实例窗体
///
/// The instance.
- private static void ShowWindow(Process instance)
+ public static void ShowWindow(Process instance)
{
if (instance != null && instance.MainWindowHandle != IntPtr.Zero)
- ShowWindowAsync(instance.MainWindowHandle, (int)CmdShow.Show);
- //SetForegroundWindow(instance.MainWindowHandle);
+ {
+ ShowWindowAsync(instance.MainWindowHandle, (int)CmdShow.ShowNormal);
+ SetForegroundWindow(instance.MainWindowHandle);
+ }
}
///
/// 隐藏指定实例窗体
///
/// The instance.
- public static void HideWindow(Process instance)
+ public static void MinimizeWindow(Process instance)
{
if (instance != null && instance.MainWindowHandle != IntPtr.Zero)
- ShowWindowAsync(instance.MainWindowHandle, (int)CmdShow.Hide);
+ ShowWindowAsync(instance.MainWindowHandle, (int)CmdShow.Minimize);
+ }
+
+ public static bool IsForegroundWindow(Process instance)
+ {
+ return GetForegroundWindow() == instance.MainWindowHandle;
}
private enum CmdShow : int
@@ -139,5 +146,8 @@ namespace KeyGo
[DllImport("User32.dll")]
private static extern bool SetForegroundWindow(System.IntPtr hWnd);
+
+ [DllImport("User32.dll")]
+ private static extern IntPtr GetForegroundWindow();
}
}
\ No newline at end of file
diff --git a/KeyGo/FormHotKey.Designer.cs b/KeyGo/FormHotKey.Designer.cs
index e29f853..56f23fb 100644
--- a/KeyGo/FormHotKey.Designer.cs
+++ b/KeyGo/FormHotKey.Designer.cs
@@ -175,6 +175,7 @@ namespace KeyGo
this.ShowInTaskbar = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = "热键设置";
+ this.Load += new System.EventHandler(this.FormHotKey_Load);
this.ResumeLayout(false);
this.PerformLayout();
diff --git a/KeyGo/FormHotKey.cs b/KeyGo/FormHotKey.cs
index 8903464..bb1c4b4 100644
--- a/KeyGo/FormHotKey.cs
+++ b/KeyGo/FormHotKey.cs
@@ -1,4 +1,5 @@
using System;
+using System.IO;
using System.Windows.Forms;
namespace KeyGo
@@ -10,9 +11,53 @@ namespace KeyGo
InitializeComponent();
}
+ public HotKeyItem HotKeyItem { get; set; }
+ private void FormHotKey_Load(object sender, EventArgs e)
+ {
+ if (HotKeyItem != null)
+ {
+ TxtProcessName.Text = HotKeyItem.ProcessName;
+ TxtStartupPath.Text = HotKeyItem.StartupPath;
+ TxtHotKey.Text = HotKeyItem.HotKey;
+ }
+ }
+
private void BtnAccept_Click(object sender, EventArgs e)
{
- DialogResult = DialogResult.OK;
+ if (string.IsNullOrWhiteSpace(TxtProcessName.Text))
+ {
+ MessageBox.Show("请设置进程名", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ return;
+ }
+ if (!string.IsNullOrWhiteSpace(TxtStartupPath.Text) && !File.Exists(TxtStartupPath.Text))
+ {
+ MessageBox.Show("请选择有效的启动路径", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ return;
+ }
+ if (string.IsNullOrEmpty(TxtHotKey.Text))
+ {
+ MessageBox.Show("请设置快捷键", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ return;
+ }
+
+ bool Modified = true;
+
+ if (HotKeyItem == null)
+ HotKeyItem = new HotKeyItem();
+ else
+ Modified = !(HotKeyItem.ProcessName == TxtProcessName.Text && HotKeyItem.StartupPath == TxtStartupPath.Text && HotKeyItem.HotKey == TxtHotKey.Text);
+
+ if (Modified)
+ {
+ HotKeyItem.ProcessName = TxtProcessName.Text.Trim();
+ HotKeyItem.StartupPath = TxtStartupPath.Text.Trim();
+ HotKeyItem.HotKey = TxtHotKey.Text;
+ DialogResult = DialogResult.OK;
+ }
+ else
+ {
+ DialogResult = DialogResult.Cancel;
+ }
}
private void TxtHotKey_KeyDown(object sender, KeyEventArgs e)
@@ -40,7 +85,14 @@ namespace KeyGo
{
var p = frm.SelectedItem;
TxtProcessName.Text = p.ProcessName;
- TxtStartupPath.Text = p.MainModule.FileName;
+ try
+ {
+ TxtStartupPath.Text = p.MainModule.FileName;
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show("无法获取进程的启动路径:" + ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Warning);
+ }
}
}
@@ -58,5 +110,6 @@ namespace KeyGo
TxtStartupPath.Text = frm.FileName;
}
}
+
}
}
\ No newline at end of file
diff --git a/KeyGo/FormMain.Designer.cs b/KeyGo/FormMain.Designer.cs
index 84d69a9..dd2d8bd 100644
--- a/KeyGo/FormMain.Designer.cs
+++ b/KeyGo/FormMain.Designer.cs
@@ -29,41 +29,70 @@ namespace KeyGo
///
private void InitializeComponent()
{
- this.BtnTest = new System.Windows.Forms.Button();
+ this.components = new System.ComponentModel.Container();
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormMain));
+ this.FLPHotKeys = new System.Windows.Forms.FlowLayoutPanel();
+ this.BtnAdd = new System.Windows.Forms.Button();
+ this.NotifyIcon = new System.Windows.Forms.NotifyIcon(this.components);
+ this.FLPHotKeys.SuspendLayout();
this.SuspendLayout();
//
- // BtnTest
+ // FLPHotKeys
//
- this.BtnTest.Location = new System.Drawing.Point(155, 162);
- this.BtnTest.Name = "BtnTest";
- this.BtnTest.Size = new System.Drawing.Size(193, 66);
- this.BtnTest.TabIndex = 0;
- this.BtnTest.Text = "Test";
- this.BtnTest.UseVisualStyleBackColor = true;
- this.BtnTest.Click += new System.EventHandler(this.button1_Click);
+ this.FLPHotKeys.AutoScroll = true;
+ this.FLPHotKeys.BackColor = System.Drawing.Color.White;
+ this.FLPHotKeys.Controls.Add(this.BtnAdd);
+ this.FLPHotKeys.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.FLPHotKeys.Location = new System.Drawing.Point(0, 0);
+ this.FLPHotKeys.Margin = new System.Windows.Forms.Padding(0);
+ this.FLPHotKeys.Name = "FLPHotKeys";
+ this.FLPHotKeys.Padding = new System.Windows.Forms.Padding(3);
+ this.FLPHotKeys.Size = new System.Drawing.Size(488, 197);
+ this.FLPHotKeys.TabIndex = 0;
+ //
+ // BtnAdd
+ //
+ this.BtnAdd.Image = global::KeyGo.Properties.Resources.ImgAdd;
+ this.BtnAdd.Location = new System.Drawing.Point(6, 6);
+ this.BtnAdd.Name = "BtnAdd";
+ this.BtnAdd.Size = new System.Drawing.Size(110, 90);
+ this.BtnAdd.TabIndex = 0;
+ this.BtnAdd.UseVisualStyleBackColor = true;
+ this.BtnAdd.Click += new System.EventHandler(this.BtnAdd_Click);
+ //
+ // NotifyIcon
+ //
+ this.NotifyIcon.Icon = ((System.Drawing.Icon)(resources.GetObject("NotifyIcon.Icon")));
+ this.NotifyIcon.Visible = true;
+ this.NotifyIcon.MouseClick += new System.Windows.Forms.MouseEventHandler(this.NotifyIcon_MouseClick);
//
// FormMain
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 17F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.ClientSize = new System.Drawing.Size(564, 390);
- this.Controls.Add(this.BtnTest);
+ this.ClientSize = new System.Drawing.Size(488, 197);
+ this.Controls.Add(this.FLPHotKeys);
this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
+ this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
this.MaximizeBox = false;
this.Name = "FormMain";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "KeyGo!";
+ this.Deactivate += new System.EventHandler(this.FormMain_Deactivate);
this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.FormMain_FormClosed);
this.Load += new System.EventHandler(this.FormMain_Load);
+ this.FLPHotKeys.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
- private System.Windows.Forms.Button BtnTest;
+ private System.Windows.Forms.FlowLayoutPanel FLPHotKeys;
+ private System.Windows.Forms.Button BtnAdd;
+ private System.Windows.Forms.NotifyIcon NotifyIcon;
}
}
diff --git a/KeyGo/FormMain.cs b/KeyGo/FormMain.cs
index c861958..ae9a1f4 100644
--- a/KeyGo/FormMain.cs
+++ b/KeyGo/FormMain.cs
@@ -1,50 +1,63 @@
using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Data;
using System.Diagnostics;
-using System.Drawing;
using System.IO;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
using System.Windows.Forms;
-using System.Xml.Serialization;
namespace KeyGo
{
public partial class FormMain : Form
{
- static readonly string _DataFilePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "KeyGo", "HotKey.xml");
- readonly KeyGo _KeyGo;
-
+ private static readonly string _DataFilePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "KeyGo", "HotKey.xml");
+ private readonly KeyGo _KeyGo;
+
public FormMain()
{
InitializeComponent();
_KeyGo = LoadHotKeyItems(_DataFilePath);
_KeyGo.FormHandle = Handle;
+ var p = Process.GetCurrentProcess();
+ if (_KeyGo.Items.Count == 0)
+ {
+ _KeyGo.Items.Add(new HotKeyItem
+ {
+ ProcessName = p.ProcessName,
+ StartupPath = p.MainModule.FileName,
+ HotKey = "Ctrl+G",
+ });
+ }
_KeyGo.RegAllKey();
- }
+ FLPHotKeys.SuspendLayout();
+ foreach (var item in _KeyGo.Items)
+ FLP_AddItem(item);
+ FLPHotKeys.ResumeLayout();
+ }
private void FormMain_Load(object sender, EventArgs e)
{
+ Console.WriteLine(_DataFilePath);
+ }
+ private void FormMain_FormClosed(object sender, FormClosedEventArgs e)
+ {
+ _KeyGo.UnRegAllKey();
+ SaveHotKeyItems(_KeyGo);
}
#region 数据文件IO
private KeyGo LoadHotKeyItems(string xmlFilePath)
{
+ KeyGo instance = null;
try
{
- return KeyGo.LoadXml(xmlFilePath);
+ instance = KeyGo.LoadXml(xmlFilePath);
}
catch (Exception ex)
{
MessageBox.Show("载入数据文件异常:" + ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
- return new KeyGo();
+ return instance ?? new KeyGo();
}
private void SaveHotKeyItems(KeyGo data)
@@ -59,27 +72,12 @@ namespace KeyGo
}
}
- #endregion
-
- private void FormMain_FormClosed(object sender, FormClosedEventArgs e)
- {
- _KeyGo.UnRegAllKey();
- }
-
-
-
-
-
-
-
-
-
-
-
-
+ #endregion 数据文件IO
#region 窗体消息 热键回调
+
private const int WM_HOTKEY = 0x312;
+
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
@@ -90,10 +88,10 @@ namespace KeyGo
break;
}
}
- #endregion
+ #endregion 窗体消息 热键回调
- private void button1_Click(object sender, EventArgs e)
+ private void BtnTest_Click(object sender, EventArgs e)
{
//_KeyGo.Items.Add(new HotKeyItem
//{
@@ -108,5 +106,79 @@ namespace KeyGo
//SaveHotKeyItems(_KeyGo);
//new FormHotKey().ShowDialog();
}
+
+ private void BtnAdd_Click(object sender, EventArgs e)
+ {
+ var frm = new FormHotKey();
+ if (frm.ShowDialog() == DialogResult.OK)
+ {
+ try
+ {
+ var item = frm.HotKeyItem;
+ _KeyGo.AddHotKey(item);
+ FLP_AddItem(item);
+ SaveHotKeyItems(_KeyGo);
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show("在添加新的热键时异常:" + ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ }
+ }
+ }
+
+ private void FLP_AddItem(HotKeyItem item)
+ {
+ var ucitem = new UCHotKeyItem
+ {
+ KeyGo = _KeyGo,
+ HotKeyItem = item,
+ };
+ // 值改变则保存
+ ucitem.ValueChangedEvent += (s, e) => SaveHotKeyItems(_KeyGo);
+
+ // 添加到最后
+ FLPHotKeys.Controls.Add(ucitem);
+
+ // 与添加按钮交换位置
+ var i1 = FLPHotKeys.Controls.GetChildIndex(ucitem);
+ var i2 = FLPHotKeys.Controls.GetChildIndex(BtnAdd);
+ FLPHotKeys.Controls.SetChildIndex(ucitem, i2);
+ FLPHotKeys.Controls.SetChildIndex(BtnAdd, i1);
+ }
+
+ private void NotifyIcon_MouseClick(object sender, MouseEventArgs e)
+ {
+ // 如果点击托盘图标
+
+ // 当前在前台则隐藏
+ if (Visible)
+ {
+ Hide();
+ }
+ else
+ {
+ // 否则,显示窗体
+ Show();
+
+ // 如果最小化状态,则切出窗体
+ if (WindowState == FormWindowState.Minimized)
+ {
+ WindowState = FormWindowState.Normal;
+ }
+ else
+ {
+ // 否则,激活窗体到最前端
+ TopMost = true;
+ TopMost = false;
+ }
+ }
+ }
+
+ private void FormMain_Deactivate(object sender, EventArgs e)
+ {
+ // 如果最小化,则隐藏窗体
+ if (WindowState == FormWindowState.Minimized)
+ Hide();
+ }
}
}
\ No newline at end of file
diff --git a/KeyGo/FormMain.resx b/KeyGo/FormMain.resx
index 1af7de1..2358fcf 100644
--- a/KeyGo/FormMain.resx
+++ b/KeyGo/FormMain.resx
@@ -117,4 +117,576 @@
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+ 17, 17
+
+
+
+
+ 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
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADclxI/25YSwNuWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhKt3JYTIAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANuX
+ EwPblxNK25YS1NuWEv/blhL/25YS9NuXEpPblxIgAAAAAAAAAAAAAAAAAAAAANuXEhXblxJ525YS49uW
+ Ev/blhLo25YRewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbkxAJ25YSY9uW
+ EtvblhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS6duXEj7blhIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAA25cSBNuXEk7blhLU25YS/9uWEv/blhLz25cSk9uXEiEAAAAAAAAAAAAA
+ AAAAAAAA25cSFduWEnPblhLD25YSrNqWEUUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2ZMTBdqV
+ EhXblhIq25USVtuWErbblhL525YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhJ025cSEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADclhEF3JYRUduWEtTblhL/25YS/9uW
+ EvLblxKT25cSIgAAAAAAAAAAAAAAAAAAAADalBMK2pUTK9uWEigAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AADblRIJ25YSKduWElXblhKC25YSrduWEuDblhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25cSqtuXEh0AAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANuW
+ EQbblhFV25YS1NuWEv/blhL/25YS8duXEpPblxIjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAADblhEQ25YSTtuWEqnblhLq25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ EsTblxIkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAA2pUSCNqVEljblhLU25YS/9uWEv/blhLw25cSlNuXEiQAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADblhIi25YSeduWEsvblhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhK02pYSIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADalRIJ2pUSW9uWEtTblhL/25YS/9uW
+ Eu3clhKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADblhEZ25YSi9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25cSpNuXERwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANuX
+ EQrblxFd25YS1duWEv/blhL13JYSoQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADblxIR25YSbNuW
+ EubblhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uXEpDblxIXAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAA2pcSC9qXElvblhKw25YSrNuWE1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AADdmREE25cSRduWEs7blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blxF53JcREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADalBMF2pUTI9uWEivbmxINAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAA25cREtuWEnvblhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/3JcSft2XEhIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANuWEibblhKj25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9yWEqPclhIcAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADblxI525YSzNuW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhLb3JcTPd2Y
+ FAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AADclRII25YSXduWEu/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEpLblxIc3ZkRAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANiJFAHajBMI3JERENqS
+ EBnakxEh2pQTKdqUEjLalRI925URXtuVErPblhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhLm25YTcNuVEw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADblREI25URQ9uW
+ Em3clhJ925USiNuVEpDblRKZ25USotuVEqrblhKz25YSvtuWEtfblhL425YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEtrblhJY25YSCgAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AADblRIE25USOduWEsTblhLt25YS+9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YSy9qVEUTZlBEGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAA25YTDNuWEnfblhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhKy25cRLduXEAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANuWEhTblhKt25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS9tyWEpDfmRMV6KIXAQAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADblhIQ25YSk9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhLo3JYSbdyXEgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAA2pUTBNuVEzrblhLR25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEtralhFN2pYRBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADclhEM25YSbduWEvHblhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YSsdiTExXRixcBAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2pYPAtuWESLblhKn25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ EvDblhFb25YRBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AADblhIG25YSQduWEtHblhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS99qWEs7blhKb25YSctuWEoPblhKi25YS49uWEv3blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YSwN6YEx3gmRQBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAANyWEw7clhNx25YS89uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS2NuWEoTalhNE25USItyUEgvblxIU2pYRJtuW
+ ElfblhLE25YS+NuWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEvbblhFq25YRBgAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADelhQC3JYSJtuWEqrblhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS4NuWEmzclhMY4JkUAwAA
+ AAAAAAAAAAAAAAAAAADflRUG25YROduXEsvblhL825YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS0N2W
+ EyXelhQBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANuX
+ EQbblhJD25YS0tuWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS6tuW
+ EnXblhIUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADblhJh25cS49uWEv7blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEvvblxF425cRBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAA25YSEduWEnbblhL125YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWErPclhEvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2pQSEdyX
+ Ep3blhL025YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS396XER/flxABAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANyXEQPblxIq25YSrNuWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhKI3JYTFwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAADclxNm25YS6duWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhJW25YSAgAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2pcTB9qW
+ EkXblhLS25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YSZ9yWFAUAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA25URP9uWEuHblhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YRlduWEQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAADblxIN2pYSX9uWEt7blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uV
+ EnzbkxARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANuWEVbblhLm25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uXEtvTkAwKv4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3ZkRAdqWERXalhFr25YS2NuWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blRKf2pUSJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AADalhN925YS7tuWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL73JYTOtyWEwEAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADalg8C25YREduW
+ EkPblhKb25YS4duWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS29uVEkvRixcDAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAADgmRQP2pYSt9uWEvnblhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ EoDblhICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAADclRMG3JUTG9uWETjblhFm25YSkNuXEpvblxKb25cSjNyXEmPblxJO2pYSZduW
+ EpjblhLY25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEvvblhKq3JcSKwAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA25UTa9uWEuXblhL+25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhPM25YTAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADclQ4C25UQDNuWERfblxIa25cSGtyX
+ EhbelxIL3JgSBtqXEgzblhIZ2pUSVNuWEsXblhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS8tuWErDblhIvAAAAAAAAAAAAAAAAAAAAAAAAAADbmBIa25YSgtuWEt3blhL825YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS+NyXESYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANqVEgrblhFA25YSrtuWEvfblhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL225cRv9yWEW3clhM23JYUC9yWESzalhFo25YSuduW
+ EuzblhL925YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/dlRNOAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA25YQBtqW
+ ETPalhKd25YS8NuWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEvnblhLq25YS3tuW
+ EtbblhLc25YS6duWEvnblhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YTaQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAADYlxEF2ZcRI9uXEnjblhLa25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9qVEYIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANeXEALblxIO25YTStuWErPblhLz25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhKaAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANqV
+ EwbalhEk25cSeduWEtzblhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/2pUSswAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAA15cQAtuXEgvalRNK25YStduWEvTblhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWE8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2pUTBd6XEx7clxJm25YSxduW
+ EvfblhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/clhLkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AADgmRQB3JcSB92YEx3blxJn25YSx9uWEvfblhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/QAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgmRQB25cSBt6YExzblxJo25YSyduWEvjblhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgmRQB25cSBN6Y
+ ExrclhFX25cTmNuVEdrblhL625YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAADgmRQB3JYRAtuXEwXhkg4I25MQN9yVEnfblxG/25YS9duWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/2pYRlwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/4AAANuTEAHclRIC25cRA9iT
+ FBjblRFH3JcRZdqVEoDblhKa3JYStNqWEs/blhLp25YS/duWEv/blhL/25YTttuWEgUAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAA
+
+
+
+
+ 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
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADclxI/25YSwNuWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhKt3JYTIAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANuX
+ EwPblxNK25YS1NuWEv/blhL/25YS9NuXEpPblxIgAAAAAAAAAAAAAAAAAAAAANuXEhXblxJ525YS49uW
+ Ev/blhLo25YRewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbkxAJ25YSY9uW
+ EtvblhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS6duXEj7blhIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAA25cSBNuXEk7blhLU25YS/9uWEv/blhLz25cSk9uXEiEAAAAAAAAAAAAA
+ AAAAAAAA25cSFduWEnPblhLD25YSrNqWEUUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2ZMTBdqV
+ EhXblhIq25USVtuWErbblhL525YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhJ025cSEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADclhEF3JYRUduWEtTblhL/25YS/9uW
+ EvLblxKT25cSIgAAAAAAAAAAAAAAAAAAAADalBMK2pUTK9uWEigAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AADblRIJ25YSKduWElXblhKC25YSrduWEuDblhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25cSqtuXEh0AAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANuW
+ EQbblhFV25YS1NuWEv/blhL/25YS8duXEpPblxIjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAADblhEQ25YSTtuWEqnblhLq25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ EsTblxIkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAA2pUSCNqVEljblhLU25YS/9uWEv/blhLw25cSlNuXEiQAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADblhIi25YSeduWEsvblhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhK02pYSIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADalRIJ2pUSW9uWEtTblhL/25YS/9uW
+ Eu3clhKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADblhEZ25YSi9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25cSpNuXERwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANuX
+ EQrblxFd25YS1duWEv/blhL13JYSoQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADblxIR25YSbNuW
+ EubblhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uXEpDblxIXAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAA2pcSC9qXElvblhKw25YSrNuWE1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AADdmREE25cSRduWEs7blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blxF53JcREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADalBMF2pUTI9uWEivbmxINAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAA25cREtuWEnvblhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/3JcSft2XEhIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANuWEibblhKj25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9yWEqPclhIcAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADblxI525YSzNuW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhLb3JcTPd2Y
+ FAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AADclRII25YSXduWEu/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEpLblxIc3ZkRAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANiJFAHajBMI3JERENqS
+ EBnakxEh2pQTKdqUEjLalRI925URXtuVErPblhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhLm25YTcNuVEw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADblREI25URQ9uW
+ Em3clhJ925USiNuVEpDblRKZ25USotuVEqrblhKz25YSvtuWEtfblhL425YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEtrblhJY25YSCgAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AADblRIE25USOduWEsTblhLt25YS+9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YSy9qVEUTZlBEGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAA25YTDNuWEnfblhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhKy25cRLduXEAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANuWEhTblhKt25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS9tyWEpDfmRMV6KIXAQAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADblhIQ25YSk9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhLo3JYSbdyXEgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAA2pUTBNuVEzrblhLR25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEtralhFN2pYRBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADclhEM25YSbduWEvHblhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YSsdiTExXRixcBAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2pYPAtuWESLblhKn25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ EvDblhFb25YRBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AADblhIG25YSQduWEtHblhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS99qWEs7blhKb25YSctuWEoPblhKi25YS49uWEv3blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YSwN6YEx3gmRQBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAANyWEw7clhNx25YS89uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS2NuWEoTalhNE25USItyUEgvblxIU2pYRJtuW
+ ElfblhLE25YS+NuWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEvbblhFq25YRBgAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADelhQC3JYSJtuWEqrblhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS4NuWEmzclhMY4JkUAwAA
+ AAAAAAAAAAAAAAAAAADflRUG25YROduXEsvblhL825YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS0N2W
+ EyXelhQBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANuX
+ EQbblhJD25YS0tuWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS6tuW
+ EnXblhIUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADblhJh25cS49uWEv7blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEvvblxF425cRBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAA25YSEduWEnbblhL125YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWErPclhEvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2pQSEdyX
+ Ep3blhL025YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS396XER/flxABAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANyXEQPblxIq25YSrNuWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhKI3JYTFwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAADclxNm25YS6duWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhJW25YSAgAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2pcTB9qW
+ EkXblhLS25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YSZ9yWFAUAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA25URP9uWEuHblhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YRlduWEQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAADblxIN2pYSX9uWEt7blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uV
+ EnzbkxARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANuWEVbblhLm25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uXEtvTkAwKv4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3ZkRAdqWERXalhFr25YS2NuWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blRKf2pUSJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AADalhN925YS7tuWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL73JYTOtyWEwEAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADalg8C25YREduW
+ EkPblhKb25YS4duWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS29uVEkvRixcDAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAADgmRQP2pYSt9uWEvnblhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ EoDblhICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAADclRMG3JUTG9uWETjblhFm25YSkNuXEpvblxKb25cSjNyXEmPblxJO2pYSZduW
+ EpjblhLY25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEvvblhKq3JcSKwAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA25UTa9uWEuXblhL+25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhPM25YTAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADclQ4C25UQDNuWERfblxIa25cSGtyX
+ EhbelxIL3JgSBtqXEgzblhIZ2pUSVNuWEsXblhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS8tuWErDblhIvAAAAAAAAAAAAAAAAAAAAAAAAAADbmBIa25YSgtuWEt3blhL825YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS+NyXESYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANqVEgrblhFA25YSrtuWEvfblhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL225cRv9yWEW3clhM23JYUC9yWESzalhFo25YSuduW
+ EuzblhL925YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/dlRNOAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA25YQBtqW
+ ETPalhKd25YS8NuWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEvnblhLq25YS3tuW
+ EtbblhLc25YS6duWEvnblhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YTaQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAADYlxEF2ZcRI9uXEnjblhLa25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9qVEYIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANeXEALblxIO25YTStuWErPblhLz25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhKaAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANqV
+ EwbalhEk25cSeduWEtzblhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
+ Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/2pUSswAA
+ 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
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAA
+
+
\ No newline at end of file
diff --git a/KeyGo/HotKeyItem.cs b/KeyGo/HotKeyItem.cs
index fdb75ca..dcea1c4 100644
--- a/KeyGo/HotKeyItem.cs
+++ b/KeyGo/HotKeyItem.cs
@@ -48,7 +48,7 @@ namespace KeyGo
///
/// true if enabled; otherwise, false.
///
- public bool Enabled { get; set; }
+ public bool Enabled { get; set; } = true;
///
/// Gets or sets the trigger counter.
@@ -64,7 +64,7 @@ namespace KeyGo
///
/// The creation time.
///
- public DateTime CreationTime { get; set; }
+ public DateTime CreationTime { get; set; } = DateTime.Now;
///
/// Gets or sets the last modified time.
@@ -72,6 +72,6 @@ namespace KeyGo
///
/// The last modified time.
///
- public DateTime LastModifiedTime { get; set; }
+ public DateTime LastModifiedTime { get; set; } = DateTime.Now;
}
}
\ No newline at end of file
diff --git a/KeyGo/KeyGo.cs b/KeyGo/KeyGo.cs
index 9a5385e..7a37fb0 100644
--- a/KeyGo/KeyGo.cs
+++ b/KeyGo/KeyGo.cs
@@ -1,6 +1,8 @@
using System;
using System.Collections.Generic;
+using System.Diagnostics;
using System.IO;
+using System.Linq;
using System.Threading;
using System.Windows.Forms;
using System.Xml.Serialization;
@@ -16,6 +18,7 @@ namespace KeyGo
public List Items { get; set; } = new List();
+
#region FILE IO
///
@@ -58,24 +61,6 @@ namespace KeyGo
#endregion
-
- ///
- /// Processes the hotkey.
- ///
- /// The hot key identifier.
- public void ProcessHotkey(int hotKey_id)
- {
- var hotkey = Items.Find(k => k.HotKeyID == hotKey_id);
- if (hotkey != null)
- {
- ++hotkey.TriggerCounter;
- MessageBox.Show($"ID:{hotkey.HotKeyID}\nKeys:{hotkey.HotKey}\nProcessName:{hotkey.ProcessName}\nStartupPath:{hotkey.StartupPath}", "HotKey", MessageBoxButtons.OK, MessageBoxIcon.Information);
- }
- }
-
-
-
-
#region HotKey Register
///
@@ -99,6 +84,7 @@ namespace KeyGo
}
}
+
///
/// Uns the reg all key.
///
@@ -195,5 +181,84 @@ namespace KeyGo
}
#endregion
+
+ ///
+ /// Processes the hotkey.
+ ///
+ /// The hot key identifier.
+ public void ProcessHotkey(int hotKey_id)
+ {
+ var hotkey = Items.Find(k => k.HotKeyID == hotKey_id);
+ if (hotkey != null)
+ {
+ ++hotkey.TriggerCounter;
+
+ // 热键相应逻辑:
+ // 若应用未启动:启动应用
+ // 若应用未在最前:激活窗体,推到最前
+ // 若应用已在最前:最小化窗体
+
+ var process = Process.GetProcessesByName(hotkey.ProcessName).Where(p => p.MainWindowHandle != IntPtr.Zero).ToArray().FirstOrDefault();
+ if (process != null)
+ {
+ if (AppControl.IsForegroundWindow(process))
+ AppControl.MinimizeWindow(process);
+ else
+ AppControl.ShowWindow(process);
+ }
+ else
+ {
+ if (!string.IsNullOrWhiteSpace(hotkey.StartupPath) && File.Exists(hotkey.StartupPath))
+ Process.Start(hotkey.StartupPath);
+ }
+
+ Console.WriteLine($"ID:{hotkey.HotKeyID} Keys:{hotkey.HotKey} ProcessName:{hotkey.ProcessName}\nStartupPath:{hotkey.StartupPath}");
+ }
+ }
+
+ ///
+ /// 添加一个新热键
+ ///
+ /// The item.
+ public void AddHotKey(HotKeyItem item)
+ {
+ if (item is null)
+ throw new ArgumentNullException(nameof(item));
+
+ Items.Add(item);
+ if (item.Enabled)
+ RegKey(item);
+ }
+
+ ///
+ /// 删除一个热键
+ ///
+ /// The item.
+ public void DelHotKey(HotKeyItem item)
+ {
+ if (item is null)
+ throw new ArgumentNullException(nameof(item));
+
+ Items.Remove(item);
+
+ if (item.HotKeyID != 0)
+ UnRegKey(item);
+ }
+
+ ///
+ /// 修改热键
+ ///
+ /// The item.
+ public void ChangeHotKey(HotKeyItem item)
+ {
+ if (item is null)
+ throw new ArgumentNullException(nameof(item));
+
+ // 重新注册
+ if (item.HotKeyID != 0)
+ UnRegKey(item);
+ if (item.Enabled)
+ RegKey(item);
+ }
}
}
\ No newline at end of file
diff --git a/KeyGo/KeyGo.csproj b/KeyGo/KeyGo.csproj
index b148b9f..959cbcc 100644
--- a/KeyGo/KeyGo.csproj
+++ b/KeyGo/KeyGo.csproj
@@ -22,6 +22,7 @@
DEBUG;TRACE
prompt
4
+ false
AnyCPU
@@ -32,6 +33,9 @@
prompt
4
+
+ KeyGo.ico
+
@@ -70,6 +74,12 @@
+
+ UserControl
+
+
+ UCHotKeyItem.cs
+
FormHotKey.cs
@@ -87,7 +97,11 @@
True
Resources.resx
+ True
+
+ UCHotKeyItem.cs
+
SettingsSingleFileGenerator
Settings.Designer.cs
@@ -101,8 +115,14 @@
+
-
+
+
+
+
+
+
\ No newline at end of file
diff --git a/KeyGo/KeyGo.ico b/KeyGo/KeyGo.ico
new file mode 100644
index 0000000000000000000000000000000000000000..8e3e9c2596af4cf985bb94b0f99ee2102a531fb8
GIT binary patch
literal 16749
zcmeI3dyG`o9mi)Ec3BqKnS1XnFF|=&6=-8p`qI{d5vl>fT5U10k2HqbhnV^VYN1x_(v)alSo(^E#7ASa4{E8qb7vpKN7+`bycbubpWk{9x!mW>o!Qx)
zrjRdZ?zz8n&hPuX=lp)ZbM7UPsNwI@B?LNjr+d3wmOoDTvneAer9F$0m==Owd#JgmT>q1I0H_?|AubU@Z|*m
zddt*SBKM9h{~F~3V0^W57roK{pv~t@KC2&r|EH{MYMdV@F>>BwxE2B4ASgGM6zt
zYcH&Qx$ePrf^CC0ZBD20iFxAVsxH%*;2sAV9o!9+yx8EMKy1+DmiN1sHHPfR;J=mf
zcc2~qAGfkbGH)8be%P;{a@E1V!M4GF&_(#1Cf0X#oBFl*ML!$JGrI@iH;3h=&8uKD
zNJi-e|Aojs2Be)rAN;qV$ECSUYQlk*s9wr@pK%*)8@z7o^fq(z?_gzjR`d9IWYXYX
zpyZVeHc^)f(=M0QZb0S*ptw8By}1lNs5O<&XDXX#z<-i$1Icqlr?;7-`_Xp=y7<|k
z85yyGu@q0Q`6Ont+A*mHSwSH)8)8ti!VUN7i5s
zNHfnoejENxwhbi4i(YSmXTdc+8SitYeku@u&=159wD@tCy6(25_|I10$Jej!CD!0W
z$bS(3;IV(uIAQhlLk?`rh5vW0jJ6i8Gu`skC2bo>j8`^zhPdzvt0V2vgT2%g4
zwf!Awk4;to$Lmy;~P}>1Z`GYnN*XteR4_b0q(V6hpodYc(#J`l#Z&TE@j(5
z;+yDo3Oq^Oa(uMM2C7|H$-07ag~4aDlrm^=aD%FWd4b@y)-%e|*#}8+OgJTS9y0
z&)G5K@Rv4^;fv;kjTLpzBG&{f=*ww?W3~-EeN*3T+W?;qTRkJAQ6sS|%NSLv=w>LlLZ1)c;d9OOX05C-iKd-{tQUY!134>^e7_$k-AgY`eHS{;R%4b@GLP$l=<2k=VcQ1ti|Lzw)WrH^vqpi?!Xe;qu;^lLo+G?lVeOb7
zaz1t&P@Fpzohb3ndkd^V^r@<53p%aQvt7Zm8r@uqy@uO(
zAnW-lAZOb{K-qdMm(Q`EU)J5GdEQ$UV*}>WWcbQ??pWp;q}wlv#qYCB|9AO?*a6;Y
zAbYi-F~)NJ3D)bjz7C`L(9UVG{2{z$@77wS{N>pk!UpTejbix%c@K*(y_|mbSFsIp
zoXe~Nv3vn%A>sqpfx}g7gI{#D8qND3EPfs2vPs?#XtIz0aTW9D{k+EhE#4e}H|Ih6
zm0+~jft)kTzOobC2_67D!AsyY2=mALdfScJypM|I3prnI0(UUR(TH)vbSULs7vp{>
zmo=7=lg!Jv4ZojGv#w>owFXFz5|(?N;Q48P9q
znJ;1kSqtv~zdncHumO0!Ym4ez-KSp-+zXBejNvzKDRsMvL6@rW!%FsH8nOQS=yfba
zx4vFeyP(fZ#hL@0G4Y;AUr7I)gZbLH6s~@4w=nMuKG)+6;7jN=5TTpAdx`zdILEhO
z_+dHYtHe6EmG21(p0Dgxm!Q|#Z+iXhpk?qEC7qKn2c}?yFVKIl{}^SO8yWqZyelmD
zToYdMY+nu4$<(bEwoPu_+Y+{#!tco$3$dpee2uXrHu=rn((5w%4$f8zey>A(+=MP~
zMCdcbnz|gs@&U>+c5W#CP-24QBoXs2mW?dp{Yr9IPux>_sFK*2WKRAXJx+lr+qWPS
z+XtvIrR3X#dT<_d?;}9`kGzZMw6PVRd<(xssNd>kC=$=WwST*Tz?Z^s7XD7kOy6sm*7dY(O75xAoC+IL~-_H24)Vrkqp3e?kvuR;-Cz
zvB4ilzz(Mi(PcDc#18PU=j?74rNsJY!5}E=SqI6FCbwe7w(T$;JIo~SS;M!g?d)|W
zX1*1~t&sX+bQlY=!|Nie5i^atgWH=L*c*SC?+(^WZV2C^&ZLMp=2+kqSBEn#{Qu?F
zR1N&Ghc>ROH9eg
/// 应用程序的主入口点。
///
[STAThread]
- static void Main()
+ private static void Main()
{
- Application.EnableVisualStyles();
- Application.SetCompatibleTextRenderingDefault(false);
- Application.Run(new FormMain());
+ var p = AppControl.GetCurrentRunningInstance();
+ if (p != null)
+ {
+ AppControl.ShowWindow(p);
+ }
+ else
+ {
+ Application.EnableVisualStyles();
+ Application.SetCompatibleTextRenderingDefault(false);
+ Application.Run(new FormMain());
+ }
}
}
-}
+}
\ No newline at end of file
diff --git a/KeyGo/Properties/Resources.Designer.cs b/KeyGo/Properties/Resources.Designer.cs
index 66926cc..d7af1bc 100644
--- a/KeyGo/Properties/Resources.Designer.cs
+++ b/KeyGo/Properties/Resources.Designer.cs
@@ -1,70 +1,113 @@
//------------------------------------------------------------------------------
//
// 此代码由工具生成。
-// 运行时版本: 4.0.30319.42000
+// 运行时版本:4.0.30319.42000
//
-// 对此文件的更改可能导致不正确的行为,如果
-// 重新生成代码,则所做更改将丢失。
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
//
//------------------------------------------------------------------------------
-
-namespace KeyGo.Properties
-{
+namespace KeyGo.Properties {
+ using System;
+
+
///
- /// 强类型资源类,用于查找本地化字符串等。
+ /// 一个强类型的资源类,用于查找本地化的字符串等。
///
// 此类是由 StronglyTypedResourceBuilder
// 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
- // 若要添加或删除成员,请编辑 .ResX 文件,然后重新运行 ResGen
+ // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
// (以 /str 作为命令选项),或重新生成 VS 项目。
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- internal class Resources
- {
-
+ internal class Resources {
+
private static global::System.Resources.ResourceManager resourceMan;
-
+
private static global::System.Globalization.CultureInfo resourceCulture;
-
+
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
- internal Resources()
- {
+ internal Resources() {
}
-
+
///
- /// 返回此类使用的缓存 ResourceManager 实例。
+ /// 返回此类使用的缓存的 ResourceManager 实例。
///
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
- internal static global::System.Resources.ResourceManager ResourceManager
- {
- get
- {
- if ((resourceMan == null))
- {
+ internal static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("KeyGo.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
-
+
///
/// 重写当前线程的 CurrentUICulture 属性,对
/// 使用此强类型资源类的所有资源查找执行重写。
///
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
- internal static global::System.Globalization.CultureInfo Culture
- {
- get
- {
+ internal static global::System.Globalization.CultureInfo Culture {
+ get {
return resourceCulture;
}
- set
- {
+ set {
resourceCulture = value;
}
}
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap ImgAdd {
+ get {
+ object obj = ResourceManager.GetObject("ImgAdd", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap ImgDel {
+ get {
+ object obj = ResourceManager.GetObject("ImgDel", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap ImgDisable {
+ get {
+ object obj = ResourceManager.GetObject("ImgDisable", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap ImgEnable {
+ get {
+ object obj = ResourceManager.GetObject("ImgEnable", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// 查找 System.Drawing.Bitmap 类型的本地化资源。
+ ///
+ internal static System.Drawing.Bitmap ImgSet {
+ get {
+ object obj = ResourceManager.GetObject("ImgSet", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
}
}
diff --git a/KeyGo/Properties/Resources.resx b/KeyGo/Properties/Resources.resx
index af7dbeb..91703f5 100644
--- a/KeyGo/Properties/Resources.resx
+++ b/KeyGo/Properties/Resources.resx
@@ -46,7 +46,7 @@
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
- : System.Serialization.Formatters.Binary.BinaryFormatter
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
@@ -60,6 +60,7 @@
: and then encoded with base64 encoding.
-->
+
@@ -68,9 +69,10 @@
-
+
+
@@ -85,9 +87,10 @@
-
+
+
@@ -109,9 +112,25 @@
2.0
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ ..\Resources\ImgAdd.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\ImgDel.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\ImgDisable.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\ImgEnable.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\ImgSet.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
\ No newline at end of file
diff --git a/KeyGo/Resources/ImgAdd.png b/KeyGo/Resources/ImgAdd.png
new file mode 100644
index 0000000000000000000000000000000000000000..cef8c3a093ebb1a63ae14cbd04c749d0baf62dd9
GIT binary patch
literal 528
zcmV+r0`L8aP)Jbe17I7t&)jj>{2k!Iedq&V5qJfb2L`|gum*e;{qg~@58MpQ`I$Qhz%&HFDRAZh
zu$3twkB;5u*Lf-cPnm(R2?zj1z&rw)0?GkOf~o>4gMHuuR-=t@6`PGrom`{WJiuq1
zu}uL`BimF2^qC543V23GIY3EJRX}A>JRoNtV5Kdlx!YB-`;MV#X`Kj}L$M&l09Jh0
zoDTse0NQ4Pih!|Cf!O&!xFi^p(6kuRV(9O&l~#jV4Qe&0)nJI<|F_cg=5SPHP-ReM
zaNI{@G080T-PZR5QVnhDI|0!4hDcK*nfhNvfFeK_C3RD@)~m9q$*9Zkk^tBRZo9O)
z!M^u^yU;B$(+Rx~Kq}+nXwsP#S3guHnK8Z4Rf8kZ#jlTix}hr3l<9^p2Oym>sm!rY
zFJz+-5>A?a$QadX7eiJ&wc=O{RmJx
SE!~0u0000?GVExOh!Caz*W{>PdTp**lxAv^_viEb=KbF9g|LR}osmA|
z!8-`h9spSoio|#`YCG5ChNHL+mZ3cWaJqwEz3K7Mu|;>j*SN6&${BT%net(90^a(+
z85nC%$W3R1`4QiGf#?~aq^I{2@thx&2=gBEMbma)`~ORZx=SINVaDzt>0@C#$C3re
zq^}V3O}S#GakJKtFyU3w(+7z7c}o#qqMz<|@fAP1K`bj^ZB37|+uYpIft2$^I0fJ{
z0e7S97?=RCNkVwuzD}`7O??uTMp>#ENO+q-Q{8Bje9qv!X}gysfMsY80US>
zC!*>ckpN{wyVfco9+Hkkxvl~FGpG|V>-UWnyTH=bmmz@v9?ivH#r|>u%Q2aYqUQcl
z8v}rUM}bzMa*l|K;h|&c>I{fBHa))O_x~sxxy!=3>Zb-QUH#%G15g*XGaLjC?-hjY
zoQbkY4#3bj+zrBZ!v4{^7p%;Ruo(ah6c{M*Unx+LBY1lwGPLgi)&qDXZ0Ce!Xe(?I
zQ$V&^V48sGuoagL?LGrJ1vE8cH=ae=BnHsWOc3iV2v&7Am~JnawmaKT@|FTx8H5o8
zV_18KVW{T+p?X3V1Jo9cuw0q7O`XA*xQHlmBne7-BzXpWI9U0000!eY^UloY7kmc>Ugo{`p68zPoadaGW0q~sEc-Vd
z0C(d_EGy5w$P@dkJl`YFY5X(ha$^A8fi2jI2gV$VKd>8n@L%7aAponf9ZSj~mv9Wn
z@h7g7_xIs`Jcm_SP~QKH_wn^45Pbk%#V2LsReXRCM@Hanyn{Q-`fd2MYwsigxk+vs
zOFm!0FC(2d%NApA;Z5EpGKt(2>jLmNek!Zp#e36q++Mx|IVbi6&eRLq07AIjI5|Iv
zbu)C{Y(Idt2q#iWw}{yW@H%!PIe)q%?91`pZGcKTekh!H1G}0tY5@1(Tq(5>s7<)d
zrL6kWvIvK89gnquhL|C8O7v0uo&Re9DY>ukJ09w|vC;UI1fL5RM$dymIpZX_RgVL~jblkT5d+WzmW{
z?6utXf#@Y+L?UAGF`|fV3(<}iB6a0_42US;YenQDc2hX;EKZaPNF}r_<&zuq5v~T&
z)#y?INyAEf(*_Xs=kQEDT~eG9-B8HaB{B`*jks3U)t9KHIMKX0vQ4)c4VC7k|3@{W
zY_8jJ+H#cf|F9@u+VEgIjUl7O$w#+2lD%05k@)MJ
z3;TxBdM=#lP}(^Uc9F0h(g@GKYAnyJa1vik7|YjVMd|rDD>;9;JqOlKhQ13LV$Rx!
zNewn5TZAZ|W{FJKr&%W6e41r$yg70W*_a3noiU^TXC1%|_T;!BPT0H|00000NkvXX
Hu0mjf@rr+7
literal 0
HcmV?d00001
diff --git a/KeyGo/Resources/ImgEnable.png b/KeyGo/Resources/ImgEnable.png
new file mode 100644
index 0000000000000000000000000000000000000000..fed22026e7e2904a3bbd62fa6f9874ac5f851a39
GIT binary patch
literal 760
zcmV6;vYVC`c&iD6EB8Vkzh}
z8WB_)@=wmZoOd#FXTJA|Z<1Twd(ZNpGyk*95CdLA1NKiZ044%Uffe>l0rY5nwdWC_
z=PB@`Wpgb6#sNEkoxs!j#xDGE>0+uMu-^!>;+Dn
z=5=6epU#u|HDHUq>;ulEA0EIYKp7Qqu!a$|?1~e-bztIj|bIZvr)=2}DiK
z2hsyy13ZWTR3_j3r&2sSjci@bC|3^()Tn;;ZMoQtWF@xae*wZfueM`>@J&hYy_|Cl
zMI`J<6H0=mku27A%?86gv}d(nHKsHJ$X|9Y>>5hrT$qMZvA5JI)$x=~aVX8sgE0$o
zOwxRKIWv}PBv--GaG|9kMg>NrxnDYSHL6i_pckm!3lcF0b}{i_HL|U=YndXGyP9dI
qx|%&qBUdd!TOv@i(bxZh1NaN{K%XK1eOmhf0000#*GVdF;bEndFqO%;>g{|)sU`)#aP08nL@0c`BIv0^I${EbmKiuj$Ex)WBdZ^Q4nfTekd#Rx3J
z`JBQzti+GlkGW~BE(Pzf12=IB({nzTjko
zvGFi0#-)bk){|Ps7r_ge{EE|fjcIt6Mc^3Lrrbo1zNK8oA{@uM01!xn;r_z}JZZ3d
zfSi|35q7t6C#9**d?Fs8Uod6>xPtlVf*i)%8V^yLzf|Zv#FQHQLFrz_Wxg5!@;5gk
z@ds{HI0@vF)7k>u$4C5}Pr__h
zigNsZiVe74B$O-~WgRU@DRLjDi&K_Kq%u-k7KN;ncBIWa?TY}i3t0x>ImTc_s_8NS
zBk>Y1FuI_S0f<)JRhoScKr2#kBvnC_Z&wOhaS8L)_Bhe;wN{tm!c+-CMj`FrgNUNT
zZcIQriKx|7JRZTA12Za)P_(icWqi`ri~>MU?YOM1)-{}}^^B;xwc{`-4kW|z8&)T8
z5w?T)t7i8gqs{3FLOO(Kav{-UW|a*ju~;0*0?>ex&CVhQi!#aceSSTLoinLjSB_+1
zP#j95UgKTNa0f6rdHp6sX@)qEu1Ygo%x-!4(y_c-lj@TnCOzG;-bSF(XKy1=SB8!K
gHdahKe)Z4uPjj8e6y#d2WdHyG07*qoM6N<$f_y++s{jB1
literal 0
HcmV?d00001
diff --git a/KeyGo/UCHotKeyItem.Designer.cs b/KeyGo/UCHotKeyItem.Designer.cs
new file mode 100644
index 0000000..32fdff8
--- /dev/null
+++ b/KeyGo/UCHotKeyItem.Designer.cs
@@ -0,0 +1,119 @@
+
+namespace KeyGo
+{
+ partial class UCHotKeyItem
+ {
+ ///
+ /// 必需的设计器变量。
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// 清理所有正在使用的资源。
+ ///
+ /// 如果应释放托管资源,为 true;否则为 false。
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region 组件设计器生成的代码
+
+ ///
+ /// 设计器支持所需的方法 - 不要修改
+ /// 使用代码编辑器修改此方法的内容。
+ ///
+ private void InitializeComponent()
+ {
+ this.LblHotKey = new System.Windows.Forms.Label();
+ this.LblTitle = new System.Windows.Forms.Label();
+ this.BtnEnable = new System.Windows.Forms.Button();
+ this.BtnDel = new System.Windows.Forms.Button();
+ this.BtnSet = new System.Windows.Forms.Button();
+ this.SuspendLayout();
+ //
+ // LblHotKey
+ //
+ this.LblHotKey.Font = new System.Drawing.Font("微软雅黑", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.LblHotKey.Location = new System.Drawing.Point(5, 31);
+ this.LblHotKey.Name = "LblHotKey";
+ this.LblHotKey.Size = new System.Drawing.Size(100, 20);
+ this.LblHotKey.TabIndex = 0;
+ this.LblHotKey.Text = "Ctrl+W";
+ this.LblHotKey.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
+ // LblTitle
+ //
+ this.LblTitle.AutoEllipsis = true;
+ this.LblTitle.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.LblTitle.Location = new System.Drawing.Point(5, 6);
+ this.LblTitle.Name = "LblTitle";
+ this.LblTitle.Size = new System.Drawing.Size(100, 25);
+ this.LblTitle.TabIndex = 0;
+ this.LblTitle.Text = "WeChat";
+ this.LblTitle.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
+ // BtnEnable
+ //
+ this.BtnEnable.BackgroundImage = global::KeyGo.Properties.Resources.ImgEnable;
+ this.BtnEnable.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom;
+ this.BtnEnable.Location = new System.Drawing.Point(6, 54);
+ this.BtnEnable.Name = "BtnEnable";
+ this.BtnEnable.Size = new System.Drawing.Size(30, 30);
+ this.BtnEnable.TabIndex = 1;
+ this.BtnEnable.UseVisualStyleBackColor = true;
+ this.BtnEnable.Click += new System.EventHandler(this.BtnEnable_Click);
+ //
+ // BtnDel
+ //
+ this.BtnDel.BackgroundImage = global::KeyGo.Properties.Resources.ImgDel;
+ this.BtnDel.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom;
+ this.BtnDel.Location = new System.Drawing.Point(74, 54);
+ this.BtnDel.Name = "BtnDel";
+ this.BtnDel.Size = new System.Drawing.Size(30, 30);
+ this.BtnDel.TabIndex = 3;
+ this.BtnDel.UseVisualStyleBackColor = true;
+ this.BtnDel.Click += new System.EventHandler(this.BtnDel_Click);
+ //
+ // BtnSet
+ //
+ this.BtnSet.BackgroundImage = global::KeyGo.Properties.Resources.ImgSet;
+ this.BtnSet.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom;
+ this.BtnSet.Location = new System.Drawing.Point(40, 54);
+ this.BtnSet.Name = "BtnSet";
+ this.BtnSet.Size = new System.Drawing.Size(30, 30);
+ this.BtnSet.TabIndex = 2;
+ this.BtnSet.UseVisualStyleBackColor = true;
+ this.BtnSet.Click += new System.EventHandler(this.BtnSet_Click);
+ //
+ // UCHotKeyItem
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 17F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(238)))), ((int)(((byte)(238)))));
+ this.Controls.Add(this.BtnEnable);
+ this.Controls.Add(this.BtnDel);
+ this.Controls.Add(this.BtnSet);
+ this.Controls.Add(this.LblTitle);
+ this.Controls.Add(this.LblHotKey);
+ this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
+ this.Name = "UCHotKeyItem";
+ this.Size = new System.Drawing.Size(110, 90);
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.Label LblHotKey;
+ private System.Windows.Forms.Label LblTitle;
+ private System.Windows.Forms.Button BtnSet;
+ private System.Windows.Forms.Button BtnDel;
+ private System.Windows.Forms.Button BtnEnable;
+ }
+}
diff --git a/KeyGo/UCHotKeyItem.cs b/KeyGo/UCHotKeyItem.cs
new file mode 100644
index 0000000..4dcdcfd
--- /dev/null
+++ b/KeyGo/UCHotKeyItem.cs
@@ -0,0 +1,135 @@
+using System;
+using System.Drawing;
+using System.Windows.Forms;
+
+using KeyGo.Properties;
+
+namespace KeyGo
+{
+ public partial class UCHotKeyItem : UserControl
+ {
+ public UCHotKeyItem()
+ {
+ InitializeComponent();
+ }
+
+ private HotKeyItem _HotKeyItem;
+
+ public HotKeyItem HotKeyItem
+ {
+ get => _HotKeyItem;
+ set => ShowHotKeyItem(_HotKeyItem = value);
+ }
+
+ public KeyGo KeyGo { get; set; }
+
+ ///
+ /// 值改变时触发
+ ///
+ public event EventHandler ValueChangedEvent;
+
+ private void OnValueChanged() => ValueChangedEvent?.Invoke(this, EventArgs.Empty);
+
+ ///
+ /// 显示信息
+ ///
+ /// The item.
+ private void ShowHotKeyItem(HotKeyItem item)
+ {
+ LblTitle.Text = item.ProcessName;
+ LblHotKey.Text = item.HotKey;
+ HotKeyBtnEnable = item.Enabled;
+ if (item.Enabled && item.HotKeyID == 0)
+ LblHotKey.ForeColor = Color.Red;
+ else
+ LblHotKey.ForeColor = Color.Black;
+ }
+
+ ///
+ /// 热键使能按钮状态
+ ///
+ private bool HotKeyBtnEnable
+ {
+ set
+ {
+ if (value)
+ BtnEnable.BackgroundImage = Resources.ImgEnable;
+ else
+ BtnEnable.BackgroundImage = Resources.ImgDisable;
+ }
+ }
+
+ ///
+ /// 切换热键使能状态
+ ///
+ private void BtnEnable_Click(object sender, EventArgs e)
+ {
+ try
+ {
+ if (HotKeyItem.Enabled)
+ {
+ KeyGo.UnRegKey(HotKeyItem);
+ HotKeyItem.Enabled = false;
+ }
+ else
+ {
+ KeyGo.RegKey(HotKeyItem);
+ HotKeyItem.Enabled = true;
+ }
+ HotKeyBtnEnable = HotKeyItem.Enabled;
+ OnValueChanged();
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show("在切换热键使能时异常:" + ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ }
+ }
+
+ ///
+ /// 设置热键参数
+ ///
+ private void BtnSet_Click(object sender, EventArgs e)
+ {
+ string oldKey = HotKeyItem.HotKey;
+ var frm = new FormHotKey()
+ {
+ HotKeyItem = this.HotKeyItem,
+ };
+ if (frm.ShowDialog() == DialogResult.OK)
+ {
+ var item = frm.HotKeyItem;
+ // 如果热键发生改变,则需要重新注册
+ if (oldKey != item.HotKey)
+ {
+ try
+ {
+ KeyGo.ChangeHotKey(item);
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show("在重新注册热键时异常:" + ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ }
+ }
+ ShowHotKeyItem(item);
+ OnValueChanged();
+ }
+ }
+
+ ///
+ /// 删除热键项
+ ///
+ private void BtnDel_Click(object sender, EventArgs e)
+ {
+ try
+ {
+ KeyGo.DelHotKey(HotKeyItem);
+ Parent?.Controls.Remove(this);
+ OnValueChanged();
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show("在注销热键时异常:" + ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/KeyGo/UCHotKeyItem.resx b/KeyGo/UCHotKeyItem.resx
new file mode 100644
index 0000000..1af7de1
--- /dev/null
+++ b/KeyGo/UCHotKeyItem.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file