Add hotkey global switch

This commit is contained in:
2023-09-29 15:04:30 +08:00
parent 1c49c41b71
commit 749f324f7d
13 changed files with 414 additions and 236 deletions

View File

@ -76,6 +76,9 @@
<setting name="IsUpgraded" serializeAs="String">
<value>False</value>
</setting>
<setting name="IsHotkeyEenabled" serializeAs="String">
<value>True</value>
</setting>
</GrasscutterTools.Properties.Settings>
</userSettings>
</configuration>

View File

@ -587,6 +587,30 @@ namespace GrasscutterTools.Forms
if (i < ListPages.Items.Count)
ListPages.SelectedIndex = i;
}
else if (Common.KeyGo.IsEnabled == false)
{
foreach (var hotkeyItem in Common.KeyGo.Items)
{
if (!hotkeyItem.IsEnabled) continue;
var t = hotkeyItem.HotKey.LastIndexOf('+');
var key = (t >= 0) ? hotkeyItem.HotKey.Substring(t+1) : hotkeyItem.HotKey;
if (e.KeyCode != (Keys)Enum.Parse(typeof(Keys), key.Trim()))
continue;
if (t >= 0)
{
if (hotkeyItem.HotKey.Contains("Ctrl") && !e.Control)
continue;
if (hotkeyItem.HotKey.Contains("Shift") && !e.Shift)
continue;
if (hotkeyItem.HotKey.Contains("Alt") && !e.Alt)
continue;
}
BeginInvoke(new Func<Task>(() => RunRawCommands(hotkeyItem.Commands)));
break;
}
}
}
/// <summary>

View File

@ -34,6 +34,7 @@
this.ColHotKey = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.ColCommand = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.GrpHotKeyList = new System.Windows.Forms.GroupBox();
this.ChkEnableGlobal = new System.Windows.Forms.CheckBox();
this.BtnRemove = new System.Windows.Forms.Button();
this.BtnAddOrUpdate = new System.Windows.Forms.Button();
this.TxtHotKey = new System.Windows.Forms.TextBox();
@ -45,12 +46,12 @@
//
// LvHotKeyList
//
resources.ApplyResources(this.LvHotKeyList, "LvHotKeyList");
this.LvHotKeyList.CheckBoxes = true;
this.LvHotKeyList.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.ColTag,
this.ColHotKey,
this.ColCommand});
resources.ApplyResources(this.LvHotKeyList, "LvHotKeyList");
this.LvHotKeyList.HideSelection = false;
this.LvHotKeyList.Name = "LvHotKeyList";
this.LvHotKeyList.UseCompatibleStateImageBehavior = false;
@ -73,10 +74,20 @@
// GrpHotKeyList
//
resources.ApplyResources(this.GrpHotKeyList, "GrpHotKeyList");
this.GrpHotKeyList.Controls.Add(this.ChkEnableGlobal);
this.GrpHotKeyList.Controls.Add(this.LvHotKeyList);
this.GrpHotKeyList.Name = "GrpHotKeyList";
this.GrpHotKeyList.TabStop = false;
//
// ChkEnableGlobal
//
resources.ApplyResources(this.ChkEnableGlobal, "ChkEnableGlobal");
this.ChkEnableGlobal.Checked = true;
this.ChkEnableGlobal.CheckState = System.Windows.Forms.CheckState.Checked;
this.ChkEnableGlobal.Name = "ChkEnableGlobal";
this.ChkEnableGlobal.UseVisualStyleBackColor = true;
this.ChkEnableGlobal.CheckedChanged += new System.EventHandler(this.ChkEnableGlobal_CheckedChanged);
//
// BtnRemove
//
resources.ApplyResources(this.BtnRemove, "BtnRemove");
@ -127,6 +138,7 @@
this.Controls.Add(this.LblTagLabel);
this.Name = "PageHotKey";
this.GrpHotKeyList.ResumeLayout(false);
this.GrpHotKeyList.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
@ -145,5 +157,6 @@
private System.Windows.Forms.Label LblHotKeyLabel;
private System.Windows.Forms.TextBox TxtTag;
private System.Windows.Forms.Label LblTagLabel;
private System.Windows.Forms.CheckBox ChkEnableGlobal;
}
}

View File

@ -53,6 +53,38 @@ namespace GrasscutterTools.Pages
/// </summary>
private bool HotKeysChanged;
/// <summary>
/// 加载用户热键列表
/// </summary>
private List<HotKeyItem> LoadKeyItems()
{
List<HotKeyItem> list = null;
try
{
Logger.I(TAG, "Loading HotKey json file from: " + HotKeysFilePath);
list = JsonConvert.DeserializeObject<List<HotKeyItem>>(File.ReadAllText(HotKeysFilePath));
}
catch (Exception ex)
{
Logger.E(TAG, "Parsing HotKeys.json failed", ex);
}
if (list == null || list.Count == 0)
{
// 默认把移动命令加到列表
list = new List<HotKeyItem>
{
new("↑", "/tp ^ ^ ^10", "NumPad8", false),
new("↓", "/tp ^ ^ ^-10", "NumPad5", false),
new("←", "/tp ^-10 ^ ^", "NumPad4", false),
new("→", "/tp ^10 ^ ^", "NumPad6", false),
new("↑^↑", "/tp ~ ~10 ~", "NumPad0", false),
};
}
return list;
}
/// <summary>
/// 初始化快捷键
/// </summary>
@ -62,15 +94,16 @@ namespace GrasscutterTools.Pages
return;
try
{
Logger.I(TAG, "Loading HotKey json file from: " + HotKeysFilePath);
Common.KeyGo.Items = JsonConvert.DeserializeObject<List<HotKeyItem>>(File.ReadAllText(HotKeysFilePath));
// 还原设置
Common.KeyGo.IsEnabled = ChkEnableGlobal.Checked = Settings.Default.IsHotkeyEenabled;
Common.KeyGo.Items = LoadKeyItems();
LvHotKeyList.Items.AddRange(Common.KeyGo.Items.Select(HotKeyItemToViewItem).ToArray());
Logger.I(TAG, "Start Register All HotKeys");
Common.KeyGo.RegAllKey();
}
catch (Exception ex)
{
Logger.W(TAG, "Parsing HotKeys.json failed.", ex);
Logger.W(TAG, "Failed to InitHotKeys", ex);
}
}
@ -79,6 +112,8 @@ namespace GrasscutterTools.Pages
/// </summary>
public override void OnClosed()
{
Settings.Default.IsHotkeyEenabled = Common.KeyGo.IsEnabled;
Logger.I(TAG, "Cancel all HotKeys");
Common.KeyGo.UnRegAllKey();
@ -90,7 +125,7 @@ namespace GrasscutterTools.Pages
/// <summary>
/// 将实体转为视图对象
/// </summary>
private static ListViewItem HotKeyItemToViewItem(HotKeyItem item) => new ListViewItem(new[]
private static ListViewItem HotKeyItemToViewItem(HotKeyItem item) => new(new[]
{
item.Tag,
item.HotKey,
@ -130,12 +165,7 @@ namespace GrasscutterTools.Pages
var i = Common.KeyGo.Items.FindIndex(it => it.Tag == tag);
if (i == -1)
{
var item = new HotKeyItem
{
Tag = tag,
Commands = commands,
HotKey = hotKey
};
var item = new HotKeyItem(tag, commands, hotKey);
Logger.I(TAG, $"New HotKey item [{hotKey}]");
Common.KeyGo.AddHotKey(item);
LvHotKeyList.Items.Add(HotKeyItemToViewItem(item));
@ -260,5 +290,22 @@ namespace GrasscutterTools.Pages
TxtHotKey.Tag = "";
TxtTag.Text = tag;
}
/// <summary>
/// 切换启用全局快捷键时触发
/// </summary>
private void ChkEnableGlobal_CheckedChanged(object sender, EventArgs e)
{
try
{
Common.KeyGo.IsEnabled = ChkEnableGlobal.Checked;
}
catch (Exception ex)
{
Logger.E(TAG, "Failed to switch global hotkeys", ex);
MessageBox.Show(ex.Message, Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
}
}

View File

@ -126,6 +126,16 @@
<data name="ColCommand.Text" xml:space="preserve">
<value>Commands</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="ChkEnableGlobal.Location" type="System.Drawing.Point, System.Drawing">
<value>523, -2</value>
</data>
<data name="ChkEnableGlobal.Size" type="System.Drawing.Size, System.Drawing">
<value>111, 21</value>
</data>
<data name="ChkEnableGlobal.Text" xml:space="preserve">
<value>Global HotKey</value>
</data>
<data name="GrpHotKeyList.Text" xml:space="preserve">
<value>HotKeys</value>
</data>
@ -135,7 +145,6 @@
<data name="BtnAddOrUpdate.Text" xml:space="preserve">
<value>√ AddOrUpdate</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="LblHotKeyLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>50, 17</value>
</data>

View File

@ -117,215 +117,92 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="ColTag.Text" xml:space="preserve">
<value>标签</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="ColTag.Width" type="System.Int32, mscorlib">
<value>150</value>
</data>
<data name="ColHotKey.Text" xml:space="preserve">
<value>快捷键</value>
</data>
<data name="ColHotKey.Width" type="System.Int32, mscorlib">
<value>100</value>
</data>
<data name="ColCommand.Text" xml:space="preserve">
<value>命令</value>
</data>
<data name="ColCommand.Width" type="System.Int32, mscorlib">
<value>350</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="LvHotKeyList.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
<data name="&gt;&gt;BtnRemove.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="LvHotKeyList.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 19</value>
<data name="BtnRemove.Size" type="System.Drawing.Size, System.Drawing">
<value>100, 30</value>
</data>
<data name="LvHotKeyList.Size" type="System.Drawing.Size, System.Drawing">
<value>634, 178</value>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="TxtHotKey.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="LvHotKeyList.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
<data name="ChkEnableGlobal.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="&gt;&gt;LvHotKeyList.Name" xml:space="preserve">
<value>LvHotKeyList</value>
</data>
<data name="&gt;&gt;LvHotKeyList.Type" xml:space="preserve">
<value>System.Windows.Forms.ListView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;LvHotKeyList.Parent" xml:space="preserve">
<value>GrpHotKeyList</value>
</data>
<data name="&gt;&gt;LvHotKeyList.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="GrpHotKeyList.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Bottom, Left, Right</value>
</data>
<data name="GrpHotKeyList.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 3</value>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>GrasscutterTools.Pages.BasePage, GrasscutterTools, Version=1.13.0.0, Culture=neutral, PublicKeyToken=de2b1c089621e923</value>
</data>
<data name="GrpHotKeyList.Size" type="System.Drawing.Size, System.Drawing">
<value>640, 200</value>
</data>
<data name="GrpHotKeyList.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="GrpHotKeyList.Text" xml:space="preserve">
<value>快捷执行列表</value>
</data>
<data name="&gt;&gt;GrpHotKeyList.Name" xml:space="preserve">
<value>GrpHotKeyList</value>
</data>
<data name="&gt;&gt;GrpHotKeyList.Type" xml:space="preserve">
<value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;GrpHotKeyList.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;GrpHotKeyList.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="BtnRemove.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Right</value>
</data>
<data name="BtnRemove.Location" type="System.Drawing.Point, System.Drawing">
<value>543, 206</value>
</data>
<data name="BtnRemove.Size" type="System.Drawing.Size, System.Drawing">
<value>100, 30</value>
</data>
<data name="BtnRemove.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
</data>
<data name="BtnRemove.Text" xml:space="preserve">
<value>- 删除</value>
</data>
<data name="&gt;&gt;BtnRemove.Name" xml:space="preserve">
<value>BtnRemove</value>
</data>
<data name="&gt;&gt;BtnRemove.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;BtnRemove.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;BtnRemove.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="BtnAddOrUpdate.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Right</value>
</data>
<data name="BtnAddOrUpdate.Location" type="System.Drawing.Point, System.Drawing">
<value>387, 206</value>
</data>
<data name="BtnAddOrUpdate.Size" type="System.Drawing.Size, System.Drawing">
<value>150, 30</value>
</data>
<data name="BtnAddOrUpdate.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="BtnAddOrUpdate.Text" xml:space="preserve">
<value>√ 添加或更新</value>
<data name="LblHotKeyLabel.Location" type="System.Drawing.Point, System.Drawing">
<value>212, 213</value>
</data>
<data name="&gt;&gt;BtnAddOrUpdate.Name" xml:space="preserve">
<value>BtnAddOrUpdate</value>
</data>
<data name="&gt;&gt;BtnAddOrUpdate.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;BtnAddOrUpdate.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;BtnAddOrUpdate.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="TxtHotKey.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left, Right</value>
</data>
<data name="TxtHotKey.Location" type="System.Drawing.Point, System.Drawing">
<value>262, 210</value>
</data>
<data name="TxtHotKey.Size" type="System.Drawing.Size, System.Drawing">
<value>119, 23</value>
</data>
<data name="TxtHotKey.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="TxtHotKey.TextAlign" type="System.Windows.Forms.HorizontalAlignment, System.Windows.Forms">
<value>Center</value>
</data>
<data name="&gt;&gt;TxtHotKey.Name" xml:space="preserve">
<value>TxtHotKey</value>
</data>
<data name="&gt;&gt;TxtHotKey.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;TxtHotKey.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;TxtHotKey.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="LblHotKeyLabel.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left, Right</value>
</data>
<data name="LblHotKeyLabel.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="LblHotKeyLabel.Location" type="System.Drawing.Point, System.Drawing">
<value>212, 213</value>
</data>
<data name="LblHotKeyLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>44, 17</value>
</data>
<data name="LblHotKeyLabel.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="LblHotKeyLabel.Text" xml:space="preserve">
<value>快捷键</value>
</data>
<data name="&gt;&gt;LblHotKeyLabel.Name" xml:space="preserve">
<value>LblHotKeyLabel</value>
</data>
<data name="&gt;&gt;LblHotKeyLabel.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;LblHotKeyLabel.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;LblHotKeyLabel.ZOrder" xml:space="preserve">
<value>5</value>
</data>
<data name="TxtTag.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left, Right</value>
</data>
<data name="TxtTag.Location" type="System.Drawing.Point, System.Drawing">
<value>41, 210</value>
</data>
<data name="TxtTag.Size" type="System.Drawing.Size, System.Drawing">
<value>165, 23</value>
<data name="BtnRemove.Location" type="System.Drawing.Point, System.Drawing">
<value>543, 206</value>
</data>
<data name="TxtTag.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="&gt;&gt;TxtTag.Name" xml:space="preserve">
<value>TxtTag</value>
</data>
<data name="&gt;&gt;TxtTag.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;TxtTag.Parent" xml:space="preserve">
<data name="&gt;&gt;BtnRemove.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;LvHotKeyList.Type" xml:space="preserve">
<value>System.Windows.Forms.ListView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="BtnAddOrUpdate.Location" type="System.Drawing.Point, System.Drawing">
<value>387, 206</value>
</data>
<data name="TxtTag.Size" type="System.Drawing.Size, System.Drawing">
<value>165, 23</value>
</data>
<data name="&gt;&gt;BtnAddOrUpdate.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="ChkEnableGlobal.Location" type="System.Drawing.Point, System.Drawing">
<value>547, -2</value>
</data>
<data name="LblHotKeyLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>44, 17</value>
</data>
<data name="GrpHotKeyList.Text" xml:space="preserve">
<value>快捷执行列表</value>
</data>
<data name="ColHotKey.Width" type="System.Int32, mscorlib">
<value>100</value>
</data>
<data name="&gt;&gt;TxtTag.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="LblTagLabel.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
<data name="&gt;&gt;LblTagLabel.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;TxtHotKey.Name" xml:space="preserve">
<value>TxtHotKey</value>
</data>
<data name="&gt;&gt;LblHotKeyLabel.ZOrder" xml:space="preserve">
<value>5</value>
</data>
<data name="&gt;&gt;ColCommand.Type" xml:space="preserve">
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="TxtTag.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left, Right</value>
</data>
<data name="&gt;&gt;ColTag.Type" xml:space="preserve">
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;ColHotKey.Type" xml:space="preserve">
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;TxtHotKey.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="LblTagLabel.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@ -333,55 +210,208 @@
<data name="LblTagLabel.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 213</value>
</data>
<data name="LblTagLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>32, 17</value>
<data name="BtnAddOrUpdate.Size" type="System.Drawing.Size, System.Drawing">
<value>150, 30</value>
</data>
<data name="LblTagLabel.TabIndex" type="System.Int32, mscorlib">
<data name="LblHotKeyLabel.Text" xml:space="preserve">
<value>快捷键</value>
</data>
<data name="LvHotKeyList.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="LblTagLabel.Text" xml:space="preserve">
<value>标签</value>
<data name="LblTagLabel.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
</data>
<data name="&gt;&gt;LblTagLabel.Name" xml:space="preserve">
<value>LblTagLabel</value>
</data>
<data name="&gt;&gt;LblTagLabel.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;LblTagLabel.Parent" xml:space="preserve">
<data name="&gt;&gt;LblHotKeyLabel.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;TxtTag.Name" xml:space="preserve">
<value>TxtTag</value>
</data>
<data name="&gt;&gt;GrpHotKeyList.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="LvHotKeyList.Size" type="System.Drawing.Size, System.Drawing">
<value>634, 178</value>
</data>
<data name="&gt;&gt;LblTagLabel.ZOrder" xml:space="preserve">
<value>6</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>7, 17</value>
<data name="&gt;&gt;LvHotKeyList.Name" xml:space="preserve">
<value>LvHotKeyList</value>
</data>
<data name="&gt;&gt;ChkEnableGlobal.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;ColTag.Name" xml:space="preserve">
<value>ColTag</value>
</data>
<data name="&gt;&gt;ColTag.Type" xml:space="preserve">
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<data name="TxtHotKey.Location" type="System.Drawing.Point, System.Drawing">
<value>262, 210</value>
</data>
<data name="&gt;&gt;ColHotKey.Name" xml:space="preserve">
<value>ColHotKey</value>
<data name="ColCommand.Text" xml:space="preserve">
<value>命令</value>
</data>
<data name="&gt;&gt;ColHotKey.Type" xml:space="preserve">
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<data name="TxtHotKey.Size" type="System.Drawing.Size, System.Drawing">
<value>119, 23</value>
</data>
<data name="&gt;&gt;ColCommand.Name" xml:space="preserve">
<value>ColCommand</value>
<data name="&gt;&gt;BtnRemove.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;ColCommand.Type" xml:space="preserve">
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<data name="&gt;&gt;LvHotKeyList.Parent" xml:space="preserve">
<value>GrpHotKeyList</value>
</data>
<data name="&gt;&gt;ChkEnableGlobal.Type" xml:space="preserve">
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="BtnRemove.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
</data>
<data name="LvHotKeyList.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="&gt;&gt;GrpHotKeyList.Type" xml:space="preserve">
<value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;GrpHotKeyList.Name" xml:space="preserve">
<value>GrpHotKeyList</value>
</data>
<data name="ColHotKey.Text" xml:space="preserve">
<value>快捷键</value>
</data>
<data name="&gt;&gt;LblTagLabel.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;TxtTag.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;BtnRemove.Name" xml:space="preserve">
<value>BtnRemove</value>
</data>
<data name="&gt;&gt;TxtHotKey.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="LblTagLabel.Text" xml:space="preserve">
<value>标签</value>
</data>
<data name="ChkEnableGlobal.Text" xml:space="preserve">
<value>全局快捷键</value>
</data>
<data name="BtnAddOrUpdate.Text" xml:space="preserve">
<value>√ 添加或更新</value>
</data>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>7, 17</value>
</data>
<data name="ColTag.Width" type="System.Int32, mscorlib">
<value>150</value>
</data>
<data name="&gt;&gt;LblTagLabel.Name" xml:space="preserve">
<value>LblTagLabel</value>
</data>
<data name="&gt;&gt;TxtHotKey.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="LvHotKeyList.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 19</value>
</data>
<data name="LblHotKeyLabel.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="LblHotKeyLabel.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="ChkEnableGlobal.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="LblTagLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>32, 17</value>
</data>
<data name="&gt;&gt;ChkEnableGlobal.Name" xml:space="preserve">
<value>ChkEnableGlobal</value>
</data>
<data name="BtnAddOrUpdate.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="&gt;&gt;LblHotKeyLabel.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>PageHotKey</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>GrasscutterTools.Pages.BasePage, GrasscutterTools, Version=1.11.0.0, Culture=neutral, PublicKeyToken=de2b1c089621e923</value>
<data name="LblHotKeyLabel.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left, Right</value>
</data>
<data name="&gt;&gt;BtnAddOrUpdate.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="GrpHotKeyList.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Bottom, Left, Right</value>
</data>
<data name="&gt;&gt;ColHotKey.Name" xml:space="preserve">
<value>ColHotKey</value>
</data>
<data name="&gt;&gt;LblHotKeyLabel.Name" xml:space="preserve">
<value>LblHotKeyLabel</value>
</data>
<data name="ColTag.Text" xml:space="preserve">
<value>标签</value>
</data>
<data name="&gt;&gt;ColCommand.Name" xml:space="preserve">
<value>ColCommand</value>
</data>
<data name="&gt;&gt;LvHotKeyList.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="ChkEnableGlobal.Size" type="System.Drawing.Size, System.Drawing">
<value>87, 21</value>
</data>
<data name="&gt;&gt;TxtTag.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="BtnRemove.Text" xml:space="preserve">
<value>- 删除</value>
</data>
<data name="BtnRemove.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Right</value>
</data>
<data name="BtnAddOrUpdate.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Right</value>
</data>
<data name="ColCommand.Width" type="System.Int32, mscorlib">
<value>350</value>
</data>
<data name="TxtTag.Location" type="System.Drawing.Point, System.Drawing">
<value>41, 210</value>
</data>
<data name="TxtHotKey.TextAlign" type="System.Windows.Forms.HorizontalAlignment, System.Windows.Forms">
<value>Center</value>
</data>
<data name="LblTagLabel.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="&gt;&gt;ChkEnableGlobal.Parent" xml:space="preserve">
<value>GrpHotKeyList</value>
</data>
<data name="GrpHotKeyList.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="GrpHotKeyList.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 3</value>
</data>
<data name="&gt;&gt;BtnAddOrUpdate.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="TxtHotKey.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left, Right</value>
</data>
<data name="&gt;&gt;GrpHotKeyList.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="ChkEnableGlobal.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
</root>

View File

@ -126,6 +126,16 @@
<data name="ColCommand.Text" xml:space="preserve">
<value>Commands</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="ChkEnableGlobal.Location" type="System.Drawing.Point, System.Drawing">
<value>523, -2</value>
</data>
<data name="ChkEnableGlobal.Size" type="System.Drawing.Size, System.Drawing">
<value>111, 21</value>
</data>
<data name="ChkEnableGlobal.Text" xml:space="preserve">
<value>Global HotKey</value>
</data>
<data name="GrpHotKeyList.Text" xml:space="preserve">
<value>HotKeys</value>
</data>
@ -135,7 +145,6 @@
<data name="BtnAddOrUpdate.Text" xml:space="preserve">
<value>√ AddOrUpdate</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="LblHotKeyLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>50, 17</value>
</data>

View File

@ -123,6 +123,9 @@
<data name="ColHotKey.Text" xml:space="preserve">
<value>快捷鍵</value>
</data>
<data name="ChkEnableGlobal.Text" xml:space="preserve">
<value>全域快速鍵</value>
</data>
<data name="GrpHotKeyList.Text" xml:space="preserve">
<value>快捷執行列表</value>
</data>

View File

@ -24,9 +24,6 @@ using System.IO;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
using Eavesdrop;
using GrasscutterTools.DispatchServer;
using GrasscutterTools.DispatchServer.Model;
using GrasscutterTools.Game;

View File

@ -286,5 +286,17 @@ namespace GrasscutterTools.Properties {
this["IsUpgraded"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("True")]
public bool IsHotkeyEenabled {
get {
return ((bool)(this["IsHotkeyEenabled"]));
}
set {
this["IsHotkeyEenabled"] = value;
}
}
}
}

View File

@ -68,5 +68,8 @@
<Setting Name="IsUpgraded" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="IsHotkeyEenabled" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value>
</Setting>
</Settings>
</SettingsFile>

View File

@ -26,6 +26,18 @@ namespace GrasscutterTools.Utils
/// </summary>
internal class HotKeyItem
{
public HotKeyItem()
{
}
public HotKeyItem(string tag, string commands, string hotKey, bool isEnabled = true)
{
Tag = tag;
Commands = commands;
HotKey = hotKey;
IsEnabled = isEnabled;
}
/// <summary>
/// Gets or sets the hot key identifier.
/// </summary>

View File

@ -36,12 +36,28 @@ namespace GrasscutterTools.Utils
}
#region Member
private static int _regMaxId;
private readonly IntPtr FormHandle;
public List<HotKeyItem> Items { get; set; } = new List<HotKeyItem>();
private bool _isEnabled;
public List<HotKeyItem> Items { get; set; } = new();
/// <summary>
/// 全局热键是否启用
/// </summary>
public bool IsEnabled
{
get => _isEnabled;
set
{
_isEnabled = value;
if (value) RegAllKey();
else UnRegAllKey();
}
}
#endregion Member
@ -220,7 +236,7 @@ namespace GrasscutterTools.Utils
if (item is null)
throw new ArgumentNullException(nameof(item));
if (item.IsEnabled)
if (_isEnabled && item.IsEnabled)
RegKey(item);
Items.Add(item);
}
@ -251,7 +267,7 @@ namespace GrasscutterTools.Utils
// 重新注册
if (item.HotKeyId != 0)
UnRegKey(item);
if (item.IsEnabled)
if (_isEnabled && item.IsEnabled)
RegKey(item);
}