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

AutoHotKey (Hướng dẫn) Cách tạo một auto click không chiếm chuột đơn giản

Thảo luận trong 'AutoHotkey' bắt đầu bởi Millimeter, 10/7/18.

  1. Millimeter

    Millimeter Team AutoHotkey
    • 53/68

    Tham gia ngày:
    9/7/16
    Bài viết:
    73
    Đã được thích:
    471
    Nơi ở:
    Chơn Thành, Bình Phước
    A/ LỜI NÓI ĐẦU

    Mình chỉ mới tìm hiểu về autohotkey vừa mới đây (cũng được 1 năm), với lại mình cũng không phải là dân lập trình chỉ là thèn cu cấp 3 đam mê rồi tập tành code thôi, nên sẽ có một số cái chưa chính xác và không đạt chuẩn lắm, mong các bạn thông cảm :p. Mình thấy ngôn ngữ này khá dễ học mà ít mem quá nên làm bài này để kéo thêm mem :D.

    B/ CHUẨN BỊ

    Đầu tiên thì các bạn phải có một số kiến thức cơ bản về autohotkey của bác @kakanet ở đây, mà không cũng được từ từ rồi quen, đang cần số lượng :D.
    Những lệnh chính mà mình sử dụng để code: ControlClick, Gui và các hàm liên quan đến listview.
    Chương trình dùng ControlClick nên có ưu điểm là click không chiếm chuột, cửa sổ cần click đang bị che bởi cửa sổ khác hay là bị thay đổi vị trí ban đầu thì vẫn có thể click một cách chính xác.

    B/ TIẾN HÀNH CODE

    PHẦN 1:

    Đầu tiên thì mình tạo một cái gui nho nhỏ gồm cái combox để tùy chọn các kiểu click, một editbox lưu thời gian delay, một cái listview để lưu thao tác và ba cái button điều khiển. Rồi sau đó gắn label, var cho các control. Có các hotkey như F2: thêm dữ liệu vào listview, F3: chạy auto, F4: dừng auto.

    [​IMG]

    Mã (Autohotkey):
    #NoEnv
    #SingleInstance Force
    CoordMode Mouse,Window
    SetControlDelay -1
    ;Xem file help để hiểu thêm mấy dòng trên này

    playing:=0

    Gui,+Alwaysontop
    Gui Add, Text, x16 y8 w52 h23 +0x200 , Kiểu click:
    Gui Add, DropDownList, x80 y16 w120 vModeClick, Left||Middle|Right
    Gui Add, Text, x224 y16 w34 h23 +0x200, Delay:
    Gui Add, Edit, x264 y16 w120 h21 vDelayTime number,100
    Gui Add, ListView, x16 y56 w391 h150, X|Y|Kiểu Click|Delay|Window
    Gui Add, Button, x152 y224 w80 h23 gRunAuto , Chạy (F3)
    Gui Add, Button, x240 y224 w80 h23 gStopAuto , Dừng (F4)
    Gui Add, Button, x328 y224 w80 h23 gClearList, Xóa (Ctrl+Del)
    Gui Show, , Auto Clicker
    Return

    F3::goto,RunAuto
    F4::goto,StopAuto
    ^Delete::goto,ClearList

    RunAuto:

    return

    StopAuto:

    return

    ClearList:

    return

    GuiEscape:
    GuiClose:
        ExitApp


    Đầu tiên thì xử lí cái phần thêm dữ liệu vào listview trước. Mình sử dụng lệnh MouseGetPos để lấy dữ liệu hàm LV_Add() để thêm. Dữ liệu cần thêm là
    X|Y|Kiểu Click|Delay|Window

    Mã (Autohotkey):
    F2::
    if playing ; nếu đang chạy auto thì không lưu vào listview
        return
    Gui,Submit,Nohide ; lưu dữ liệu của các control vào biến
    MouseGetPos,,,WinHWND ; Lấy HWND của cửa sổ
    WinActivate,ahk_id %WinHWND%
    MouseGetPos,X,Y ; Lấy vị trí x, y
    LV_Add("",X,Y,ModeClick,DelayTime,WinHWND)
    LV_ModifyCol(1)
    LV_ModifyCol(2)
    ;2 dòng trên là chỉnh cho cột 1,2 cho ngay
    return

    Thêm xong rồi thì tới phần xóa nha. Mình dùng LV_Delete().


    Mã (AutoIt):
    ClearList:
    if playing ; đang chạy thì không được xóa
        return
    LV_Delete() ; xóa toàn bộ nội dung trong listview
    return
    Được bây giờ tới phần đọc listview rồi chạy auto đây. Mình dùng LV_GetText() để lấy dữ liệu rồi dùng ControlClick.

    Mã (Autohotkey):
    RunAuto:
    if (LV_GetCount()=0) ;nếu không có gì trong listview thì không chạy code bên dưới
        return
    playing:=1 ; đang chạy auto
    Loop % LV_GetCount() ; lấy tất cả cột của listview
    { ;tạo vòng lặp lấy dữ liệu của listview X|Y|Kiểu click|Delay|Window sau đó thực hiện click
        if Stop ; dòng này để dừng auto
            break
        Index:=A_Index
        Loop % LV_GetCount("Col") ; lấy dữ liệu của từng hàng
              LV_GetText(Data_%A_Index%,Index,A_Index)
        Sleep,% Data_4
        ControlClick,x%Data_1% y%Data_2%,ahk_id %Data_5%,,%Data_3%,,NA Pos ;thực hiện click
    }
    ;chạy xong thì dừng thôi
    stop:=0
    playing:=0 ;
    return

    Tiếp theo là tới phần dừng auto, dễ thôi đặt biến stop là 1

    Mã (Autohotkey):
    StopAuto:
    if not playing ; dừng rồi dừng chi nữa :)
        return
    Stop:=1
    playing:=0
    return

    Một điều quan trọng nữa là để chạy được hầu hết các cửa sổ bạn phải cho nó chạy với quyền admin. Đặt RequireAdmin() lên đầu

    Mã (Autohotkey):
    RequireAdmin()
    {
    if not A_IsAdmin
    {
        try Run, *RunAs "%A_ScriptFullPath%"
            ExitApp
    }
    }

    Bạn nào muốn xem code hoàn chỉnh thì nhấn like nha

    Nội dung bị ẩn:
    ** Nội dung ẩn: Bạn phải nhấn 'Like' trước khi bạn có thể xem các dữ liệu ẩn chứa ở đây. **


    Thế thôi bài hướng dẫn đến đây là hết. Lần sau mình thực hiện các bước tiếp theo để hoàn thiện code, hẹn gặp lại các bạn vào các phần tiếp theo :).
     

    Các file đính kèm:

    Chỉnh sửa cuối: 20/9/18
  2. kakanet

    kakanet Thành viên năng động
    • 43/45

    Tham gia ngày:
    24/2/16
    Bài viết:
    204
    Đã được thích:
    187
    wáo wào, quá chi tiết quá tuyệt vời, khi nào xong việc tớ phải đọc ngay mới đc >"<
     
  3. Millimeter

    Millimeter Team AutoHotkey
    • 53/68

    Tham gia ngày:
    9/7/16
    Bài viết:
    73
    Đã được thích:
    471
    Nơi ở:
    Chơn Thành, Bình Phước
    Anh đọc thử xem có lỗi gì thì bảo em.
     
    Chỉnh sửa cuối: 10/7/18
  4. Only AHK

    Only AHK Team AutoHotkey
    • 3/6

    Tham gia ngày:
    13/6/18
    Bài viết:
    15
    Đã được thích:
    10
    Hay quá! Update phần tiếp theo đi bác
     
  5. cao danh

    cao danh Thành viên mới
    • 1/6

    Tham gia ngày:
    5/7/18
    Bài viết:
    16
    Đã được thích:
    0
    Hay lắm bạn ơi.
     
  6. DuyMinh

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

    Tham gia ngày:
    14/3/17
    Bài viết:
    175
    Đã được thích:
    85
    Bài viết khá hay, dễ hiểu... Nhưng nên đặt tên biến cho tường minh để mọi người dễ hiểu...
     
  7. hoangvq

    hoangvq Thành viên
    • 8/11

    Tham gia ngày:
    12/7/18
    Bài viết:
    31
    Đã được thích:
    2
    Mình chưa dùng AHK bao giờ nhưng với AutoIT thì ControlSend nếu gửi phím đến cửa sổ game thì nó tự active cửa sổ game lên rồi mới gửi (do clien không có ControlID) nên rất bất tiện. Tìm nát các forum nước ngoài chưa thấy giải pháp, không biết AHK thì tình trạng này ra sao nhỉ?
     
  8. Millimeter

    Millimeter Team AutoHotkey
    • 53/68

    Tham gia ngày:
    9/7/16
    Bài viết:
    73
    Đã được thích:
    471
    Nơi ở:
    Chơn Thành, Bình Phước
    Mình cũng thử lệnh ControlSend của AHK nhiều lần rồi, thì nó không bị tình trạng giống autoit.
     
    Chỉnh sửa cuối: 16/7/18
  9. Thao Nguyen

    Thao Nguyen Thành viên mới
    • 1/6

    Tham gia ngày:
    7/8/18
    Bài viết:
    5
    Đã được thích:
    0
    Các bác cho em hỏi nút like ở chỗ nào vậy? Em muốn like mà chả thấy đâu
     
  10. Thao Nguyen

    Thao Nguyen Thành viên mới
    • 1/6

    Tham gia ngày:
    7/8/18
    Bài viết:
    5
    Đã được thích:
    0
    Em vừa test phần mêm của bác chay khá ngon. Click được vào ô skills trong game chuyển được skill và vài vật phẩm. Tuy nhiên có 1 vài điều chưa làm được ví dụ em cho char của giao tiếp với NPC thì chịu. tức là vẫn left click nhưng ko phải là inventory mà là NPC thì ko làm được.
     
  11. nguyenanhduy1903

    nguyenanhduy1903 Thành viên mới
    • 1/6

    Tham gia ngày:
    20/9/18
    Bài viết:
    2
    Đã được thích:
    0
    E click vào Lặp thì nó không lặp lại thao tác click nhỉ
     
  12. DuyMinh

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

    Tham gia ngày:
    14/3/17
    Bài viết:
    175
    Đã được thích:
    85
    Vòng lặp hân hạnh tài trợ chương trình này. Còn mọi chuyện là do bạn code thôi... Máy chỉ hiểu 0 và 1 thôi
     
  13. Millimeter

    Millimeter Team AutoHotkey
    • 53/68

    Tham gia ngày:
    9/7/16
    Bài viết:
    73
    Đã được thích:
    471
    Nơi ở:
    Chơn Thành, Bình Phước
    À cái đó là để cho phần sau mà tại mình bận quá nên chưa viết hướng dẫn được. Mình đã sửa lại ở phần code hoàn chỉnh rồi, bạn xem lại đi
     
    nguyenanhduy1903 thích bài này.
  14. nguyenanhduy1903

    nguyenanhduy1903 Thành viên mới
    • 1/6

    Tham gia ngày:
    20/9/18
    Bài viết:
    2
    Đã được thích:
    0
    Tks bro nhe :)
     

Chia sẻ trang này

Đang tải...