이전에 MFC 버전 마우스 클릭 매크르롤 제작한 적 있습니다.
뭐 그닥 불편 없기는 했지만, 마우스 위치 오차등 약간 문제가 있었고, C#으로도 한번 제작해보까? 하는 생각에 뚝딱~ 만들어봤습니다. 소스코드도 얼마 안되니 풀소스 코드도 공개합니다.



public partial class MainForm : Form
{
    [DllImport("user32.dll")]
    static extern void keybd_event(byte vk, byte scan, int flags, ref int extrainfo);
    [DllImport("user32.dll")]
    static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint dwData, int dwExtraInfo);

    private const uint MOUSEMOVE    = 0x0001;   // 마우스 이동
    private const uint ABSOLUTEMOVE = 0x8000;   // 전역 위치
    private const uint LBUTTONDOWN  = 0x0002;   // 왼쪽 마우스 버튼 눌림
    private const uint LBUTTONUP    = 0x0004;   // 왼쪽 마우스 버튼 떼어짐

    private bool m_bStart = false;

    private System.Timers.Timer m_ClickTimer;
    public MainForm()
    {
        InitializeComponent();

        m_ClickTimer = new System.Timers.Timer();
        m_ClickTimer.Elapsed += new System.Timers.ElapsedEventHandler(ClickTimeEvent);
    }

    private void OnClickStart(object sender, EventArgs e)
    {
        m_bStart = !m_bStart;
        m_ClickTimer.Enabled = m_bStart;

        if( !m_bStart )
        {
            btn_Start.Text = "시작";
            txt_Time.ReadOnly = false;
        }
        else
        {
            btn_Start.Text = "중지";
            txt_Time.ReadOnly = true;
            m_ClickTimer.Interval = Convert.ToUInt32(txt_Time.Text.ToString());
        }
    }

    private void ClickTimeEvent(object sender, System.Timers.ElapsedEventArgs e)
    {
        MouseClick(System.Windows.Forms.Cursor.Position);
    }

    private void MouseClick(Point pos)
    {
        mouse_event(LBUTTONDOWN, 0, 0, 0, 0);
        mouse_event(LBUTTONUP, 0, 0, 0, 0);
    }

    private void OnKeyPress(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar < 48 || e.KeyChar > 57)
        {
            MessageBox.Show("숫자만 입력 가능합니다.", "오류");
            txt_Time.Text = "";
            e.Handled = true;
        }
    }
}

+ Recent posts