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"> <setting name="IsUpgraded" serializeAs="String">
<value>False</value> <value>False</value>
</setting> </setting>
<setting name="IsHotkeyEenabled" serializeAs="String">
<value>True</value>
</setting>
</GrasscutterTools.Properties.Settings> </GrasscutterTools.Properties.Settings>
</userSettings> </userSettings>
</configuration> </configuration>

View File

@ -587,6 +587,30 @@ namespace GrasscutterTools.Forms
if (i < ListPages.Items.Count) if (i < ListPages.Items.Count)
ListPages.SelectedIndex = i; 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> /// <summary>

View File

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

View File

@ -53,6 +53,38 @@ namespace GrasscutterTools.Pages
/// </summary> /// </summary>
private bool HotKeysChanged; 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>
/// 初始化快捷键 /// 初始化快捷键
/// </summary> /// </summary>
@ -62,15 +94,16 @@ namespace GrasscutterTools.Pages
return; return;
try 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()); LvHotKeyList.Items.AddRange(Common.KeyGo.Items.Select(HotKeyItemToViewItem).ToArray());
Logger.I(TAG, "Start Register All HotKeys"); Logger.I(TAG, "Start Register All HotKeys");
Common.KeyGo.RegAllKey(); Common.KeyGo.RegAllKey();
} }
catch (Exception ex) 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> /// </summary>
public override void OnClosed() public override void OnClosed()
{ {
Settings.Default.IsHotkeyEenabled = Common.KeyGo.IsEnabled;
Logger.I(TAG, "Cancel all HotKeys"); Logger.I(TAG, "Cancel all HotKeys");
Common.KeyGo.UnRegAllKey(); Common.KeyGo.UnRegAllKey();
@ -90,7 +125,7 @@ namespace GrasscutterTools.Pages
/// <summary> /// <summary>
/// 将实体转为视图对象 /// 将实体转为视图对象
/// </summary> /// </summary>
private static ListViewItem HotKeyItemToViewItem(HotKeyItem item) => new ListViewItem(new[] private static ListViewItem HotKeyItemToViewItem(HotKeyItem item) => new(new[]
{ {
item.Tag, item.Tag,
item.HotKey, item.HotKey,
@ -130,12 +165,7 @@ namespace GrasscutterTools.Pages
var i = Common.KeyGo.Items.FindIndex(it => it.Tag == tag); var i = Common.KeyGo.Items.FindIndex(it => it.Tag == tag);
if (i == -1) if (i == -1)
{ {
var item = new HotKeyItem var item = new HotKeyItem(tag, commands, hotKey);
{
Tag = tag,
Commands = commands,
HotKey = hotKey
};
Logger.I(TAG, $"New HotKey item [{hotKey}]"); Logger.I(TAG, $"New HotKey item [{hotKey}]");
Common.KeyGo.AddHotKey(item); Common.KeyGo.AddHotKey(item);
LvHotKeyList.Items.Add(HotKeyItemToViewItem(item)); LvHotKeyList.Items.Add(HotKeyItemToViewItem(item));
@ -260,5 +290,22 @@ namespace GrasscutterTools.Pages
TxtHotKey.Tag = ""; TxtHotKey.Tag = "";
TxtTag.Text = 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"> <data name="ColCommand.Text" xml:space="preserve">
<value>Commands</value> <value>Commands</value>
</data> </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"> <data name="GrpHotKeyList.Text" xml:space="preserve">
<value>HotKeys</value> <value>HotKeys</value>
</data> </data>
@ -135,7 +145,6 @@
<data name="BtnAddOrUpdate.Text" xml:space="preserve"> <data name="BtnAddOrUpdate.Text" xml:space="preserve">
<value>√ AddOrUpdate</value> <value>√ AddOrUpdate</value>
</data> </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"> <data name="LblHotKeyLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>50, 17</value> <value>50, 17</value>
</data> </data>

View File

@ -117,215 +117,92 @@
<resheader name="writer"> <resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.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> </resheader>
<data name="ColTag.Text" xml:space="preserve"> <data name="&gt;&gt;BtnRemove.ZOrder" xml:space="preserve">
<value>标签</value> <value>0</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> </data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <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"> <data name="BtnRemove.Size" type="System.Drawing.Size, System.Drawing">
<value>3, 19</value> <value>100, 30</value>
</data> </data>
<data name="LvHotKeyList.Size" type="System.Drawing.Size, System.Drawing"> <assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<value>634, 178</value> <data name="TxtHotKey.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data> </data>
<data name="LvHotKeyList.TabIndex" type="System.Int32, mscorlib"> <data name="ChkEnableGlobal.AutoSize" type="System.Boolean, mscorlib">
<value>0</value> <value>True</value>
</data> </data>
<data name="&gt;&gt;LvHotKeyList.Name" xml:space="preserve"> <data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>LvHotKeyList</value> <value>GrasscutterTools.Pages.BasePage, GrasscutterTools, Version=1.13.0.0, Culture=neutral, PublicKeyToken=de2b1c089621e923</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> </data>
<data name="GrpHotKeyList.Size" type="System.Drawing.Size, System.Drawing"> <data name="GrpHotKeyList.Size" type="System.Drawing.Size, System.Drawing">
<value>640, 200</value> <value>640, 200</value>
</data> </data>
<data name="GrpHotKeyList.TabIndex" type="System.Int32, mscorlib"> <data name="LblHotKeyLabel.Location" type="System.Drawing.Point, System.Drawing">
<value>1</value> <value>212, 213</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> </data>
<data name="&gt;&gt;BtnAddOrUpdate.Name" xml:space="preserve"> <data name="&gt;&gt;BtnAddOrUpdate.Name" xml:space="preserve">
<value>BtnAddOrUpdate</value> <value>BtnAddOrUpdate</value>
</data> </data>
<data name="&gt;&gt;BtnAddOrUpdate.Type" xml:space="preserve"> <data name="BtnRemove.Location" type="System.Drawing.Point, System.Drawing">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>543, 206</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> </data>
<data name="TxtTag.TabIndex" type="System.Int32, mscorlib"> <data name="TxtTag.TabIndex" type="System.Int32, mscorlib">
<value>1</value> <value>1</value>
</data> </data>
<data name="&gt;&gt;TxtTag.Name" xml:space="preserve"> <data name="&gt;&gt;BtnRemove.Parent" 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">
<value>$this</value> <value>$this</value>
</data> </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"> <data name="&gt;&gt;TxtTag.ZOrder" xml:space="preserve">
<value>4</value> <value>4</value>
</data> </data>
<data name="LblTagLabel.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms"> <data name="&gt;&gt;LblTagLabel.Parent" xml:space="preserve">
<value>Bottom, Left</value> <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>
<data name="LblTagLabel.AutoSize" type="System.Boolean, mscorlib"> <data name="LblTagLabel.AutoSize" type="System.Boolean, mscorlib">
<value>True</value> <value>True</value>
@ -333,55 +210,208 @@
<data name="LblTagLabel.Location" type="System.Drawing.Point, System.Drawing"> <data name="LblTagLabel.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 213</value> <value>3, 213</value>
</data> </data>
<data name="LblTagLabel.Size" type="System.Drawing.Size, System.Drawing"> <data name="BtnAddOrUpdate.Size" type="System.Drawing.Size, System.Drawing">
<value>32, 17</value> <value>150, 30</value>
</data> </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> <value>0</value>
</data> </data>
<data name="LblTagLabel.Text" xml:space="preserve"> <data name="LblTagLabel.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>标签</value> <value>Bottom, Left</value>
</data> </data>
<data name="&gt;&gt;LblTagLabel.Name" xml:space="preserve"> <data name="&gt;&gt;LblHotKeyLabel.Parent" 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">
<value>$this</value> <value>$this</value>
</data> </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"> <data name="&gt;&gt;LblTagLabel.ZOrder" xml:space="preserve">
<value>6</value> <value>6</value>
</data> </data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> <data name="&gt;&gt;LvHotKeyList.Name" xml:space="preserve">
<value>True</value> <value>LvHotKeyList</value>
</metadata> </data>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing"> <data name="&gt;&gt;ChkEnableGlobal.ZOrder" xml:space="preserve">
<value>7, 17</value> <value>0</value>
</data> </data>
<data name="&gt;&gt;ColTag.Name" xml:space="preserve"> <data name="&gt;&gt;ColTag.Name" xml:space="preserve">
<value>ColTag</value> <value>ColTag</value>
</data> </data>
<data name="&gt;&gt;ColTag.Type" xml:space="preserve"> <data name="TxtHotKey.Location" type="System.Drawing.Point, System.Drawing">
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>262, 210</value>
</data> </data>
<data name="&gt;&gt;ColHotKey.Name" xml:space="preserve"> <data name="ColCommand.Text" xml:space="preserve">
<value>ColHotKey</value> <value>命令</value>
</data> </data>
<data name="&gt;&gt;ColHotKey.Type" xml:space="preserve"> <data name="TxtHotKey.Size" type="System.Drawing.Size, System.Drawing">
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>119, 23</value>
</data> </data>
<data name="&gt;&gt;ColCommand.Name" xml:space="preserve"> <data name="&gt;&gt;BtnRemove.Type" xml:space="preserve">
<value>ColCommand</value> <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data> </data>
<data name="&gt;&gt;ColCommand.Type" xml:space="preserve"> <data name="&gt;&gt;LvHotKeyList.Parent" xml:space="preserve">
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <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>
<data name="&gt;&gt;$this.Name" xml:space="preserve"> <data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>PageHotKey</value> <value>PageHotKey</value>
</data> </data>
<data name="&gt;&gt;$this.Type" xml:space="preserve"> <data name="LblHotKeyLabel.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>GrasscutterTools.Pages.BasePage, GrasscutterTools, Version=1.11.0.0, Culture=neutral, PublicKeyToken=de2b1c089621e923</value> <value>Bottom, Left, Right</value>
</data> </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> </root>

View File

@ -126,6 +126,16 @@
<data name="ColCommand.Text" xml:space="preserve"> <data name="ColCommand.Text" xml:space="preserve">
<value>Commands</value> <value>Commands</value>
</data> </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"> <data name="GrpHotKeyList.Text" xml:space="preserve">
<value>HotKeys</value> <value>HotKeys</value>
</data> </data>
@ -135,7 +145,6 @@
<data name="BtnAddOrUpdate.Text" xml:space="preserve"> <data name="BtnAddOrUpdate.Text" xml:space="preserve">
<value>√ AddOrUpdate</value> <value>√ AddOrUpdate</value>
</data> </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"> <data name="LblHotKeyLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>50, 17</value> <value>50, 17</value>
</data> </data>

View File

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

View File

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

View File

@ -286,5 +286,17 @@ namespace GrasscutterTools.Properties {
this["IsUpgraded"] = value; 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"> <Setting Name="IsUpgraded" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value> <Value Profile="(Default)">False</Value>
</Setting> </Setting>
<Setting Name="IsHotkeyEenabled" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value>
</Setting>
</Settings> </Settings>
</SettingsFile> </SettingsFile>

View File

@ -26,6 +26,18 @@ namespace GrasscutterTools.Utils
/// </summary> /// </summary>
internal class HotKeyItem 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> /// <summary>
/// Gets or sets the hot key identifier. /// Gets or sets the hot key identifier.
/// </summary> /// </summary>

View File

@ -36,12 +36,28 @@ namespace GrasscutterTools.Utils
} }
#region Member #region Member
private static int _regMaxId; private static int _regMaxId;
private readonly IntPtr FormHandle; 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 #endregion Member
@ -220,7 +236,7 @@ namespace GrasscutterTools.Utils
if (item is null) if (item is null)
throw new ArgumentNullException(nameof(item)); throw new ArgumentNullException(nameof(item));
if (item.IsEnabled) if (_isEnabled && item.IsEnabled)
RegKey(item); RegKey(item);
Items.Add(item); Items.Add(item);
} }
@ -251,7 +267,7 @@ namespace GrasscutterTools.Utils
// 重新注册 // 重新注册
if (item.HotKeyId != 0) if (item.HotKeyId != 0)
UnRegKey(item); UnRegKey(item);
if (item.IsEnabled) if (_isEnabled && item.IsEnabled)
RegKey(item); RegKey(item);
} }