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

Source [UDF + Source] Cefau3 - Tích hợp Chromium vào AutoIt3.

Thảo luận trong 'Chia sẻ mã nguồn' bắt đầu bởi wuuyi123, 28/4/18.

  1. wuuyi123

    wuuyi123 Thành viên
    • 13/23

    Tham gia ngày:
    18/6/16
    Bài viết:
    17
    Đã được thích:
    46
    - Cefau3 -
    Chromium Embedded Framework for AutoIt3

    - Đã lâu rồi mình không đăng bài hoặc up gì, hôm nay gửi đến mọi người UDF mới (hôm trước có hứa hẹn đấy :D). Như tiêu đề, cái này giúp tích hợp trình duyệt Chromium vào Window Form/GUI, vừa có thể load các web app hoặc web page một cách dễ dàng mà còn tích hợp các tính năng auto của AutoIt vào (thông qua AutoItX3). Đặc biệt hơn và có thể tương tác qua lại giữa AutoItJavaScript (hai thằng gọi nhau, gọi qua gọi lại...). Tất nhiên, bạn có thể xây dựng một Windows web app thực sự, hay một project lớn. Đây cũng là lời hứa của mình từ năm trước với một người bạn, đó là "làm sao cho AutoIt tạo ra được cửa sổ Chromium/Chrome".

    - Về cơ cấu hoạt động thì cũng đơn giản lắm. Trong bộ libraries của CEF bao gồm file chính là libcef.dll và một số dll, package, resources phụ đi kèm. Cơ bản thì AutoIt không thể tương tác trực tiếp với class C++ thông qua DllCall được (có thể dùng COM nhưng khó làm hơn). Cefau3.dll sẽ đóng vai trò là trung gian, AutoIt call nó, nó sẽ xử lý các class C++ trong libcef để trả về các pointer hoặc ngược lại, sử dụng các pointer để gọi method của class. Tất nhiên là sẽ gặp phải crash, vì AutoIt kiểu động (nói thật thì không biết kiểu gì) và thường cast type về số nguyên hay gì đó chẳn hạn, việc này sẽ có thể làm mất đi một phần nào đó dữ liệu và crash như chơi. :D

    [​IMG]


    Một số tính năng nổi bật
    • Tạo cửa sổ CEF một cách dễ dàng.
    • Multi-message loop (cái này hỗ trợ sẵn trong CEF rồi).
    • Hỗ trợ nhiều Event cơ bản.
    • Tương tác qua lại giữa AutoItJavaScript.
    • Có hỗ trợ các hàm auto cơ bản của AutoIt trong JavaScript...
    Nhược điểm (sao lại không)
    • Chỉ chạy được single-thread (hiển nhiên).
    • Chỉ chạy được single-process (mình có xem qua source code bản AutoIt 3.1 thì thấy phần config trong Visual Studio có cho phép bật thêm multi-process và có thể tạo ra thêm thread (dĩ nhiên), nhưng có lẽ cái Au3 GUI đã bóp chết nó :eek:).
    • Tốc độ xử lý tương đối.
    • Bộ CEF khá nặng...
    >> Không thể sử dụng đầy đủ các tính năng của CEF (chẳng hạn như COM/Object để tương tác với JavaScript như trong IE...)

    Hướng dẫn
    - Code run nên khổ lắm, bạn nào muốn đóng góp thì cứ lấy source code về, add thêm tính năng này nọ vào. Mình sẽ update các bản Chromium khác nhau để giảm bớt size theo nhu cầu sử dụng khác nhau.
    - Không có viết hướng dẫn kĩ càng rồi, xem example đỡ nhé. Bạn nào rảnh có thể viết lại một bài khác giúp mình.
    Link Github: https://github.com/wy3/cefau3
    Link download: https://github.com/wy3/cefau3/releases
    Link wiki: https://github.com/wy3/cefau3/wiki


    Cách build bằng source code (chi tiết luôn):
    • Yêu cầu Windows 7 trở lên, máy phải cài Visual Studio 2010 trở lên.
    • Clone repository Cefau3 về (dùng Git hoặc download zip).
    • Tải CEF Binaries Distribution về (chọn bản Windows 32-bit, hoặc nhấn vào đây).
    • Tiếp theo giải nén file vừa tải, sử dụng CMAKE để buid ra project cho Visual Studio. (trong lúc make có thể gặp lỗi, bạn cứ nhấn Generate là xong).
    • Mở project vừa tạo, build libcef_dll_wrapper ở chế độ Release - x86 hoặc (Win32).
    • Sau khi đã build xong, copy hai file libcef.liblibcef_dll_wrapper.lib cho vào thư mục lib trong Cefau3.
    • Tiến hành build Cefau3.
    • Về các file thư viện khác thì bạn copy tất cả file trong thư mục ReleaseResources trong Cef Binaries (nhớ bỏ mấy file .lib ra nhé), còn 2 file nữa là AutoItX3.dllCefau3.dll.
    • Bạn nào sử dụng bản CEF khác thì nhớ thay mới thư mục include (bản của mình là 3.3112).


    [​IMG]
     
    Chỉnh sửa cuối: 5/5/18
    dechut, tamle2289, toanbku and 3 others like this.
  2. Hoàng Tuân

    Hoàng Tuân Thành viên
    • 8/11

    Tham gia ngày:
    9/1/16
    Bài viết:
    67
    Đã được thích:
    10
    hay quá a ơi
     
  3. Huân Hoàng

    Huân Hoàng Super Moderator Thành viên BQT Super Moderator
    • 93/113

    Tham gia ngày:
    29/9/15
    Bài viết:
    512
    Đã được thích:
    984
    Thým Duy ngồi ngay ngắn nhận của iêm 1 lạy nào :v
     
  4. Tungtata

    Tungtata Tà tà mà sống ~ Thành viên BQT Administrator
    • 93/113

    Tham gia ngày:
    25/8/15
    Bài viết:
    225
    Đã được thích:
    631
    Nơi ở:
    Hà Nội
    wow
    Tâm huyết ghê đó nha
     
  5. toanbku

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

    Tham gia ngày:
    29/8/17
    Bài viết:
    1
    Đã được thích:
    0
    Bác đăng lên forum chính của AutoIT luôn đi. Công nhận, bác tâm huyết ghê.
     
  6. tamle2289

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

    Tham gia ngày:
    12/5/18
    Bài viết:
    5
    Đã được thích:
    0
    đỉnh vãi :v
     
  7. tamle2289

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

    Tham gia ngày:
    12/5/18
    Bài viết:
    5
    Đã được thích:
    0
    bác nào hướng dẫn em cách để chạy js với cái này được không ạ em thấy có cái function Cef_ExecuteJs này mà em không biết xài sao ai dạy em với ạ
     
  8. wuuyi123

    wuuyi123 Thành viên
    • 13/23

    Tham gia ngày:
    18/6/16
    Bài viết:
    17
    Đã được thích:
    46
    Bạn có thể chạy Js bằng cách load một trang web HTML kèm theo các thẻ <script> có chứa link đến file .js, hoặc sử dụng hàm Cef_ExecuteJs ngay trên AutoIt (lưu ý là phải tồn tại một cửa sổ CEF thì mới run Js được, về mặt lý thuyết thì cửa sổ chứa frame HTML DOM).

    Bạn xem code bên dưới nhé, còn code này hướng dẫn chạy code AutoIt trên Js, có kết hợp cả hai chiều.

    Mã (AutoIt):

    ; Khởi tạo CEF handler
    Global $CefMain = Cef_Init()
    ; Tạo cửa sổ CEF trên form, phải có một cửa sổ mới có thể thực thi Js
    Cef_Create($CefMain, $hForm, "https://google.com")

    ; Biến AutoIt
    Global $Myvar = 99999
    ; Kết hợp giữa code AutoIt và Js
    Global $JsCode =     'var myvar = ' & $Myvar & ';' & _
                        'alert(myvar);'

    ;     // Có thể hiểu như này
    ;    var myvar = 99999;    // Nhớ ';' nhé          
    ;    alert(myvar);              
     
    ; Thực thi Js
    Cef_ExecuteJs($CefMain, $JsCode)
     
     
    Chỉnh sửa cuối: 14/5/18
    tamle2289 thích bài này.
  9. tamle2289

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

    Tham gia ngày:
    12/5/18
    Bài viết:
    5
    Đã được thích:
    0
    Wow cảm ơn bác nhiều lắm có cái để nghịch rùi :3
     
  10. tamle2289

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

    Tham gia ngày:
    12/5/18
    Bài viết:
    5
    Đã được thích:
    0
    code như vầy mà chạy nó ra trắng tinh ở gui thì sửa thế nào bác, em mới vào autoit chưa biết, bác thông cảm giúp em với :v
     

    Các file đính kèm:

    • new.au3
      Kích thước:
      1,006 bytes
      Đọc:
      2
  11. wuuyi123

    wuuyi123 Thành viên
    • 13/23

    Tham gia ngày:
    18/6/16
    Bài viết:
    17
    Đã được thích:
    46
    Thiếu Cefau3_Start() nhé.
    Mở tệp đính kèm để xem thêm cách fix vài thứ.
     

    Các file đính kèm:

    • new.au3
      Kích thước:
      1.4 KB
      Đọc:
      2
  12. tamle2289

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

    Tham gia ngày:
    12/5/18
    Bài viết:
    5
    Đã được thích:
    0
    wow hay quá cảm ơn bác nhiều lắm :3
     

Chia sẻ trang này

Đang tải...