Keyboard Interface - Soju06/Input GitHub Wiki

ํ‚ค๋ณด๋“œ ์ธํ„ฐํŽ˜์ด์Šค

Input.IKeyboardHook

ํ‚ค๋ณด๋“œ ํ›„ํฌ ์ธํ„ฐํŽ˜์ด์Šค

  • ์˜ˆ์ œ

      using Input;
      using Input.Platforms.Windows;
      using System.Diagnostics;
    
    
      // ํ‚ค๋ณด๋“œ ํ›„์ปค๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
      // ๋งŒ์•ฝ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ํ”Œ๋žซํผ์ธ ๊ฒฝ์šฐ NotSupportedException ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
      var hook = Inputs.Use<IKeyboardHook>();
    
      // ๋””๋ฒ„๊ทธ๋ฅผ ํ™œ์„ฑํ™” ํ•ฉ๋‹ˆ๋‹ค.
      // ๋„ค์ดํ‹ฐ๋ธŒ ์˜ค๋ฅ˜๋ฅผ ๋””๋ฒ„๊ทธ ์ถœ๋ ฅ ์ฐฝ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
      hook.Debug = true;
    
      // ํ‚ค๋ณด๋“œ ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค.
      var model = hook.KeyboardModel;
    
      // ํ‚ค๋ณด๋“œ๊ฐ€ ๋ˆŒ๋ ธ์„๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
      model.KeyDown += (sender, key, state) => {
      // Console์€ ์“ฐ๊ธฐ ์ง€์—ฐ์ด ๋ฐœ์ƒํ•˜๋ฏ€๋กœ ์ถ”์ฒœํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
      Debug.WriteLine($"KeyDown: {key} {state}");
    
          // ๋ฐ˜ํ™˜ ๊ฐ’์ด false์ด๋ฉด ์ž…๋ ฅ์„ ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค.
          return true;
      };
    
      // ํ‚ค๋ณด๋“œ๊ฐ€ ๋–ผ์กŒ์„๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
      model.KeyUp += (sender, key, state) => {
      // Console์€ ์“ฐ๊ธฐ ์ง€์—ฐ์ด ๋ฐœ์ƒํ•˜๋ฏ€๋กœ ์ถ”์ฒœํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
      Debug.WriteLine($"KeyDown: {key} {state}");
    
          // ๋ฐ˜ํ™˜ ๊ฐ’์ด false์ด๋ฉด ์ž…๋ ฅ์„ ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค.
          return true;
      };
      
      // ํ›„ํ‚น์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
      hook.HookStart();
    
      // ํ”Œ๋žซํผ์ด ์œˆ๋„์šฐ์ธ ๊ฒฝ์šฐ ์œˆ๋„์šฐ ๋ฉ”์‹œ์ง€๋ฅผ ํŽŒํ”„ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
      if (Platform.IsWindows) {
          while (WindowsMessagePump.Pumping()) {
              Debug.WriteLine("message pump");
          }
      }
    
      Console.ReadLine();
    

    ์›๋ณธ ์˜ˆ์ œ๋Š” ์—ฌ๊ธฐ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Input.IKeyboardSimulation

ํ‚ค๋ณด๋“œ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์ธํ„ฐํŽ˜์ด์Šค

  • ์˜ˆ์ œ

      using Input;
      using System.Diagnostics;
    
      // ํ‚ค๋ณด๋“œ ์‹œ๋ฎฌ๋ ˆ์ด์…˜๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
      // ๋งŒ์•ฝ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ํ”Œ๋žซํผ์ธ ๊ฒฝ์šฐ NotSupportedException ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
      var simulation = Inputs.Use<IKeyboardSimulation>();
    
      // ๋””๋ฒ„๊ทธ๋ฅผ ํ™œ์„ฑํ™” ํ•ฉ๋‹ˆ๋‹ค.
      // ๋„ค์ดํ‹ฐ๋ธŒ ์˜ค๋ฅ˜๋ฅผ ๋””๋ฒ„๊ทธ ์ถœ๋ ฅ ์ฐฝ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
      simulation.Debug = true;
    
    
      // 1.1 KeyClick
    
      // A ํ‚ค๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
      simulation.KeyClick(InputKeys.A);
    
      // ์™ผ์ชฝ ์ปจํŠธ๋กค ํ‚ค์™€ Zํ‚ค๋ฅผ ๋™์‹œ์— ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
      simulation.KeyClick(InputKeys.LeftControl, InputKeys.Z);
    
      // 1.2 KeyDown
    
      // A ํ‚ค๋ฅผ ๋ˆ„๋ฆ…๋‹ˆ๋‹ค.
      simulation.KeyDown(InputKeys.A);
    
      // A ํ‚ค์™€ Bํ‚ค๋ฅผ ๋ˆ„๋ฆ…๋‹ˆ๋‹ค.
      simulation.KeyDown(InputKeys.A, InputKeys.B);
    
      // 1.3 KeyUp
    
      // A ํ‚ค๋ฅผ ๋—๋‹ˆ๋‹ค.
      simulation.KeyUp(InputKeys.A);
    
      // A ํ‚ค์™€ Bํ‚ค๋ฅผ ๋—๋‹ˆ๋‹ค.
      simulation.KeyUp(InputKeys.A, InputKeys.B);
    
      // 1.4 TextEntry
    
      // H e l l o , W or l d ! ํ‚ค๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ๋ˆ„๋ฆ…๋‹ˆ๋‹ค.
      simulation.TextEntry("Hello, World!");
    
      // 1.5 IsKeyDown
    
      // A ํ‚ค๊ฐ€ ๋ˆŒ๋ ค์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
      simulation.IsKeyDown(InputKeys.A);
    
      // 1.6 ReleaseAllKeys
    
      // ํ‚ค๋ณด๋“œ์˜ ๋ชจ๋“  ํ‚ค๋ฅผ ๋—๋‹ˆ๋‹ค.
      simulation.ReleaseAllKeys();
    

    ์›๋ณธ ์˜ˆ์ œ๋Š” ์—ฌ๊ธฐ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.