Trở về
Tham gia nhóm m Autoit đ đưc hưng dn và gii đáp trc tiếp : http://fb.com/groups/autoitscript
Tin tức công nghệ  -  Thủ thuật lập trình

Friday, September 27, 2013

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


Toàn màn hìnhIn bài viết

 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 ;)