diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputDevicesManager.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputDevicesManager.cs
index ad1a73f6..c0400f89 100644
--- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputDevicesManager.cs
+++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputDevicesManager.cs
@@ -135,9 +135,10 @@ namespace AxibugEmuOnline.Client.InputDevices
 
             /// <summary> 控件名,这个控件名称必须是唯一的 </summary>
             public abstract string ControlName { get; }
-            public string GetPath()
+
+            internal InputControl(InputDevice device)
             {
-                return $"{Device.UniqueName}/{ControlName}";
+                Device = device;
             }
         }
 
diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Keyboard.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Keyboard.cs
index 01c0a84d..52870c9d 100644
--- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Keyboard.cs
+++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Keyboard.cs
@@ -9,23 +9,30 @@ namespace AxibugEmuOnline.Client.InputDevices
     /// </summary>
     public partial class KeyBoard : InputDevice
     {
+        Dictionary<KeyCode, KeyboardKey> m_keyControllerMap = new Dictionary<KeyCode, KeyboardKey>();
+
         public KeyBoard(InputResolver resolver) : base(resolver) { }
 
         protected override IEnumerable<InputControl> DefineControls()
         {
-            var keys = s_keyboardKeys.Select(kc => new KeyboardKey(kc) as InputControl);
+            var keys = s_keyboardKeys.Select(kc => new KeyboardKey(kc, this) as InputControl);
+            foreach (KeyboardKey key in keys)
+            {
+                m_keyControllerMap[key.m_keycode] = key;
+            }
             return keys;
         }
 
         public class KeyboardKey : InputControl
         {
-            KeyCode m_keycode;
+            internal KeyCode m_keycode;
 
             public override bool Start => Device.Resolver.GetKeyDown(Device as KeyBoard, m_keycode);
             public override bool Release => Device.Resolver.GetKeyUp(Device as KeyBoard, m_keycode);
             public override bool Performing => Device.Resolver.GetKey(Device as KeyBoard, m_keycode);
 
-            public KeyboardKey(KeyCode listenKey)
+            internal KeyboardKey(KeyCode listenKey, KeyBoard keyboard)
+                : base(keyboard)
             {
                 m_keycode = listenKey;
             }
@@ -90,133 +97,115 @@ namespace AxibugEmuOnline.Client.InputDevices
             KeyCode.Clear
         };
 
-        // 字母键 A-Z
-        public KeyboardKey A { get; private set; } = new KeyboardKey(KeyCode.A);
-        public KeyboardKey B { get; private set; } = new KeyboardKey(KeyCode.B);
-        public KeyboardKey C { get; private set; } = new KeyboardKey(KeyCode.C);
-        public KeyboardKey D { get; private set; } = new KeyboardKey(KeyCode.D);
-        public KeyboardKey E { get; private set; } = new KeyboardKey(KeyCode.E);
-        public KeyboardKey F { get; private set; } = new KeyboardKey(KeyCode.F);
-        public KeyboardKey G { get; private set; } = new KeyboardKey(KeyCode.G);
-        public KeyboardKey H { get; private set; } = new KeyboardKey(KeyCode.H);
-        public KeyboardKey I { get; private set; } = new KeyboardKey(KeyCode.I);
-        public KeyboardKey J { get; private set; } = new KeyboardKey(KeyCode.J);
-        public KeyboardKey K { get; private set; } = new KeyboardKey(KeyCode.K);
-        public KeyboardKey L { get; private set; } = new KeyboardKey(KeyCode.L);
-        public KeyboardKey M { get; private set; } = new KeyboardKey(KeyCode.M);
-        public KeyboardKey N { get; private set; } = new KeyboardKey(KeyCode.N);
-        public KeyboardKey O { get; private set; } = new KeyboardKey(KeyCode.O);
-        public KeyboardKey P { get; private set; } = new KeyboardKey(KeyCode.P);
-        public KeyboardKey Q { get; private set; } = new KeyboardKey(KeyCode.Q);
-        public KeyboardKey R { get; private set; } = new KeyboardKey(KeyCode.R);
-        public KeyboardKey S { get; private set; } = new KeyboardKey(KeyCode.S);
-        public KeyboardKey T { get; private set; } = new KeyboardKey(KeyCode.T);
-        public KeyboardKey U { get; private set; } = new KeyboardKey(KeyCode.U);
-        public KeyboardKey V { get; private set; } = new KeyboardKey(KeyCode.V);
-        public KeyboardKey W { get; private set; } = new KeyboardKey(KeyCode.W);
-        public KeyboardKey X { get; private set; } = new KeyboardKey(KeyCode.X);
-        public KeyboardKey Y { get; private set; } = new KeyboardKey(KeyCode.Y);
-        public KeyboardKey Z { get; private set; } = new KeyboardKey(KeyCode.Z);
-
-        // 数字键 0-9
-        public KeyboardKey Alpha0 { get; private set; } = new KeyboardKey(KeyCode.Alpha0);
-        public KeyboardKey Alpha1 { get; private set; } = new KeyboardKey(KeyCode.Alpha1);
-        public KeyboardKey Alpha2 { get; private set; } = new KeyboardKey(KeyCode.Alpha2);
-        public KeyboardKey Alpha3 { get; private set; } = new KeyboardKey(KeyCode.Alpha3);
-        public KeyboardKey Alpha4 { get; private set; } = new KeyboardKey(KeyCode.Alpha4);
-        public KeyboardKey Alpha5 { get; private set; } = new KeyboardKey(KeyCode.Alpha5);
-        public KeyboardKey Alpha6 { get; private set; } = new KeyboardKey(KeyCode.Alpha6);
-        public KeyboardKey Alpha7 { get; private set; } = new KeyboardKey(KeyCode.Alpha7);
-        public KeyboardKey Alpha8 { get; private set; } = new KeyboardKey(KeyCode.Alpha8);
-        public KeyboardKey Alpha9 { get; private set; } = new KeyboardKey(KeyCode.Alpha9);
-
-        // 功能键 F1-F15
-        public KeyboardKey F1 { get; private set; } = new KeyboardKey(KeyCode.F1);
-        public KeyboardKey F2 { get; private set; } = new KeyboardKey(KeyCode.F2);
-        public KeyboardKey F3 { get; private set; } = new KeyboardKey(KeyCode.F3);
-        public KeyboardKey F4 { get; private set; } = new KeyboardKey(KeyCode.F4);
-        public KeyboardKey F5 { get; private set; } = new KeyboardKey(KeyCode.F5);
-        public KeyboardKey F6 { get; private set; } = new KeyboardKey(KeyCode.F6);
-        public KeyboardKey F7 { get; private set; } = new KeyboardKey(KeyCode.F7);
-        public KeyboardKey F8 { get; private set; } = new KeyboardKey(KeyCode.F8);
-        public KeyboardKey F9 { get; private set; } = new KeyboardKey(KeyCode.F9);
-        public KeyboardKey F10 { get; private set; } = new KeyboardKey(KeyCode.F10);
-        public KeyboardKey F11 { get; private set; } = new KeyboardKey(KeyCode.F11);
-        public KeyboardKey F12 { get; private set; } = new KeyboardKey(KeyCode.F12);
-        public KeyboardKey F13 { get; private set; } = new KeyboardKey(KeyCode.F13);
-        public KeyboardKey F14 { get; private set; } = new KeyboardKey(KeyCode.F14);
-        public KeyboardKey F15 { get; private set; } = new KeyboardKey(KeyCode.F15);
-
-        // 方向键
-        public KeyboardKey UpArrow { get; private set; } = new KeyboardKey(KeyCode.UpArrow);
-        public KeyboardKey DownArrow { get; private set; } = new KeyboardKey(KeyCode.DownArrow);
-        public KeyboardKey LeftArrow { get; private set; } = new KeyboardKey(KeyCode.LeftArrow);
-        public KeyboardKey RightArrow { get; private set; } = new KeyboardKey(KeyCode.RightArrow);
-
-        // 控制键
-        public KeyboardKey Space { get; private set; } = new KeyboardKey(KeyCode.Space);
-        public KeyboardKey Return { get; private set; } = new KeyboardKey(KeyCode.Return);
-        public KeyboardKey Escape { get; private set; } = new KeyboardKey(KeyCode.Escape);
-        public KeyboardKey Tab { get; private set; } = new KeyboardKey(KeyCode.Tab);
-        /// <summary>
-        /// <img src="./test.png" alt="test"/>
-        /// </summary>
-        public KeyboardKey Backspace { get; private set; } = new KeyboardKey(KeyCode.Backspace);
-        public KeyboardKey CapsLock { get; private set; } = new KeyboardKey(KeyCode.CapsLock);
-        public KeyboardKey LeftShift { get; private set; } = new KeyboardKey(KeyCode.LeftShift);
-        public KeyboardKey RightShift { get; private set; } = new KeyboardKey(KeyCode.RightShift);
-        public KeyboardKey LeftControl { get; private set; } = new KeyboardKey(KeyCode.LeftControl);
-        public KeyboardKey RightControl { get; private set; } = new KeyboardKey(KeyCode.RightControl);
-        public KeyboardKey LeftAlt { get; private set; } = new KeyboardKey(KeyCode.LeftAlt);
-        public KeyboardKey RightAlt { get; private set; } = new KeyboardKey(KeyCode.RightAlt);
-        public KeyboardKey LeftCommand { get; private set; } = new KeyboardKey(KeyCode.LeftCommand);
-        public KeyboardKey RightCommand { get; private set; } = new KeyboardKey(KeyCode.RightCommand);
-        public KeyboardKey Menu { get; private set; } = new KeyboardKey(KeyCode.Menu);
-
-        // 符号键
-        public KeyboardKey Comma { get; private set; } = new KeyboardKey(KeyCode.Comma);
-        public KeyboardKey Period { get; private set; } = new KeyboardKey(KeyCode.Period);
-        public KeyboardKey Slash { get; private set; } = new KeyboardKey(KeyCode.Slash);
-        public KeyboardKey BackQuote { get; private set; } = new KeyboardKey(KeyCode.BackQuote);
-        public KeyboardKey Quote { get; private set; } = new KeyboardKey(KeyCode.Quote);
-        public KeyboardKey Semicolon { get; private set; } = new KeyboardKey(KeyCode.Semicolon);
-        public KeyboardKey LeftBracket { get; private set; } = new KeyboardKey(KeyCode.LeftBracket);
-        public KeyboardKey RightBracket { get; private set; } = new KeyboardKey(KeyCode.RightBracket);
-        public KeyboardKey Backslash { get; private set; } = new KeyboardKey(KeyCode.Backslash);
-        public KeyboardKey Minus { get; private set; } = new KeyboardKey(KeyCode.Minus);
-        public KeyboardKey Equals_k { get; private set; } = new KeyboardKey(KeyCode.Equals);
-        public KeyboardKey Tilde { get; private set; } = new KeyboardKey(KeyCode.Tilde);
-
-        // 小键盘
-        public KeyboardKey Keypad0 { get; private set; } = new KeyboardKey(KeyCode.Keypad0);
-        public KeyboardKey Keypad1 { get; private set; } = new KeyboardKey(KeyCode.Keypad1);
-        public KeyboardKey Keypad2 { get; private set; } = new KeyboardKey(KeyCode.Keypad2);
-        public KeyboardKey Keypad3 { get; private set; } = new KeyboardKey(KeyCode.Keypad3);
-        public KeyboardKey Keypad4 { get; private set; } = new KeyboardKey(KeyCode.Keypad4);
-        public KeyboardKey Keypad5 { get; private set; } = new KeyboardKey(KeyCode.Keypad5);
-        public KeyboardKey Keypad6 { get; private set; } = new KeyboardKey(KeyCode.Keypad6);
-        public KeyboardKey Keypad7 { get; private set; } = new KeyboardKey(KeyCode.Keypad7);
-        public KeyboardKey Keypad8 { get; private set; } = new KeyboardKey(KeyCode.Keypad8);
-        public KeyboardKey Keypad9 { get; private set; } = new KeyboardKey(KeyCode.Keypad9);
-        public KeyboardKey KeypadPeriod { get; private set; } = new KeyboardKey(KeyCode.KeypadPeriod);
-        public KeyboardKey KeypadDivide { get; private set; } = new KeyboardKey(KeyCode.KeypadDivide);
-        public KeyboardKey KeypadMultiply { get; private set; } = new KeyboardKey(KeyCode.KeypadMultiply);
-        public KeyboardKey KeypadMinus { get; private set; } = new KeyboardKey(KeyCode.KeypadMinus);
-        public KeyboardKey KeypadPlus { get; private set; } = new KeyboardKey(KeyCode.KeypadPlus);
-        public KeyboardKey KeypadEnter { get; private set; } = new KeyboardKey(KeyCode.KeypadEnter);
-        public KeyboardKey Numlock { get; private set; } = new KeyboardKey(KeyCode.Numlock);
-
-        // 其他标准键
-        public KeyboardKey Print { get; private set; } = new KeyboardKey(KeyCode.Print);
-        public KeyboardKey Insert { get; private set; } = new KeyboardKey(KeyCode.Insert);
-        public KeyboardKey Delete { get; private set; } = new KeyboardKey(KeyCode.Delete);
-        public KeyboardKey Home { get; private set; } = new KeyboardKey(KeyCode.Home);
-        public KeyboardKey End { get; private set; } = new KeyboardKey(KeyCode.End);
-        public KeyboardKey PageUp { get; private set; } = new KeyboardKey(KeyCode.PageUp);
-        public KeyboardKey PageDown { get; private set; } = new KeyboardKey(KeyCode.PageDown);
-        public KeyboardKey Pause { get; private set; } = new KeyboardKey(KeyCode.Pause);
-        public KeyboardKey ScrollLock { get; private set; } = new KeyboardKey(KeyCode.ScrollLock);
-        public KeyboardKey Clear { get; private set; } = new KeyboardKey(KeyCode.Clear);
+        public KeyboardKey A => m_keyControllerMap[KeyCode.A];
+        public KeyboardKey B => m_keyControllerMap[KeyCode.B];
+        public KeyboardKey C => m_keyControllerMap[KeyCode.C];
+        public KeyboardKey D => m_keyControllerMap[KeyCode.D];
+        public KeyboardKey E => m_keyControllerMap[KeyCode.E];
+        public KeyboardKey F => m_keyControllerMap[KeyCode.F];
+        public KeyboardKey G => m_keyControllerMap[KeyCode.G];
+        public KeyboardKey H => m_keyControllerMap[KeyCode.H];
+        public KeyboardKey I => m_keyControllerMap[KeyCode.I];
+        public KeyboardKey J => m_keyControllerMap[KeyCode.J];
+        public KeyboardKey K => m_keyControllerMap[KeyCode.K];
+        public KeyboardKey L => m_keyControllerMap[KeyCode.L];
+        public KeyboardKey M => m_keyControllerMap[KeyCode.M];
+        public KeyboardKey N => m_keyControllerMap[KeyCode.N];
+        public KeyboardKey O => m_keyControllerMap[KeyCode.O];
+        public KeyboardKey P => m_keyControllerMap[KeyCode.P];
+        public KeyboardKey Q => m_keyControllerMap[KeyCode.Q];
+        public KeyboardKey R => m_keyControllerMap[KeyCode.R];
+        public KeyboardKey S => m_keyControllerMap[KeyCode.S];
+        public KeyboardKey T => m_keyControllerMap[KeyCode.T];
+        public KeyboardKey U => m_keyControllerMap[KeyCode.U];
+        public KeyboardKey V => m_keyControllerMap[KeyCode.V];
+        public KeyboardKey W => m_keyControllerMap[KeyCode.W];
+        public KeyboardKey X => m_keyControllerMap[KeyCode.X];
+        public KeyboardKey Y => m_keyControllerMap[KeyCode.Y];
+        public KeyboardKey Z => m_keyControllerMap[KeyCode.Z];
+        public KeyboardKey Alpha0 => m_keyControllerMap[KeyCode.Alpha0];
+        public KeyboardKey Alpha1 => m_keyControllerMap[KeyCode.Alpha1];
+        public KeyboardKey Alpha2 => m_keyControllerMap[KeyCode.Alpha2];
+        public KeyboardKey Alpha3 => m_keyControllerMap[KeyCode.Alpha3];
+        public KeyboardKey Alpha4 => m_keyControllerMap[KeyCode.Alpha4];
+        public KeyboardKey Alpha5 => m_keyControllerMap[KeyCode.Alpha5];
+        public KeyboardKey Alpha6 => m_keyControllerMap[KeyCode.Alpha6];
+        public KeyboardKey Alpha7 => m_keyControllerMap[KeyCode.Alpha7];
+        public KeyboardKey Alpha8 => m_keyControllerMap[KeyCode.Alpha8];
+        public KeyboardKey Alpha9 => m_keyControllerMap[KeyCode.Alpha9];
+        public KeyboardKey F1 => m_keyControllerMap[KeyCode.F1];
+        public KeyboardKey F2 => m_keyControllerMap[KeyCode.F2];
+        public KeyboardKey F3 => m_keyControllerMap[KeyCode.F3];
+        public KeyboardKey F4 => m_keyControllerMap[KeyCode.F4];
+        public KeyboardKey F5 => m_keyControllerMap[KeyCode.F5];
+        public KeyboardKey F6 => m_keyControllerMap[KeyCode.F6];
+        public KeyboardKey F7 => m_keyControllerMap[KeyCode.F7];
+        public KeyboardKey F8 => m_keyControllerMap[KeyCode.F8];
+        public KeyboardKey F9 => m_keyControllerMap[KeyCode.F9];
+        public KeyboardKey F10 => m_keyControllerMap[KeyCode.F10];
+        public KeyboardKey F11 => m_keyControllerMap[KeyCode.F11];
+        public KeyboardKey F12 => m_keyControllerMap[KeyCode.F12];
+        public KeyboardKey F13 => m_keyControllerMap[KeyCode.F13];
+        public KeyboardKey F14 => m_keyControllerMap[KeyCode.F14];
+        public KeyboardKey F15 => m_keyControllerMap[KeyCode.F15];
+        public KeyboardKey UpArrow => m_keyControllerMap[KeyCode.UpArrow];
+        public KeyboardKey DownArrow => m_keyControllerMap[KeyCode.DownArrow];
+        public KeyboardKey LeftArrow => m_keyControllerMap[KeyCode.LeftArrow];
+        public KeyboardKey RightArrow => m_keyControllerMap[KeyCode.RightArrow];
+        public KeyboardKey Space => m_keyControllerMap[KeyCode.Space];
+        public KeyboardKey Return => m_keyControllerMap[KeyCode.Return];
+        public KeyboardKey Escape => m_keyControllerMap[KeyCode.Escape];
+        public KeyboardKey Tab => m_keyControllerMap[KeyCode.Tab];
+        public KeyboardKey Backspace => m_keyControllerMap[KeyCode.Backspace];
+        public KeyboardKey CapsLock => m_keyControllerMap[KeyCode.CapsLock];
+        public KeyboardKey LeftShift => m_keyControllerMap[KeyCode.LeftShift];
+        public KeyboardKey RightShift => m_keyControllerMap[KeyCode.RightShift];
+        public KeyboardKey LeftControl => m_keyControllerMap[KeyCode.LeftControl];
+        public KeyboardKey RightControl => m_keyControllerMap[KeyCode.RightControl];
+        public KeyboardKey LeftAlt => m_keyControllerMap[KeyCode.LeftAlt];
+        public KeyboardKey RightAlt => m_keyControllerMap[KeyCode.RightAlt];
+        public KeyboardKey LeftCommand => m_keyControllerMap[KeyCode.LeftCommand];
+        public KeyboardKey RightCommand => m_keyControllerMap[KeyCode.RightCommand];
+        public KeyboardKey Menu => m_keyControllerMap[KeyCode.Menu];
+        public KeyboardKey Comma => m_keyControllerMap[KeyCode.Comma];
+        public KeyboardKey Period => m_keyControllerMap[KeyCode.Period];
+        public KeyboardKey Slash => m_keyControllerMap[KeyCode.Slash];
+        public KeyboardKey BackQuote => m_keyControllerMap[KeyCode.BackQuote];
+        public KeyboardKey Quote => m_keyControllerMap[KeyCode.Quote];
+        public KeyboardKey Semicolon => m_keyControllerMap[KeyCode.Semicolon];
+        public KeyboardKey LeftBracket => m_keyControllerMap[KeyCode.LeftBracket];
+        public KeyboardKey RightBracket => m_keyControllerMap[KeyCode.RightBracket];
+        public KeyboardKey Backslash => m_keyControllerMap[KeyCode.Backslash];
+        public KeyboardKey Minus => m_keyControllerMap[KeyCode.Minus];
+        public KeyboardKey Equals_k => m_keyControllerMap[KeyCode.Equals];
+        public KeyboardKey Tilde => m_keyControllerMap[KeyCode.Tilde];
+        public KeyboardKey Keypad0 => m_keyControllerMap[KeyCode.Keypad0];
+        public KeyboardKey Keypad1 => m_keyControllerMap[KeyCode.Keypad1];
+        public KeyboardKey Keypad2 => m_keyControllerMap[KeyCode.Keypad2];
+        public KeyboardKey Keypad3 => m_keyControllerMap[KeyCode.Keypad3];
+        public KeyboardKey Keypad4 => m_keyControllerMap[KeyCode.Keypad4];
+        public KeyboardKey Keypad5 => m_keyControllerMap[KeyCode.Keypad5];
+        public KeyboardKey Keypad6 => m_keyControllerMap[KeyCode.Keypad6];
+        public KeyboardKey Keypad7 => m_keyControllerMap[KeyCode.Keypad7];
+        public KeyboardKey Keypad8 => m_keyControllerMap[KeyCode.Keypad8];
+        public KeyboardKey Keypad9 => m_keyControllerMap[KeyCode.Keypad9];
+        public KeyboardKey KeypadPeriod => m_keyControllerMap[KeyCode.KeypadPeriod];
+        public KeyboardKey KeypadDivide => m_keyControllerMap[KeyCode.KeypadDivide];
+        public KeyboardKey KeypadMultiply => m_keyControllerMap[KeyCode.KeypadMultiply];
+        public KeyboardKey KeypadMinus => m_keyControllerMap[KeyCode.KeypadMinus];
+        public KeyboardKey KeypadPlus => m_keyControllerMap[KeyCode.KeypadPlus];
+        public KeyboardKey KeypadEnter => m_keyControllerMap[KeyCode.KeypadEnter];
+        public KeyboardKey Numlock => m_keyControllerMap[KeyCode.Numlock];
+        public KeyboardKey Print => m_keyControllerMap[KeyCode.Print];
+        public KeyboardKey Insert => m_keyControllerMap[KeyCode.Insert];
+        public KeyboardKey Delete => m_keyControllerMap[KeyCode.Delete];
+        public KeyboardKey Home => m_keyControllerMap[KeyCode.Home];
+        public KeyboardKey End => m_keyControllerMap[KeyCode.End];
+        public KeyboardKey PageUp => m_keyControllerMap[KeyCode.PageUp];
+        public KeyboardKey PageDown => m_keyControllerMap[KeyCode.PageDown];
+        public KeyboardKey Pause => m_keyControllerMap[KeyCode.Pause];
+        public KeyboardKey ScrollLock => m_keyControllerMap[KeyCode.ScrollLock];
+        public KeyboardKey Clear => m_keyControllerMap[KeyCode.Clear];
     }
     #endregion
 }
\ No newline at end of file