[WinForm] Mouse Api

2012. 2. 17. 15:19C#/WinForm

mouse_event함수는 인수로 지정한 내용의 Mouse Event를 발생시킵니다.

Declare Sub mouse_event Lib "user32" Alias "mouse_event" (ByVal dwFlags As Integer, ByVal dx As Integer, ByVal dy As Integer, ByVal cButtons As Integer, ByVal dwExtaInfo As Integer)
▶VB.NET 선언

mouse_event(flag, x, y, cbtn, 0)
▶VB.NET 호출

[DllImport("user32.dll")]
public static extern void mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtaInfo);
▶C# 선언

mouse_event(flag, x, y, cbtn, 0);
▶C# 호출

mouse_event함수의 인수중 dwFlags값은 어떤 Mouse Event를 발생시킬지 지정하는 것으로 다음과 같은 값을 건네줄 수 있습니다.

 상수  값  설명
 MOUSEEVENTF_ABSOLUTE  8000  x, y mouse의 위치값을 포함하여 event를 발생함
 MOUSEEVENTF_MOVE  1  x, y에 지정한 위치로 이동
 MOUSEEVENTF_LEFTDOWN  2  왼쪽 button down
 MOUSEEVENTF_LEFTUP  4  왼쪽 button up
 MOUSEEVENTF_RIGHTDOWN  8  오른쪽 button down
 MOUSEEVENTF_RIGHTUP  10  오른쪽 button up
 MOUSEEVENTF_MIDDLEDOWN  20  가운데 button down
 MOUSEEVENTF_MIDDLEUP  40  가운데 button up
 MOUSEEVENTF_WHEEL  800  mouse wheel 동작

표에서 값은 VB.NET의 경우 &H / C#의 경우 0x로 처리하여야 합니다.

dx와 dy는 화면상에 Mouse를 위치시킬 좌표를 지정합니다. 단 이 위치는 MOUSEEVENTF_MOVE와 MOUSEEVENTF_ABSOLUTE가 지정되어야 실제로 Mouse Cursor가 이동되는 효과를 볼 수 있습니다.

Mouse의 좌표 지정시 실제 Monitor화면의 해상도를 기준점으로 잡으려면 65535로 가로세로 해상도를 나누고 Mouse Cursor를 위치시킬 위치를 곱하면 됩니다. 예를 들어 화면 해상도가 1024*768일 경우 (65535 / 1024) * y, (65535 / 768) * y 와 같이 처리하시면 원하는 곳으로 이동하게 됩니다.

cButton인수에 MOUSEEVENTF_WHEEL을 지정하였을 경우 한번에 Scroll되는 횟수를 의미하게 되며 마지막 dwExtaInfo인수는 Mouse와 관련된 추가적인 정보값을 건네주는 인수입니다.(dwExtaInfo에는 특별한 경우가 아니면 0으로 지정합니다. 이 인수가 사용되는 경우는 일반적인 Mouse가 아닌 여러가지 기능적 Button이 더 추가된 특수한 Mouse일 경우등에 사용됩니다.)

Mouse Event지정시에는 or 단위를 통해 여러가지 동작을 한꺼번에 지정할 수 도 있습니다.

mouse_event(&H8 Or &H10, 0, 0, 0, 0)
▶VB.NET 호출

mouse_event(0x8 | 0x10, 0, 0, 0, 0);
▶C# 호출

위 예제는 Mouse 오른쪽 Button을 눌렀다가 다시 떼는 작업을 수행합니다.

출처: 

'C# > WinForm' 카테고리의 다른 글

[WinForm]람다 델리게잇 익명메소드  (0) 2012.04.16
[WinForm] 익명변수  (0) 2012.04.06
[WinForm] 크로스쓰레딩 발동잠금  (0) 2012.02.17
[WinForm] 마우스 포인트 옮기기  (0) 2012.02.17
[WinForm] C#에서 Trace쓰기  (2) 2011.12.01