Windows_/Windows_C# & App

C# 마우스 클릭, 위치정보 가져오기

sosal 2014. 12. 3. 01:41
반응형


/*

 http://sosal.kr/
 * made by so_Sal
 */




- 마우스 위치정보 가져오기


마우스 위치의 정보를 가져오는건 매우 쉽습니다.


Cursor.Position.X.ToString();

Cursor.Position.Y.ToString();


이렇게 Cursor 라는 객체를 이용하여 바로 가져올 수 있습니다.


private static System.Timers.Timer aTimer;

public Form1()

{

    InitializeComponent();

    init_variables();

    

    //타이머 시작

    aTimer = new System.Timers.Timer(100);

    aTimer.Elapsed += timerFunction;

    aTimer.Enabled = true;

}


private void timerFunction(object sender, System.Timers.ElapsedEventArgs e)

{

    //throw new NotImplementedException();

    label_X.Text = "X - " + Cursor.Position.X.ToString();

    label_Y.Text = "Y - " + Cursor.Position.Y.ToString();

}



이렇게 0.1초마다 timeFunction 함수를 실행시키는 timer를 생성하여 Label에 X, Y 위치를 바꿔주도록 하면

실시간으로 마우스의 위치정보 (X, Y) 좌표를 가져옵니다.





- 마우스 클릭 이벤트 발생시키기


아래와 같이 user32.dll을 Import 해주셔야 마우스 이벤트를 발생시킬 수 있습니다.


[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]

public static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint cButtons, uint dwExtraInfo);

private const int MOUSEEVENTF_LEFTDOWN = 0x02;

private const int MOUSEEVENTF_LEFTUP = 0x04;

private const int MOUSEEVENTF_RIGHTDOWN = 0x08;

private const int MOUSEEVENTF_RIGHTUP = 0x10;



mouse_event는 user32.dll 안에 있는 함수이며, 아래 변수는 각 dwFlags의 의미에 대한 선언문 정도로 생각해주셔도 됩니다.


좌클릭 이벤트 발생시키기:

mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, (uint)Cursor.Position.X, (uint)Cursor.Position.Y, 0, 0);


우클릭 이벤트 발생시키기:

mouse_event(MOUSEEVENTF_RIGHTDOWN | MOUSEEVENTF_RIGHTUP, (uint)Cursor.Position.X, (uint)Cursor.Position.Y, 0, 0);




첫번째인수: 좌클릭 or 우클릭

두번째인수: X좌표 (직접 X를 입력해주셔도 되고, Cursor.Position.X 로 현재 마우스 위치를 가져오셔도 됩니다.)

세번째인수: Y좌표






- 마우스 현재위치를 0.1초에 한번씩 자동으로 좌클릭 하는 프로그램 소스


private static System.Timers.Timer aTimer;

public Form1()

{

    InitializeComponent();

    init_variables();

    

    //타이머 시작

    aTimer = new System.Timers.Timer(100);

    aTimer.Elapsed += timerFunction;

    aTimer.Enabled = true;

}


private void timerFunction(object sender, System.Timers.ElapsedEventArgs e)

{

    mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP,

                             (uint)Cursor.Position.X, (uint)Cursor.Position.Y, 0, 0);

}