오토키보드 구현, Win32 API를 C#으로 마이그레이션

안녕하세요. 언제나 휴일에 언휴예요.

현재 원격제어 프로그램 프로젝트에서 이미지를 송수신하는 부분까지 구현하였습니다.

이제 프로그램 방식으로 키보드와 이벤트를 발생시켜 제어하는 부분으로 넘어갈 단계입니다.

키보드와 마우스 이벤트 발생하면 이 정보를 전송하는 부분과 이를 수신하는 부분을 구현해야겠죠..

그리고 수신한 곳에서는 프로그램 방식으로 키보드와 마우스 이벤트를 발생시켜야 합니다.

흔히 오토 마우스, 오토 키보드라고 말하는 프로그램에 사용하는 기술이죠.

그런데 키보드와 마우스 이벤트를 발생하는 것은 Win32 API에서 제공하고 있어요. 이를 이용하기 위해 마이그레이션을 할 거예요.

이 부분을 미리 학습하기 위해 보너스 트랙2를 마련하였습니다.

동영상 강의를 참고하시고 결과 코드는 아래와 같습니다.

/* https://ehpub.co.kr
 * 원격제어 프로그램 - 언제나 프로젝트 *                                                                                                         
 * 키보드 이벤트 발생 - Win32 Migration
 * 보너스 강의 2 */

using System.Runtime.InteropServices;
using System.Threading;

namespace Win32_Migration
{
    class Program
    {
        [DllImport("User32.dll")]
        static extern void keybd_event(byte vk, byte scan, int flag, int extra);

        public static void KeyDown(int keycode)
        {
            keybd_event((byte)keycode, 0, 0, 0);
        }
        public static void KeyUp(int keycode)
        {
            keybd_event((byte)keycode, 0, 2, 0);
        }
        static void Main(string[] args)
        {      
            Thread.Sleep(5000);
            KeyDown('D');
            Thread.Sleep(300);
            KeyUp('D');
            Thread.Sleep(300);
            KeyDown('J');
            Thread.Sleep(300);
            KeyUp('J');
            Thread.Sleep(300);
            KeyDown('S');
            Thread.Sleep(300);
            KeyUp('S');
            Thread.Sleep(300);
            KeyDown('W');
            Thread.Sleep(300);
            KeyUp('W');
            Thread.Sleep(300);
            KeyDown('P');
            Thread.Sleep(300);
            KeyUp('P');
            Thread.Sleep(300);
            KeyDown('S');
            Thread.Sleep(300);
            KeyUp('S');
            Thread.Sleep(300);
            KeyDown('K');
            Thread.Sleep(300);
            KeyUp('K');
            Thread.Sleep(300);
            KeyDown('G');
            Thread.Sleep(300);
            KeyUp('G');
            Thread.Sleep(300);
            KeyDown('B');
            Thread.Sleep(300);
            KeyUp('B');
            Thread.Sleep(300);
            KeyDown('D');
            Thread.Sleep(300);
            KeyUp('D');
            Thread.Sleep(300);
            KeyDown('L');
            Thread.Sleep(300);
            KeyUp('L');
            Thread.Sleep(300);
            KeyDown('F');
            Thread.Sleep(300);
            KeyUp('F');   
        }
    }
}