diff --git a/shadowsocks-csharp/Controller/ShadowsocksController.cs b/shadowsocks-csharp/Controller/ShadowsocksController.cs index 565db6bf..93d48088 100644 --- a/shadowsocks-csharp/Controller/ShadowsocksController.cs +++ b/shadowsocks-csharp/Controller/ShadowsocksController.cs @@ -92,6 +92,7 @@ namespace Shadowsocks.Controller public void Start() { Reload(); + StartupHotkeyReg.RegHotkey(); } protected void ReportError(Exception e) diff --git a/shadowsocks-csharp/Controller/StartupHotkeyReg.cs b/shadowsocks-csharp/Controller/StartupHotkeyReg.cs new file mode 100644 index 00000000..11ecaec8 --- /dev/null +++ b/shadowsocks-csharp/Controller/StartupHotkeyReg.cs @@ -0,0 +1,68 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; +using GlobalHotKey; +using Shadowsocks.Controller.Hotkeys; +using Shadowsocks.Model; +using System.Reflection; + +namespace Shadowsocks.Controller +{ + static class StartupHotkeyReg + { + public static void RegHotkey() + { + var _hotKeyConf = Configuration.Load().hotkey; + + if (_hotKeyConf == null || !_hotKeyConf.RegHotkeysAtStartup) + return; + + var _hotKeyDic = new Dictionary(); + + try + { + MethodInfo[] fis = typeof(HotkeyCallbacks).GetMethods(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly); + Type ht = _hotKeyConf.GetType(); + for (int i = 0; i < fis.Length; i++) + { + if (fis[i].Name.EndsWith("Callback")) + { + var callbackName = fis[i].Name; + var fieldName = callbackName.Replace("Callback", ""); + + var hk = HotKeys.Str2HotKey(ht.GetField(fieldName).GetValue(_hotKeyConf) as string); + var cb = HotkeyCallbacks.GetCallback(callbackName) as HotKeys.HotKeyCallBackHandler; + + if (hk != null && cb != null) + { + _hotKeyDic.Add(hk, cb); + } + } + } + + int regCount = 0; + foreach (var v in _hotKeyDic) + { + if (!HotKeys.RegHotkey(v.Key, v.Value)) + { + foreach (var k in _hotKeyDic) + { + if (regCount > 0) + { + HotKeys.UnregExistingHotkey(k.Value); + regCount--; + } + } + MessageBox.Show(I18N.GetString("Register hotkey failed"), I18N.GetString("Shadowsocks")); + return; + } + regCount++; + } + } + catch (Exception e) + { + Logging.Error(e); + } + } + } +} diff --git a/shadowsocks-csharp/Controller/System/Hotkeys/HotkeyCallbacks.cs b/shadowsocks-csharp/Controller/System/Hotkeys/HotkeyCallbacks.cs index 32effeee..cb60d739 100644 --- a/shadowsocks-csharp/Controller/System/Hotkeys/HotkeyCallbacks.cs +++ b/shadowsocks-csharp/Controller/System/Hotkeys/HotkeyCallbacks.cs @@ -50,7 +50,7 @@ namespace Shadowsocks.Controller.Hotkeys _controller.ToggleEnable(!enabled); } - private void SwitchProxyModeCallback() + private void SwitchSystemProxyModeCallback() { var config = _controller.GetConfigurationCopy(); if (config.enabled == false) return; diff --git a/shadowsocks-csharp/Data/zh_CN.txt b/shadowsocks-csharp/Data/zh_CN.txt index e59869ee..a7f8f3ab 100644 --- a/shadowsocks-csharp/Data/zh_CN.txt +++ b/shadowsocks-csharp/Data/zh_CN.txt @@ -108,6 +108,7 @@ Show Logs=显示日志 Switch to prev server=切换上个服务器 Switch to next server=切换下个服务器 Reg All=注册全部热键 +Reg Hotkeys At Startup=启动时注册热键 # Messages diff --git a/shadowsocks-csharp/Model/HotKeyConfig.cs b/shadowsocks-csharp/Model/HotKeyConfig.cs index 8aaf3051..4e27a08b 100644 --- a/shadowsocks-csharp/Model/HotKeyConfig.cs +++ b/shadowsocks-csharp/Model/HotKeyConfig.cs @@ -17,6 +17,7 @@ namespace Shadowsocks.Model public string ShowLogs; public string ServerMoveUp; public string ServerMoveDown; + public bool RegHotkeysAtStartup; public HotkeyConfig() { @@ -26,6 +27,7 @@ namespace Shadowsocks.Model ShowLogs = ""; ServerMoveUp = ""; ServerMoveDown = ""; + RegHotkeysAtStartup = false; } } } \ No newline at end of file diff --git a/shadowsocks-csharp/View/HotkeySettingsForm.cs b/shadowsocks-csharp/View/HotkeySettingsForm.cs index 34dc4594..7a79b17a 100644 --- a/shadowsocks-csharp/View/HotkeySettingsForm.cs +++ b/shadowsocks-csharp/View/HotkeySettingsForm.cs @@ -42,6 +42,7 @@ namespace Shadowsocks.View ShowLogsLabel.Text = I18N.GetString("Show Logs"); ServerMoveUpLabel.Text = I18N.GetString("Switch to prev server"); ServerMoveDownLabel.Text = I18N.GetString("Switch to next server"); + RegHotkeysAtStartupLabel.Text = I18N.GetString("Reg Hotkeys At Startup"); btnOK.Text = I18N.GetString("OK"); btnCancel.Text = I18N.GetString("Cancel"); btnRegisterAll.Text = I18N.GetString("Reg All"); @@ -67,6 +68,7 @@ namespace Shadowsocks.View ShowLogsTextBox.Text = config.ShowLogs; ServerMoveUpTextBox.Text = config.ServerMoveUp; ServerMoveDownTextBox.Text = config.ServerMoveDown; + RegHotkeysAtStartupCheckBox.Checked = config.RegHotkeysAtStartup; } private void SaveConfig() @@ -83,7 +85,8 @@ namespace Shadowsocks.View SwitchAllowLan = SwitchAllowLanTextBox.Text, ShowLogs = ShowLogsTextBox.Text, ServerMoveUp = ServerMoveUpTextBox.Text, - ServerMoveDown = ServerMoveDownTextBox.Text + ServerMoveDown = ServerMoveDownTextBox.Text, + RegHotkeysAtStartup = RegHotkeysAtStartupCheckBox.Checked }; } @@ -172,7 +175,7 @@ namespace Shadowsocks.View { return RegHotkeyFromString(hotkeyConfig.SwitchSystemProxy, "SwitchSystemProxyCallback", SwitchSystemProxyLabel) - && RegHotkeyFromString(hotkeyConfig.SwitchSystemProxyMode, "SwitchProxyModeCallback", SwitchProxyModeLabel) + && RegHotkeyFromString(hotkeyConfig.SwitchSystemProxyMode, "SwitchSystemProxyModeCallback", SwitchProxyModeLabel) && RegHotkeyFromString(hotkeyConfig.SwitchAllowLan, "SwitchAllowLanCallback", SwitchAllowLanLabel) && RegHotkeyFromString(hotkeyConfig.ShowLogs, "ShowLogsCallback", ShowLogsLabel) && RegHotkeyFromString(hotkeyConfig.ServerMoveUp, "ServerMoveUpCallback", ServerMoveUpLabel) diff --git a/shadowsocks-csharp/View/HotkeySettingsForm.designer.cs b/shadowsocks-csharp/View/HotkeySettingsForm.designer.cs index c8ee4e4a..6e412edb 100644 --- a/shadowsocks-csharp/View/HotkeySettingsForm.designer.cs +++ b/shadowsocks-csharp/View/HotkeySettingsForm.designer.cs @@ -45,6 +45,8 @@ this.ShowLogsTextBox = new System.Windows.Forms.TextBox(); this.ServerMoveUpTextBox = new System.Windows.Forms.TextBox(); this.ServerMoveDownTextBox = new System.Windows.Forms.TextBox(); + this.RegHotkeysAtStartupLabel = new System.Windows.Forms.Label(); + this.RegHotkeysAtStartupCheckBox = new System.Windows.Forms.CheckBox(); flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel(); flowLayoutPanel1.SuspendLayout(); this.tableLayoutPanel1.SuspendLayout(); @@ -57,7 +59,7 @@ flowLayoutPanel1.Controls.Add(this.btnCancel); flowLayoutPanel1.Controls.Add(this.btnRegisterAll); flowLayoutPanel1.FlowDirection = System.Windows.Forms.FlowDirection.BottomUp; - flowLayoutPanel1.Location = new System.Drawing.Point(0, 205); + flowLayoutPanel1.Location = new System.Drawing.Point(0, 218); flowLayoutPanel1.Margin = new System.Windows.Forms.Padding(0); flowLayoutPanel1.Name = "flowLayoutPanel1"; flowLayoutPanel1.Padding = new System.Windows.Forms.Padding(0, 0, 16, 0); @@ -103,32 +105,36 @@ this.tableLayoutPanel1.ColumnCount = 2; this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel1.Controls.Add(this.RegHotkeysAtStartupLabel, 0, 6); this.tableLayoutPanel1.Controls.Add(this.SwitchSystemProxyLabel, 0, 0); this.tableLayoutPanel1.Controls.Add(this.SwitchProxyModeLabel, 0, 1); this.tableLayoutPanel1.Controls.Add(this.SwitchAllowLanLabel, 0, 2); this.tableLayoutPanel1.Controls.Add(this.ShowLogsLabel, 0, 3); this.tableLayoutPanel1.Controls.Add(this.ServerMoveUpLabel, 0, 4); this.tableLayoutPanel1.Controls.Add(this.ServerMoveDownLabel, 0, 5); - this.tableLayoutPanel1.Controls.Add(flowLayoutPanel1, 0, 6); + this.tableLayoutPanel1.Controls.Add(flowLayoutPanel1, 0, 7); this.tableLayoutPanel1.Controls.Add(this.SwitchSystemProxyTextBox, 1, 0); this.tableLayoutPanel1.Controls.Add(this.SwitchProxyModeTextBox, 1, 1); this.tableLayoutPanel1.Controls.Add(this.SwitchAllowLanTextBox, 1, 2); this.tableLayoutPanel1.Controls.Add(this.ShowLogsTextBox, 1, 3); this.tableLayoutPanel1.Controls.Add(this.ServerMoveUpTextBox, 1, 4); this.tableLayoutPanel1.Controls.Add(this.ServerMoveDownTextBox, 1, 5); + this.tableLayoutPanel1.Controls.Add(this.RegHotkeysAtStartupCheckBox, 1, 6); this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - this.tableLayoutPanel1.RowCount = 7; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.50485F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.50485F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.50485F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.50485F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 17.21683F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.76375F)); + this.tableLayoutPanel1.RowCount = 8; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 14.16726F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 14.16726F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 14.16726F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 14.16726F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 14.7784F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 14.38949F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 14.16309F)); this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 40F)); this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tableLayoutPanel1.Size = new System.Drawing.Size(491, 248); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanel1.Size = new System.Drawing.Size(491, 261); this.tableLayoutPanel1.TabIndex = 0; // // SwitchSystemProxyLabel @@ -138,7 +144,7 @@ this.SwitchSystemProxyLabel.Location = new System.Drawing.Point(50, 0); this.SwitchSystemProxyLabel.Margin = new System.Windows.Forms.Padding(8, 0, 8, 0); this.SwitchSystemProxyLabel.Name = "SwitchSystemProxyLabel"; - this.SwitchSystemProxyLabel.Size = new System.Drawing.Size(147, 34); + this.SwitchSystemProxyLabel.Size = new System.Drawing.Size(147, 31); this.SwitchSystemProxyLabel.TabIndex = 0; this.SwitchSystemProxyLabel.Text = "Enable System Proxy"; this.SwitchSystemProxyLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; @@ -147,10 +153,10 @@ // this.SwitchProxyModeLabel.AutoSize = true; this.SwitchProxyModeLabel.Dock = System.Windows.Forms.DockStyle.Right; - this.SwitchProxyModeLabel.Location = new System.Drawing.Point(8, 34); + this.SwitchProxyModeLabel.Location = new System.Drawing.Point(8, 31); this.SwitchProxyModeLabel.Margin = new System.Windows.Forms.Padding(8, 0, 8, 0); this.SwitchProxyModeLabel.Name = "SwitchProxyModeLabel"; - this.SwitchProxyModeLabel.Size = new System.Drawing.Size(189, 34); + this.SwitchProxyModeLabel.Size = new System.Drawing.Size(189, 31); this.SwitchProxyModeLabel.TabIndex = 1; this.SwitchProxyModeLabel.Text = "Switch System Proxy Mode"; this.SwitchProxyModeLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; @@ -159,10 +165,10 @@ // this.SwitchAllowLanLabel.AutoSize = true; this.SwitchAllowLanLabel.Dock = System.Windows.Forms.DockStyle.Right; - this.SwitchAllowLanLabel.Location = new System.Drawing.Point(33, 68); + this.SwitchAllowLanLabel.Location = new System.Drawing.Point(33, 62); this.SwitchAllowLanLabel.Margin = new System.Windows.Forms.Padding(8, 0, 8, 0); this.SwitchAllowLanLabel.Name = "SwitchAllowLanLabel"; - this.SwitchAllowLanLabel.Size = new System.Drawing.Size(164, 34); + this.SwitchAllowLanLabel.Size = new System.Drawing.Size(164, 31); this.SwitchAllowLanLabel.TabIndex = 3; this.SwitchAllowLanLabel.Text = "Allow Clients from LAN"; this.SwitchAllowLanLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; @@ -171,10 +177,10 @@ // this.ShowLogsLabel.AutoSize = true; this.ShowLogsLabel.Dock = System.Windows.Forms.DockStyle.Right; - this.ShowLogsLabel.Location = new System.Drawing.Point(107, 102); + this.ShowLogsLabel.Location = new System.Drawing.Point(107, 93); this.ShowLogsLabel.Margin = new System.Windows.Forms.Padding(8, 0, 8, 0); this.ShowLogsLabel.Name = "ShowLogsLabel"; - this.ShowLogsLabel.Size = new System.Drawing.Size(90, 34); + this.ShowLogsLabel.Size = new System.Drawing.Size(90, 31); this.ShowLogsLabel.TabIndex = 4; this.ShowLogsLabel.Text = "Show Logs..."; this.ShowLogsLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; @@ -183,10 +189,10 @@ // this.ServerMoveUpLabel.AutoSize = true; this.ServerMoveUpLabel.Dock = System.Windows.Forms.DockStyle.Right; - this.ServerMoveUpLabel.Location = new System.Drawing.Point(128, 136); + this.ServerMoveUpLabel.Location = new System.Drawing.Point(128, 124); this.ServerMoveUpLabel.Margin = new System.Windows.Forms.Padding(8, 0, 8, 0); this.ServerMoveUpLabel.Name = "ServerMoveUpLabel"; - this.ServerMoveUpLabel.Size = new System.Drawing.Size(69, 35); + this.ServerMoveUpLabel.Size = new System.Drawing.Size(69, 32); this.ServerMoveUpLabel.TabIndex = 4; this.ServerMoveUpLabel.Text = "Move up"; this.ServerMoveUpLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; @@ -195,10 +201,10 @@ // this.ServerMoveDownLabel.AutoSize = true; this.ServerMoveDownLabel.Dock = System.Windows.Forms.DockStyle.Right; - this.ServerMoveDownLabel.Location = new System.Drawing.Point(106, 171); + this.ServerMoveDownLabel.Location = new System.Drawing.Point(106, 156); this.ServerMoveDownLabel.Margin = new System.Windows.Forms.Padding(8, 0, 8, 0); this.ServerMoveDownLabel.Name = "ServerMoveDownLabel"; - this.ServerMoveDownLabel.Size = new System.Drawing.Size(91, 34); + this.ServerMoveDownLabel.Size = new System.Drawing.Size(91, 31); this.ServerMoveDownLabel.TabIndex = 4; this.ServerMoveDownLabel.Text = "Move Down"; this.ServerMoveDownLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; @@ -218,7 +224,7 @@ // SwitchProxyModeTextBox // this.SwitchProxyModeTextBox.Dock = System.Windows.Forms.DockStyle.Fill; - this.SwitchProxyModeTextBox.Location = new System.Drawing.Point(208, 37); + this.SwitchProxyModeTextBox.Location = new System.Drawing.Point(208, 34); this.SwitchProxyModeTextBox.Margin = new System.Windows.Forms.Padding(3, 3, 16, 3); this.SwitchProxyModeTextBox.Name = "SwitchProxyModeTextBox"; this.SwitchProxyModeTextBox.ReadOnly = true; @@ -230,7 +236,7 @@ // SwitchAllowLanTextBox // this.SwitchAllowLanTextBox.Dock = System.Windows.Forms.DockStyle.Fill; - this.SwitchAllowLanTextBox.Location = new System.Drawing.Point(208, 71); + this.SwitchAllowLanTextBox.Location = new System.Drawing.Point(208, 65); this.SwitchAllowLanTextBox.Margin = new System.Windows.Forms.Padding(3, 3, 16, 3); this.SwitchAllowLanTextBox.Name = "SwitchAllowLanTextBox"; this.SwitchAllowLanTextBox.ReadOnly = true; @@ -242,7 +248,7 @@ // ShowLogsTextBox // this.ShowLogsTextBox.Dock = System.Windows.Forms.DockStyle.Fill; - this.ShowLogsTextBox.Location = new System.Drawing.Point(208, 105); + this.ShowLogsTextBox.Location = new System.Drawing.Point(208, 96); this.ShowLogsTextBox.Margin = new System.Windows.Forms.Padding(3, 3, 16, 3); this.ShowLogsTextBox.Name = "ShowLogsTextBox"; this.ShowLogsTextBox.ReadOnly = true; @@ -254,7 +260,7 @@ // ServerMoveUpTextBox // this.ServerMoveUpTextBox.Dock = System.Windows.Forms.DockStyle.Fill; - this.ServerMoveUpTextBox.Location = new System.Drawing.Point(208, 139); + this.ServerMoveUpTextBox.Location = new System.Drawing.Point(208, 127); this.ServerMoveUpTextBox.Margin = new System.Windows.Forms.Padding(3, 3, 16, 3); this.ServerMoveUpTextBox.Name = "ServerMoveUpTextBox"; this.ServerMoveUpTextBox.ReadOnly = true; @@ -266,7 +272,7 @@ // ServerMoveDownTextBox // this.ServerMoveDownTextBox.Dock = System.Windows.Forms.DockStyle.Fill; - this.ServerMoveDownTextBox.Location = new System.Drawing.Point(208, 174); + this.ServerMoveDownTextBox.Location = new System.Drawing.Point(208, 159); this.ServerMoveDownTextBox.Margin = new System.Windows.Forms.Padding(3, 3, 16, 3); this.ServerMoveDownTextBox.Name = "ServerMoveDownTextBox"; this.ServerMoveDownTextBox.ReadOnly = true; @@ -275,11 +281,33 @@ this.ServerMoveDownTextBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.HotkeyDown); this.ServerMoveDownTextBox.KeyUp += new System.Windows.Forms.KeyEventHandler(this.HotkeyUp); // + // RegHotkeysAtStartupLabel + // + this.RegHotkeysAtStartupLabel.AutoSize = true; + this.RegHotkeysAtStartupLabel.Dock = System.Windows.Forms.DockStyle.Right; + this.RegHotkeysAtStartupLabel.Location = new System.Drawing.Point(32, 187); + this.RegHotkeysAtStartupLabel.Margin = new System.Windows.Forms.Padding(8, 0, 8, 0); + this.RegHotkeysAtStartupLabel.Name = "RegHotkeysAtStartupLabel"; + this.RegHotkeysAtStartupLabel.Size = new System.Drawing.Size(165, 31); + this.RegHotkeysAtStartupLabel.TabIndex = 16; + this.RegHotkeysAtStartupLabel.Text = "Reg Hotkeys At Startup"; + this.RegHotkeysAtStartupLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // RegHotkeysAtStartupCheckBox + // + this.RegHotkeysAtStartupCheckBox.AutoSize = true; + this.RegHotkeysAtStartupCheckBox.Location = new System.Drawing.Point(208, 196); + this.RegHotkeysAtStartupCheckBox.Margin = new System.Windows.Forms.Padding(3, 9, 9, 9); + this.RegHotkeysAtStartupCheckBox.Name = "RegHotkeysAtStartupCheckBox"; + this.RegHotkeysAtStartupCheckBox.Size = new System.Drawing.Size(15, 13); + this.RegHotkeysAtStartupCheckBox.TabIndex = 17; + this.RegHotkeysAtStartupCheckBox.UseVisualStyleBackColor = true; + // // HotkeySettingsForm // this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; - this.ClientSize = new System.Drawing.Size(491, 248); + this.ClientSize = new System.Drawing.Size(491, 261); this.Controls.Add(this.tableLayoutPanel1); this.Font = new System.Drawing.Font("微软雅黑", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); @@ -313,5 +341,7 @@ private System.Windows.Forms.TextBox ServerMoveDownTextBox; private System.Windows.Forms.Button btnRegisterAll; private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; + private System.Windows.Forms.Label RegHotkeysAtStartupLabel; + private System.Windows.Forms.CheckBox RegHotkeysAtStartupCheckBox; } } \ No newline at end of file diff --git a/shadowsocks-csharp/View/HotkeySettingsForm.resx b/shadowsocks-csharp/View/HotkeySettingsForm.resx index a0949f08..5813f883 100644 --- a/shadowsocks-csharp/View/HotkeySettingsForm.resx +++ b/shadowsocks-csharp/View/HotkeySettingsForm.resx @@ -126,6 +126,9 @@ True + + True + True @@ -162,6 +165,9 @@ True + + True + True diff --git a/shadowsocks-csharp/shadowsocks-csharp.csproj b/shadowsocks-csharp/shadowsocks-csharp.csproj index ba69a6af..33f3de03 100644 --- a/shadowsocks-csharp/shadowsocks-csharp.csproj +++ b/shadowsocks-csharp/shadowsocks-csharp.csproj @@ -100,6 +100,7 @@ +