Pages


Thứ Sáu, 27 tháng 9, 2013

Thao tác với chuột trong Autoit

 Mouse Functions
Các hàm thao tác với phím và chuột là các hàm cơ bản để lập trình các ứng dụng tự động từ Auto game đến việc thực hiện các thao tác nhập xuất dữ liệu từ bàn phím hoặc tương tác với các phím trên màn hình bằng các hàm điều khiển chuột . 

Autoit cung cấp các hàm thao tác với phím và chuột và hook keys ở tầng thấp (low-level) , thuận tiện và linh hoạt trong việc lập trình các thao tác tự động .

Sau đây mình sẽ trình bày những phần cơ bản về thao tác với chuột và phím , kèm theo một số Demo về hook lấy input từ keyboard và mouse (Theo dõi tác vụ bàn phím và chuột ) . Bài này hơi dài nên mình chia làm 2 phần : Phần 1 (Mouse Functions) , Phần 2 (Keys Functions)




  Một số hàm thao tác với chuột :

  • MouseGetPos : Trả về vị trí hiện tại của chuột
Cú pháp: MouseGetPos  ( [dimension] )
dimension = 0 hàm trả về tọa độ X của chuột
dimension =1 hàm trả về tọa độ Y của chuột

  • MouseMove : Di chuyển trỏ chuột đến tọa độ định sẵn
Cú pháp: MouseMove  ( x, y [, speed] )
(x,y) : tọa độ của chuột
speed : tốc độ di chuột (1-100)

  • MouseClick : Click chuột tại tọa độ đã định
Cú pháp: MouseClick ( "button" [, x, y [, clicks [, speed]]] )
button : tùy chọn click "left", "right", "middle", "main", "menu", "primary", "secondary". 
(x,y) : tọa độ của chuột
clicks : Số click được thực hiện (Mặc định là 1)
speed : tốc độ di chuột (1-100)

  • MouseClickDrag : Kết hợp click và move , kéo thả chuột từ tọa độ (x1,y1) đến tọa độ (x2,y2)
Cú pháp: MouseClickDrag ( "button", x1, y1, x2, y2 [, speed] )

Ví dụ:

Code để lấy tọa độ trỏ chuột thời gian thực :


 #include <Misc.au3>

$dll = DllOpen("user32.dll")

while 1

    $pos = MouseGetPos()

    ToolTip("Vị trí hiện tại của chuột(x,y) :" & $pos[0] & "," & $pos[1])

    if _IsPressed('1B',$dll) then exit ; Nhấn Esc để thoát chương trình

wend


Một số ví dụ về các hàm thao tác với chuột :



$pos = MouseGetPos() ; Lấy tọa độ chuột

MsgBox(0, "Vị trí hiện tại của chuột(x,y) :", $pos[0] & "," & $pos[1])

MouseMove (100,100) ; Di chuyển trỏ chuột đến tọa độ (100,100)

MouseClick("left", 500, 500, 2) ; Click double chuột trái ở tọa độ (500,500)




  Hàm thao tác với API để click chuột (Không chiếm chuột và màn hình) :

Sử dụng thư viện àm có sẵn của Microsoft ta có thể thực hiện click không chiếm chuột và màn hình , có chức năng tương tự với hàm click chuột thông thường nhưng có thêm uuw điểm là không chiếm chuột :

Ví dụ về sử dụng API để click chuột (code click một điểm trên destop không chiếm chuột ) :


#include <WinAPI.au3>

#include <Windowsconstants.au3> ; Khai báo các hằng $WM_ ... bằng cách include thư viện



Const $MK_LBUTTON = 0x1

Const $MK_MBUTTON = 0x10

Const $MK_RBUTTON = 0x2  ; Khai báo các giá trị hằng



Global $Struct = DllStructCreate($tagPoint)

$hwnd = _WinAPI_WindowFromPoint($Struct) ; Lấy handle destop



pclick(200,50,'Left Double Click') ; Hàm click double chuột trái tại tọa độ (200,50)



Func pclick($x=0,$y=0,$button='Left Click')

$lParam = ($y * 65536) + ($x)

    Switch $button

        Case $button='Left Click'

            _WinAPI_PostMessage($hwnd, $WM_LBUTTONDOWN, $MK_LBUTTON,$lParam)

            _WinAPI_PostMessage($hwnd, $WM_LBUTTONUP, 0,$lParam)

        Case $button='Left Double Click'

            _WinAPI_PostMessage($hwnd, $WM_LBUTTONDOWN, $MK_LBUTTON,$lParam)

            _WinAPI_PostMessage($hwnd, $WM_LBUTTONUP, 0,$lParam)

            _WinAPI_PostMessage($hwnd, $WM_LBUTTONDBLCLK, $MK_LBUTTON,$lParam)

            _WinAPI_PostMessage($hwnd, $WM_LBUTTONUP, 0,$lParam)

        Case $button='Middle Click'

            _WinAPI_PostMessage($hwnd, $WM_MBUTTONDOWN, $MK_MBUTTON,$lParam)

            _WinAPI_PostMessage($hwnd, $WM_MBUTTONUP, 0,$lParam)

        Case $button='Middle Double Click'

            _WinAPI_PostMessage($hwnd, $WM_MBUTTONDOWN, $MK_MBUTTON,$lParam)

            _WinAPI_PostMessage($hwnd, $WM_MBUTTONUP, 0,$lParam)

            _WinAPI_PostMessage($hwnd, $WM_MBUTTONDBLCLK, $MK_MBUTTON,$lParam)

            _WinAPI_PostMessage($hwnd, $WM_MBUTTONUP, 0,$lParam)

        Case $button='Right Click'

            _WinAPI_PostMessage($hwnd, $WM_RBUTTONDOWN, $MK_RBUTTON,$lParam)

            _WinAPI_PostMessage($hwnd, $WM_RBUTTONUP, 0,$lParam)

        Case $button='Right Double Click'

            _WinAPI_PostMessage($hwnd, $WM_RBUTTONDOWN, $MK_RBUTTON,$lParam)

            _WinAPI_PostMessage($hwnd, $WM_RBUTTONUP, 0,$lParam)

            _WinAPI_PostMessage($hwnd, $WM_RBUTTONDBLCLK, $MK_RBUTTON,$lParam)

            _WinAPI_PostMessage($hwnd, $WM_RBUTTONUP, 0,$lParam)

        Case $button='Mouse Move'

            _WinAPI_PostMessage($hwnd, $WM_MOUSEMOVE, 0,$lParam)

            _WinAPI_PostMessage($hwnd, $WM_MOUSEMOVE, 0,$lParam)

    EndSwitch

EndFunc





 Và đây là một tool dùng để lấy tọa độ chuột và thực hiện click (không chiếm chuột ) trên tọa độ đã định.

Tool được viết bằng mã nguồn Autoit sưu tầm từ hocautoit.com , giao diện GUI dễ sử dụng , các bạn có thể phát triển thêm tùy mục đích lập trình .

Link DownloadAutoClick.au3

Vầy là xong phần thao tác với chuột , ở các bài sau về UDF mình sẽ release một số mã nguồn về các thao tác theo dõi hoạt động của chuột trong một thời gian đã định và tái thực hiện các hoạt động đó nhằm đơn giản hóa việc lập trình AutoClick , ở phần 2 mình sẽ đề cập về các hàm thao tác với phím ;)




Share this post
  • Share to Facebook
  • Share to Twitter
  • Share to Google+
  • Share to Stumble Upon
  • Share to Evernote
  • Share to Blogger
  • Share to Email
  • Share to Yahoo Messenger
  • More...

Nhận Tin Qua Email

Cùng tham gia với hơn 1500 người đã đăng ký nhận tin qua Email với các Tin mới nhất,Nóng nhất trong ngày cập nhật liên tục 24h trên Tintuc.tv từ các Báo Mạng uy tín của Việt Nam!

Khi đăng ký nhận tin,Bạn sẽ nhận được Email từ chúng tôi.Đăng nhập email để hoàn tất quá trình đăng ký.

0 nhận xét

:) :-) :)) =)) :( :-( :(( :d :-d @-) :p :o :>) (o) [-( :-? (p) :-s (m) 8-) :-t :-b b-( :-# =p~ :-$ (b) (f) x-) (k) (h) (c) cheer

 
Posts RSSComments RSSBack to top
Copyright © 2013 by Autoit Việt ∙.
Yagami Raito 's Blog - Nơi khởi đầu cho các lập trình viên.