1. 完成 UI界面

2. 完成 核心功能
3. 增加 若无热键则默认增加自身唤出热键
4. 增加 应用程序图标
5. 增加 系统托盘功能,可以通过托盘控制应用显示隐藏,最小化默认隐藏窗口
This commit is contained in:
筱傑 2021-04-28 21:33:58 +08:00
parent 723a9f16f5
commit 24c36acfe8
21 changed files with 1385 additions and 122 deletions

View File

@ -5,13 +5,13 @@ using System.Runtime.InteropServices;
namespace KeyGo
{
public class AppControl
public static class AppControl
{
/// <summary>
/// 获取本应用程序当前正在运行的进程若不存在则返回null
/// </summary>
/// <returns>当前正在运行的进程</returns>
private static Process GetCurrentRunningInstance()
public static Process GetCurrentRunningInstance()
{
Process current = Process.GetCurrentProcess();
Process[] processes = Process.GetProcessesByName(current.ProcessName);
@ -36,21 +36,28 @@ namespace KeyGo
/// 显示指定实例窗体
/// </summary>
/// <param name="instance">The instance.</param>
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);
}
}
/// <summary>
/// 隐藏指定实例窗体
/// </summary>
/// <param name="instance">The instance.</param>
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();
}
}

View File

@ -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();

View File

@ -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;
}
}
}
}

View File

@ -29,41 +29,70 @@ namespace KeyGo
/// </summary>
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;
}
}

View File

@ -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();
}
}
}

View File

@ -117,4 +117,576 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="NotifyIcon.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="NotifyIcon.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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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
</value>
</data>
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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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
</value>
</data>
</root>

View File

@ -48,7 +48,7 @@ namespace KeyGo
/// <value>
/// <c>true</c> if enabled; otherwise, <c>false</c>.
/// </value>
public bool Enabled { get; set; }
public bool Enabled { get; set; } = true;
/// <summary>
/// Gets or sets the trigger counter.
@ -64,7 +64,7 @@ namespace KeyGo
/// <value>
/// The creation time.
/// </value>
public DateTime CreationTime { get; set; }
public DateTime CreationTime { get; set; } = DateTime.Now;
/// <summary>
/// Gets or sets the last modified time.
@ -72,6 +72,6 @@ namespace KeyGo
/// <value>
/// The last modified time.
/// </value>
public DateTime LastModifiedTime { get; set; }
public DateTime LastModifiedTime { get; set; } = DateTime.Now;
}
}

View File

@ -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<HotKeyItem> Items { get; set; } = new List<HotKeyItem>();
#region FILE IO
/// <summary>
@ -58,24 +61,6 @@ namespace KeyGo
#endregion
/// <summary>
/// Processes the hotkey.
/// </summary>
/// <param name="hotKey_id">The hot key identifier.</param>
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
/// <summary>
@ -99,6 +84,7 @@ namespace KeyGo
}
}
/// <summary>
/// Uns the reg all key.
/// </summary>
@ -195,5 +181,84 @@ namespace KeyGo
}
#endregion
/// <summary>
/// Processes the hotkey.
/// </summary>
/// <param name="hotKey_id">The hot key identifier.</param>
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}");
}
}
/// <summary>
/// 添加一个新热键
/// </summary>
/// <param name="item">The item.</param>
public void AddHotKey(HotKeyItem item)
{
if (item is null)
throw new ArgumentNullException(nameof(item));
Items.Add(item);
if (item.Enabled)
RegKey(item);
}
/// <summary>
/// 删除一个热键
/// </summary>
/// <param name="item">The item.</param>
public void DelHotKey(HotKeyItem item)
{
if (item is null)
throw new ArgumentNullException(nameof(item));
Items.Remove(item);
if (item.HotKeyID != 0)
UnRegKey(item);
}
/// <summary>
/// 修改热键
/// </summary>
/// <param name="item">The item.</param>
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);
}
}
}

View File

@ -22,6 +22,7 @@
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
@ -32,6 +33,9 @@
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup>
<ApplicationIcon>KeyGo.ico</ApplicationIcon>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
@ -70,6 +74,12 @@
<Compile Include="HotKeyItem.cs" />
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="UCHotKeyItem.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="UCHotKeyItem.Designer.cs">
<DependentUpon>UCHotKeyItem.cs</DependentUpon>
</Compile>
<EmbeddedResource Include="FormHotKey.resx">
<DependentUpon>FormHotKey.cs</DependentUpon>
</EmbeddedResource>
@ -87,7 +97,11 @@
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
<EmbeddedResource Include="UCHotKeyItem.resx">
<DependentUpon>UCHotKeyItem.cs</DependentUpon>
</EmbeddedResource>
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
@ -101,8 +115,14 @@
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<ItemGroup />
<ItemGroup>
<Folder Include="Resources\" />
<Content Include="KeyGo.ico" />
<Content Include="Resources\ImgAdd.png" />
<Content Include="Resources\ImgDel.png" />
<None Include="Resources\ImgEnable.png" />
<None Include="Resources\ImgDisable.png" />
<Content Include="Resources\ImgSet.png" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

BIN
KeyGo/KeyGo.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

View File

@ -1,22 +1,27 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace KeyGo
{
static class Program
internal static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[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());
}
}
}
}
}

View File

@ -1,70 +1,113 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
// 运行时版本: 4.0.30319.42000
// 运行时版本:4.0.30319.42000
//
// 对此文件的更改可能导致不正确的行为,如果
// 重新生成代码,则所做更改将丢失。
// 对此文件的更改可能导致不正确的行为,并且如果
// 重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------
namespace KeyGo.Properties
{
namespace KeyGo.Properties {
using System;
/// <summary>
/// 强类型资源类,用于查找本地化字符串等。
/// 一个强类型资源类,用于查找本地化字符串等。
/// </summary>
// 此类是由 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() {
}
/// <summary>
/// 返回此类使用的缓存 ResourceManager 实例。
/// 返回此类使用的缓存 ResourceManager 实例。
/// </summary>
[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;
}
}
/// <summary>
/// 重写当前线程的 CurrentUICulture 属性,对
/// 使用此强类型资源类的所有资源查找执行重写。
/// </summary>
[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;
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap ImgAdd {
get {
object obj = ResourceManager.GetObject("ImgAdd", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap ImgDel {
get {
object obj = ResourceManager.GetObject("ImgDel", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap ImgDisable {
get {
object obj = ResourceManager.GetObject("ImgDisable", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap ImgEnable {
get {
object obj = ResourceManager.GetObject("ImgEnable", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap ImgSet {
get {
object obj = ResourceManager.GetObject("ImgSet", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
}
}

View File

@ -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.
-->
<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">
@ -68,9 +69,10 @@
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<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">
@ -85,9 +87,10 @@
<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" msdata:Ordinal="1" />
<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">
@ -109,9 +112,25 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="ImgAdd" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\ImgAdd.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="ImgDel" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\ImgDel.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="ImgDisable" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\ImgDisable.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="ImgEnable" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\ImgEnable.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="ImgSet" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\ImgSet.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>

BIN
KeyGo/Resources/ImgAdd.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 528 B

BIN
KeyGo/Resources/ImgDel.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 716 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 829 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 760 B

BIN
KeyGo/Resources/ImgSet.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 750 B

119
KeyGo/UCHotKeyItem.Designer.cs generated Normal file
View File

@ -0,0 +1,119 @@

namespace KeyGo
{
partial class UCHotKeyItem
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region
/// <summary>
/// 设计器支持所需的方法 - 不要修改
/// 使用代码编辑器修改此方法的内容。
/// </summary>
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;
}
}

135
KeyGo/UCHotKeyItem.cs Normal file
View File

@ -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; }
/// <summary>
/// 值改变时触发
/// </summary>
public event EventHandler ValueChangedEvent;
private void OnValueChanged() => ValueChangedEvent?.Invoke(this, EventArgs.Empty);
/// <summary>
/// 显示信息
/// </summary>
/// <param name="item">The item.</param>
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;
}
/// <summary>
/// 热键使能按钮状态
/// </summary>
private bool HotKeyBtnEnable
{
set
{
if (value)
BtnEnable.BackgroundImage = Resources.ImgEnable;
else
BtnEnable.BackgroundImage = Resources.ImgDisable;
}
}
/// <summary>
/// 切换热键使能状态
/// </summary>
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);
}
}
/// <summary>
/// 设置热键参数
/// </summary>
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();
}
}
/// <summary>
/// 删除热键项
/// </summary>
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);
}
}
}
}

120
KeyGo/UCHotKeyItem.resx Normal file
View File

@ -0,0 +1,120 @@
<?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>
</root>