Mouse Interface - Soju06/Input GitHub Wiki

๋งˆ์šฐ์Šค ์ธํ„ฐํŽ˜์ด์Šค

Input.IMouseHook

๋งˆ์šฐ์Šค ํ›„ํฌ ์ธํ„ฐํŽ˜์ด์Šค

  • ์˜ˆ์ œ

      using Input;
      using Input.Platforms.Windows;
      using System.Diagnostics;
    
      Debug.WriteLine("Hello, World!");
    
      // ํ‚ค๋ณด๋“œํ›„์ปค๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
      // ๋งŒ์•ฝ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ํ”Œ๋žซํผ์ธ ๊ฒฝ์šฐ 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.IMouseSimulation

๋งˆ์šฐ์Šค ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์ธํ„ฐํŽ˜์ด์Šค

  • ์˜ˆ์ œ

      using Input;
      using System.Diagnostics;
    
      Debug.WriteLine("Hello, World!");
    
      // ๋งˆ์šฐ์Šค ์‹œ๋ฎฌ๋ ˆ์ด์…˜๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
      // ๋งŒ์•ฝ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ํ”Œ๋žซํผ์ธ ๊ฒฝ์šฐ NotSupportedException ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
      var simulation = Inputs.Use<IMouseSimulation>();
    
      // ๋””๋ฒ„๊ทธ๋ฅผ ํ™œ์„ฑํ™” ํ•ฉ๋‹ˆ๋‹ค.
      // ๋„ค์ดํ‹ฐ๋ธŒ ์˜ค๋ฅ˜๋ฅผ ๋””๋ฒ„๊ทธ ์ถœ๋ ฅ ์ฐฝ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
      simulation.Debug = true;
    
      // 1.1 Click
    
      // ํ˜„์žฌ ๋งˆ์šฐ์Šค ์œ„์น˜์— ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
      simulation.Click();
    
      // ํ˜„์žฌ ๋งˆ์šฐ์Šค ์œ„์น˜์—์„œ x + 10, y + 10 ์œ„์น˜์— ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
      simulation.Click(10, 10);
    
      // ํ˜„์žฌ ๋งˆ์šฐ์Šค ์œ„์น˜์— ์šฐํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
      simulation.Click(InputMouseButtons.Right);
    
      // ํ˜„์žฌ ๋งˆ์šฐ์Šค ์œ„์น˜์—์„œ x + 10, y + 10 ์œ„์น˜์— ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
      simulation.Click(InputMouseButtons.Right, 10, 10);
    
      // ํ™”๋ฉด ๊ธฐ์ค€ ์œ„์น˜์—์„œ x = 100, y = 100 ์œ„์น˜์— ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
      simulation.AbsoluteClick(100, 100);
    
      // ํ™”๋ฉด ๊ธฐ์ค€ ์œ„์น˜์—์„œ x = 100, y = 100 ์œ„์น˜์— ์šฐํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
      simulation.AbsoluteClick(InputMouseButtons.Right, 100, 100);
    
      // 1.2 Down
    
      // ์™ผ์ชฝ ๋งˆ์šฐ์Šค๋ฅผ ๋ˆ„๋ฆ…๋‹ˆ๋‹ค.
      simulation.Down(InputMouseButtons.Left);
    
      // ํ˜„์žฌ ๋งˆ์šฐ์Šค ์œ„์น˜์—์„œ x + 10, y + 10 ์œ„์น˜์—์„œ ์™ผ์ชฝ ๋งˆ์šฐ์Šค๋ฅผ ๋ˆ„๋ฆ…๋‹ˆ๋‹ค.
      simulation.Down(InputMouseButtons.Left, 10, 10);
    
      // ํ™”๋ฉด ๊ธฐ์ค€ ์œ„์น˜์—์„œ x = 100, y = 100 ์œ„์น˜์— ๋ˆ„๋ฆ…๋‹ˆ๋‹ค.
      simulation.AbsoluteDown(InputMouseButtons.Left, 100, 100);
    
      // 1.3 Up
    
      // ์™ผ์ชฝ ๋งˆ์šฐ์Šค๋ฅผ ๋—๋‹ˆ๋‹ค.
      simulation.Up(InputMouseButtons.Left);
    
      // ํ˜„์žฌ ๋งˆ์šฐ์Šค ์œ„์น˜์—์„œ x + 10, y + 10 ์œ„์น˜์—์„œ ์™ผ์ชฝ ๋งˆ์šฐ์Šค๋ฅผ ๋—๋‹ˆ๋‹ค.
      simulation.Up(InputMouseButtons.Left, 10, 10);
    
      // ํ™”๋ฉด ๊ธฐ์ค€ ์œ„์น˜์—์„œ x = 100, y = 100 ์œ„์น˜์—์„œ ๋—๋‹ˆ๋‹ค.
      simulation.AbsoluteUp(InputMouseButtons.Left, 100, 100);
    
      // 1.4 Move
    
      // ํ˜„์žฌ ๋งˆ์šฐ์Šค ์œ„์น˜์—์„œ x + 10, y + 10 ์œ„์น˜๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
      simulation.Move(10, 10);
    
      // ํ™”๋ฉด ๊ธฐ์ค€ ์œ„์น˜์—์„œ x = 100, y = 100 ์œ„์น˜๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
      //simulation.AbsoluteMove(100, 100);
    
      // 1.5 Scroll
    
      // ์Šคํฌ๋กค์„ ๋งˆ์šฐ์Šค ์Šคํฌ๋กค 1 ๋งŒํผ ์˜ฌ๋ฆฝ๋‹ˆ๋‹ค.
      simulation.Scroll(1);
      simulation.ScrollUp(1);
    
      // ์Šคํฌ๋กค์„ ๋งˆ์šฐ์Šค ์Šคํฌ๋กค 1 ๋งŒํผ ๋‚ด๋ฆฝ๋‹ˆ๋‹ค.
      simulation.Scroll(-1);
      simulation.ScrollDown(1);
    
      // 1.6 Mouse State
    
      // ํ˜„์žฌ ๋งˆ์šฐ์Šค์˜ x, y ์ขŒํ‘œ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
      simulation.GetMousePosition(out var x, out var y);
    
      // ํ˜„์žฌ ๋งˆ์šฐ์Šค ์™ผ์ชฝ ๋ฒ„ํŠผ์ด ๋ˆŒ๋ ค์žˆ๋Š”์ง€ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
      simulation.IsMouseDown(InputMouseButtons.Left);
    

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