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 Xin code về việc khi nhấp một phím nào đó là nó chọn cửa sổ đang chọn

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

  1. RajLee

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

    Tham gia ngày:
    2/1/19
    Bài viết:
    5
    Đã được thích:
    0
    mình mới vào mình xin một đoạn code.
    VD: mình nhấn F10 thì code lưu tên một cái cửa sổ mình vừa mới để chuột vào?
     
  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
    Thử code này xem:
    Mã (AutoIt):
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 358, 121, -1, -1, -1, $WS_EX_TOPMOST)
    $Input1 = GUICtrlCreateInput("", 64, 48, 241, 21)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    HotKeySet("{ESC}", "_Quit")
    HotKeySet("{F10}", "_Gettitle")

    While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
            Case $GUI_EVENT_CLOSE
                Exit

        EndSwitch
    WEnd

    Func _Gettitle()
        $a_info = _Mouse_Win_GetInfo()
        If @error Then Exit
        GUICtrlSetData($Input1, $a_info[1])
    EndFunc

    Func _Mouse_Win_GetInfo()
        Local $a_mpos = MouseGetPos()
        If @error Then Return SetError(1, 0, 0)
        Local $a_wfp = DllCall("user32.dll", "hwnd", "WindowFromPoint", "long", $a_mpos[0], "long", $a_mpos[1])
        If @error Then Return SetError(2, 0, 0)
        Local $a_ga = DllCall("user32.dll", "hwnd", "GetAncestor", "hwnd", $a_wfp[0], "int", 3); $GW_ROOTOWNER = 3
        If @error Then Return SetError(3, 0, 0)
        Local $a_ret[4] = [$a_ga[0], WinGetTitle($a_ga[0]), $a_mpos[0], $a_mpos[1]]
        Return $a_ret
    EndFunc

    Func _Quit()
        Exit
    EndFunc
     
    CanTrungSo1 and RajLee like this.
  3. RajLee

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

    Tham gia ngày:
    2/1/19
    Bài viết:
    5
    Đã được thích:
    0
    để mình test thử, bạn có thể chú thích từng dòng có tác dụng gì ko bạn. vì mình đang tập viết.
     
  4. 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 chưa đủ trình hiểu rõ về DllCall và struct nên không thể chú thích cho bạn được :)
    Mình biết xài google search + 1 chút tiếng anh, gõ từ khóa dựa vào câu hỏi của bạn và được kết quả như vậy :)
    Mình ăn cắp hàm _Mouse_Win_GetInfo() của người ta, thêm chút GUI và ra code bên trên.
    Hi vọng giúp được.
    Thân!
     
  5. CanTrungSo1

    CanTrungSo1 Thành viên mới
    • 3/6

    Tham gia ngày:
    20/11/18
    Bài viết:
    7
    Đã được thích:
    2
    anh yutijang chịu khó quá.. phải học tập theo thoai @@.
     
    yutijang thích bài này.
  6. 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 nghĩ mình qua lớp vỡ lòng, căn bản rồi :D Đây là cách mình "luyện cấp", hi vọng 10 năm nữa lên được master :D
     
  7. RajLee

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

    Tham gia ngày:
    2/1/19
    Bài viết:
    5
    Đã được thích:
    0
    cho mình hỏi cái này nhé. vì mình muốn làm một cái auto click. không chiếm chuột. vậy mình cần học nhựng cái gì bắt đầu từ đâu?
     
  8. 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
    Yêu cầu của bạn cũng khá cơ bản thôi, bạn cần đọc hết các ebook, topic tiếng Việt về AutoIt cơ bản có trên diễn đàn, mục đích là đọc hiểu được các UDF người khác viết, rồi tự áp dụng và biến hóa theo ý mình.

    Hãy tìm đọc về WinGetHandle(), ControlClick(), ControlSend(), AutoIt v3 Window Info.

    Tiếp theo xem về tạo GUI bằng Koda để làm 1 cái GUI nho nhỏ.

    Trong quá trình bạn tìm hiểu mấy cái đó, tự nhiên sẽ biết thêm về vài cái liên quan khác phát sinh. :)

    Điều quan trọng là đừng bỏ cuộc, nó khó vì bạn chưa hiểu nó, hiểu rồi thì dễ ẹc :D Và đặc biệt, trong quá trình code và chạy script nếu có gì đó sai thì chính bạn code sai ở đâu đó chứ không phải ngôn ngữ AutoIt sai hoặc lỗi :D (Đây là kinh nghiệm riêng muốn chia sẻ thôi, vì vài tháng trước mình từng bỏ cuộc vài lần, đổi sang học AHK rồi quay lại AutoIt. Mục tiêu cũng giống hệt câu hỏi của bạn, nhưng bây giờ thì mình đã tự viết 1 tool nho nhỏ cho riêng mình :) )
    Thân!
     
    Chỉnh sửa cuối: 8/1/19
    RajLee and quochoa like this.
  9. RajLee

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

    Tham gia ngày:
    2/1/19
    Bài viết:
    5
    Đã được thích:
    0
    chào bạn,
    sau một lúc tìm hiểu thì mình nghĩ nó có nguyên lý như vầy, đầu tiền dùng WinGetHandle để lấy được của sổ cần thao tác => dùng ControlSend để gủi lệnh click tới cửa sổ đó rồi dùng ControlClick để lick đúng ko.

    mình đã có thể lấy được tên cửa sổ và vị trí lick chuột. nhưng lại đang phân vẫn chỗ là sao lại dùng MouseClick để click trực tiếp thì khác gì với ControlClick?
     
  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
    ControlClick() là click vào 1 tọa độ của cửa sổ được chỉ định. Vùng click giới hạn ở tọa độ 0, 0 của cửa sổ chỉ định đến max width và max height của cửa sổ chỉ định.
    ControlClick() có thể click cửa sổ ở tình trạng ẩn, bên dưới cửa sổ khác, minimize, nằm bên ngoài độ phân giải của desktop.
    Vậy thì bạn đã có thể thấy sự khác nhau của 2 loại click đó, tùy bạn sử dụng. :)
     
  11. RajLee

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

    Tham gia ngày:
    2/1/19
    Bài viết:
    5
    Đã được thích:
    0
    :) cả hai cái bạn đều dùng ControlClick(); bạn có cái vd nào cho cả 2 cái ko. cho mình xin thì càng tốt. cảm ơn nhiều.
     
  12. 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ôi nói vậy cho dễ tính, MouseClick() và Send() thì chiếm chuột/phím, cửa sổ mục tiêu buộc phải ở trạng thái kích hoạt mới hoạt động được. Còn ControlClick() và ControlSend() thì không chiếm chuột/phím. Có thể làm chuyện khác như xem phim, comment facebook,...
     

Chia sẻ trang này

Đang tải...