비주얼 베이직 으로 사이트내 특정 위치에서 마우스 클릭 프로그램

Posted by 겨울에
2011. 2. 4. 02:05 scrap/ Visual Basic
질문: 비주얼 베이직 으로 사이트내 특정 위치에서 마우스 클릭 프로그램
2007-10-12 13:22

비주얼 베이직으로 한 특정 사이트에서 특정 위치를 계속해서 마우스 클릭하는
프로그램을 만들려고 합니다.
이 작업을 자동 반복으로 해서 이 프로그램이 실행되는 동안 다른  마우스 작업이나
컴퓨터를 사용할수 있도록 할수 있는 프로그램 하나만 부탁드립니다.


답변: re: 비주얼 베이직 으로 사이트내 특정 위치에서 마우스 클릭 프로그램
2007-10-12 13:50

프로그램을 사용하는동안 다른 마우스나 키보드 작업을 하기에는 무리가 있으시리라고 봅니다.
자동으로 누르셔야 하는 창이 최상위여야 하는데, 다른 작업을 하시면 그 창이 최상위가 되어버리지요.
그리고 그 문제는 어떻게든 해결하였다고 하더라도 작업을 하시기에는 문제가 있으실겁니다.

제가 알고있는 소스들만 활용하여 그렇게 하자면

!-----------!---------------!
! 매크로창    !   빈공간          !
!-----------!---------------!
!                                        !
!        기타 작업창                !
!                                        !
!                                        !
!---------------------------!

이런식으로라도 둬야할것 같구요..

아니면 항상위를 깔아주셨으면 문제 없구요..



자동클릭하실 좌표를 미리 알아두시구요.
밑에 코드부분에 X좌표, Y 좌표 해둔곳에 넣어주시면 되구요...
(좌표 얻으실 방법은 밑에 코드보면 나와있는 "현제좌표얻기" 부분의 코드부분을 활용하셔서
텍스트박스 등에 표시하게 하시면 되겠죠.)

밑의 코드대로 하시면 마우스는 따라 다니긴 하는데요..
활성화창이 자꾸 자동클릭하는창으로 갑니다..
그걸 방지하려면 마지막에 

Call mouse_event(2, X1, Y1, 0, GetMessageExtraInfo())
Call mouse_event(4, X1, Y1, 0, GetMessageExtraInfo())

이걸 넣어주시면 마지막 동작으로 작업하던창을 한번 클릭하는걸로서 활성화는 되찾는데요..
이것도 뭔가 문제가 생기겠죠.


이 코드도 그냥 만들었다는것에 의미를 둔 문제 투성일겁니다 ㅋㅋㅋ



모듈은
Const MOUSEEVENTF_MOVE = 1 '{ mouse move }
Const MOUSEEVENTF_LEFTDOWN = 2 '{ left button down }
Const MOUSEEVENTF_LEFTUP = 4 '{ left button up }
Const MOUSEEVENTF_RIGHTDOWN = 8 '{ right button down }
Const MOUSEEVENTF_RIGHTUP = 10 '{ right button up }
Const MOUSEEVENTF_MIDDLEDOWN = 20 '{ middle button down }
Const MOUSEEVENTF_MIDDLEUP = 40 '{ middle button up }
Const MOUSEEVENTF_WHEEL = 800 '{ wheel button rolled }
Const MOUSEEVENTF_ABSOLUTE = 8000 '{ absolute move }





코드는..

Private Declare Function SetCursorPos Lib "user32" (ByVal X As Long, ByVal Y As Long) As Long
Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
Private Declare Function GetMessageExtraInfo Lib "user32" () As Long
Private Declare Function GetCursorPos Lib "user32" (lpPoint As _
POINTAPI) As Long

Private Type POINTAPI
X As Long
Y As Long
End Type
Dim a As POINTAPI
Dim b As Long
Dim c As Long


Private Sub Timer1_Timer()
X2 = [[[[[자동클릭하실곳의 x좌표]]]]]]]
Y2 = [[[[[자동클릭하실곳의 y좌표]]]]]]]

'현제 마우스 좌표 얻기
ret = GetCursorPos(a)
X1 = a.X
Y1 = a.Y
Label1 = X1 & vbCrLf & Y1

'지정된 좌표로 이동하여 마우스 왼쪽 클릭
SetCursorPos X2, Y2
Call mouse_event(2, X2, Y2, 0, GetMessageExtraInfo())
Call mouse_event(4, X2, Y2, 0, GetMessageExtraInfo())

'아까 얻은 좌표로 이동
SetCursorPos X1, Y1
End Sub