1. Tải bản cài đặt AutoIT mới nhất

    Chào Khách. Nếu bạn mới tham gia và chưa cài đặt AutoIT.
    Vui lòng vào topic trên để tải bản AutoIT mới nhất nhé
    Dismiss Notice
  2. Quy định và nội quy

    Chào Khách. Vui lòng đọc kỹ nội quy và quy định của diễn đàn
    Để tránh bị ban một cách đáng tiếc nhé!
    Dismiss Notice
  3. Hướng dẫn chèn mã AutoIT trong diễn đàn

    Chào Khách. Vui lòng xem qua bài viết này
    Để biết cách chèn mã AutoIT trong diễn đàn bạn nhé :)
    Dismiss Notice

Hỏi đáp Code em viết dưới đây em kiểm tra tọa độ X, Y đúng nhưng hàm ControlClick không thực hiện đúng ý

Thảo luận trong 'Thảo luận chung - Hỏi đáp' bắt đầu bởi hoanghuy, 1/1/19.

  1. hoanghuy

    hoanghuy Thành viên
    • 8/11

    Tham gia ngày:
    1/12/18
    Bài viết:
    50
    Đã được thích:
    4
    Code như dưới đây
    nó chỉ click vào điểm hiện tại của chuột thôi, ai giúp mình bắt lỗi với
    ----------------------------------------------------------
    Mã (AutoIt):
    HotKeySet("{F5}", "ShootOnOff")
    HotKeySet("{F9}", "ExitApp")
    ToolTip("F5 = Auto đánh, F9 = Thoát chương trình", 0, 0)
    Dim $lap = False
    Func ShootOnOff()
        If $lap = False Then
            $lap = True
            ToolTip("Đang Lặp", 0, 0)
        Else
            $lap = False
            ToolTip("F9 = Auto đánh, F9 = Thoát chương trình", 0, 0)
        EndIf
    EndFunc
    Func ExitApp()
        Exit
    EndFunc
    $title = WinGetTitle('DragonBoy')

    $RuleWindow = WinGetPos($title)


    While 1
        If $lap = True Then
            Dim $diemlap = PixelSearch(0, 0, $RuleWindow[2], $RuleWindow[3], 0x4B243E, 0)

            If Not @error Then
                $diemlap[0] = $diemlap[0] - 170
                $diemlap[1] = $diemlap[1] - 95
                ToolTip($diemlap[0] & @CRLF & $diemlap[1], 100, 100)
                ControlClick($title, '', '', 'left', 2, $diemlap[0], $diemlap[1])
            EndIf
        EndIf
        Sleep(2000)
    WEnd
     
     
  2. yutijang

    yutijang Thành viên năng động
    • 28/34

    Tham gia ngày:
    1/7/18
    Bài viết:
    110
    Đã được thích:
    61
    Mình có chút góp ý như vầy:

    1. Hàm WinGetTitle() nên dùng kèm với WinList() để lấy chính xác Title của cửa sổ hoặc nhiều cửa sổ cùng Title. Hoặc để lấy Title dựa vào trạng trạng thái của cửa sổ active, minimized hoặc cửa sổ ẩn. Nếu mình không sai thì bản thân "DragonBoy" đã là 1 Title rồi. (Code của bạn không sai)

    2. Hàm PixelSearch() của bạn không khai báo hwnd, vậy thì mặc định nó sẽ tìm trên màn hình Desktop với khu vực 0,0,$RuleWindow[2],$RuleWindow[3], hãy bảo đảm rằng cửa sổ có Title "DragonBoy" active trước khi PixelSearch(), nếu bị che khuất sẽ tìm không thấy.

    3. Nếu bạn nói rằng có tìm thấy và có trả về tọa độ, thì hãy thử dùng WinMove() trước để xem con chuột có chạy đến đúng tọa độ không. Rồi hãy thử hàm đơn ControlClick() với tọa độ đó xem có hoạt động không.
     
  3. hoanghuy

    hoanghuy Thành viên
    • 8/11

    Tham gia ngày:
    1/12/18
    Bài viết:
    50
    Đã được thích:
    4
    cảm ơn bạn, mình sẽ thử
     
  4. hoanghuy

    hoanghuy Thành viên
    • 8/11

    Tham gia ngày:
    1/12/18
    Bài viết:
    50
    Đã được thích:
    4
    Vẫn không được bạn ơi, nó không chịu click luôn, cửa sổ này không có control
    HotKeySet("{F5}","ShootOnOff")
    HotKeySet("{F9}","ExitApp")
    Tooltip("F5 = Auto đánh, F9 = Thoát chương trình", 0, 0)
    Dim $lap = False
    Func ShootOnOff()
    If $lap = False Then
    $lap = True
    ToolTip("Đang Lặp",0,0)
    Else
    $lap = False
    Tooltip("F9 = Auto đánh, F9 = Thoát chương trình", 0, 0)
    EndIf
    EndFunc
    Func ExitApp()
    Exit
    EndFunc
    Global $handle=WinActive('')
    Global $title=WinGetTitle($handle)
    Global $RuleWindow=WinGetPos($title)



    While 1
    If $lap = True Then
    Dim $diemlap = PixelSearch( 0,0, $RuleWindow[2],$RuleWindow[3] , 0x4B243E,0,1,$handle)

    If not @error Then

    ToolTip ($diemlap[0]&@CRLF &$diemlap[1],100,100)
    ControlClick($handle,'','','left',2,$diemlap[0], $diemlap[1])
    EndIf
    EndIf
    sleep(2000)
    WEnd
     
  5. yutijang

    yutijang Thành viên năng động
    • 28/34

    Tham gia ngày:
    1/7/18
    Bài viết:
    110
    Đã được thích:
    61
    WinActive() là kiểm tra 1 cửa sổ đã tồn tại được chỉ định có đang được kích hoạt (active) hay không. Muốn "ra lệnh" cho 1 cửa sổ được chỉ định kích hoạt (active) thì hãy dùng WinActivate().
    Như mình nói trong bài post trước, hãy chắc chắn rằng cửa sổ đang làm việc kích hoạt (active) trước khi sử dụng PixelSearch().

    Vậy thì thêm WinActivate() như sau:
    Mã (AutoIt):
    While 1
        If $lap = True Then
            WinActivate($title)
            WinWaitActive($title, 3000) ;Để đảm bảo chắc rằng cửa sổ đã active
            Dim $diemlap = PixelSearch( 0,0, $RuleWindow[2],$RuleWindow[3] , 0x4B243E,0,1,$handle)

            If not @error Then
                ToolTip ($diemlap[0]&@CRLF &$diemlap[1],100,100)
                ControlClick($handle,'','','left',2,$diemlap[0], $diemlap[1])
            EndIf
        EndIf
        sleep(2000)
    WEnd
    Còn việc ControlClick() không click như mong muốn thì là chuyện khác, hãy kiểm tra trước ControlClick() hoạt động tốt với cửa sổ đó cái đã.
     
  6. hoanghuy

    hoanghuy Thành viên
    • 8/11

    Tham gia ngày:
    1/12/18
    Bài viết:
    50
    Đã được thích:
    4
    mình cũng không rõ, nhưng cái cửa sổ mình định controlclick() thì dùng AU3.info để dò control thì không có, nó chỉ có phần window thôi
     

    Các file đính kèm:

  7. yutijang

    yutijang Thành viên năng động
    • 28/34

    Tham gia ngày:
    1/7/18
    Bài viết:
    110
    Đã được thích:
    61
    Đã thử tìm và tải về game có tên "DragonBoy", đúng là không thể dùng ControlClick() với chính xác tọa độ, nó click theo vị trí con trỏ chuột :)
    Cũng có dùng thử _MouseClickPlus() và SendMessage vẫn không được.
    Vậy thì bạn hãy dùng MouseClick() (chiếm chuột) hoặc tiếp tục đợi thành viên hiểu về vấn đề này giúp bạn.
     
    hoanghuy thích bài này.
  8. hoanghuy

    hoanghuy Thành viên
    • 8/11

    Tham gia ngày:
    1/12/18
    Bài viết:
    50
    Đã được thích:
    4
    Ok, cảm ơn bạn đã xem qua câu hỏi và giúp mình (y)
     
  9. hoanghuy

    hoanghuy Thành viên
    • 8/11

    Tham gia ngày:
    1/12/18
    Bài viết:
    50
    Đã được thích:
    4
    Còn vấn đề nữa là, mình dùng mouseclick() thì được nhưng nó hơi giật và lag nên mình mới định dùng ControlClick(), bạn có cách nào để nó bớt giật lag thì chỉ mình với
     
  10. yutijang

    yutijang Thành viên năng động
    • 28/34

    Tham gia ngày:
    1/7/18
    Bài viết:
    110
    Đã được thích:
    61
    MouseClick() hay ControlClick() thì cũng như cầm chuột click thôi. Nếu chậm, lag thì do game hoặc máy tính thôi, mình thử trên máy mình cũng thấy phản hồi chậm sau khi click chuột. Bạn có thể sử dụng phiên bản android và sử dụng giả lập nếu có thể đồng bộ được tài khoản đã chơi trước đó. Sử dụng giả lập android thì có thể ControlClick() dễ dàng hơn.
    Mình nghĩ có thể sử dụng cách tạo 1 GUI của AutoIt, loại GUI có thể click xuyên qua nó, xong để GUI đó chồng lên cửa sổ game. Tiếp theo sẽ dùng ControlClick() với handle là GUI AutoIt, như vậy có thể ControlClick() với dạng cửa sổ như vầy. Chỉ là ý tưởng, chưa thực hiện được.
     
  11. hoanghuy

    hoanghuy Thành viên
    • 8/11

    Tham gia ngày:
    1/12/18
    Bài viết:
    50
    Đã được thích:
    4
    trùng ý tưởng với tui, tui cũng chỉ nghĩ trong đầu cái ý đó thôi, không ngờ ông trùng suy nghĩ (y)(y)(y)
     
    yutijang thích bài này.

Chia sẻ trang này

Đang tải...