[Vọc sĩ & Trainer] Phần 1: Trainer (game) là gì?


Giới thiệu
Lời nói đầu, mình xin được giới thiệu về series này. Đây là một series mình viết riêng về Trainer (hay còn gọi là các bản HACK). Đây là những kiến thức được mình đúc kết và tổng hợp lại, sau đó diễn đạt lại bằng ngôn ngữ của chính mình để các bạn dễ hiểu, dễ tiếp thu hơn.

Thực ra, viết một trainer game (bản hack) không khó nhưng yếu tố quan trọng là độ hiểu biết, độ kiên nhẫn, trình độ và độ đẹp trai của bạn. Series này là Vọc sĩ & Trainer nên chắc chắn việc vọc vạch của các vọc sĩ (còn gọi là mò... sĩ =))) từ này mình tự nghĩ ra nhé).

Tại sao mình lại nói đến độ kiên nhẫn? Không cần nói cũng biết, đối với mấy ông hay vào thư mục của game lùng sục thì chuyện đó quá ư là bình thường. Để hack, cheat thành công một game thì đòi hỏi bạn không được từ bỏ. Vì nếu từ bỏ thì bạn sẽ không thể gặt hái được những thành công mà bản thân bạn chỉ cần cố gắng và kiên nhẫn thêm một ít nữa để có được. Như thế thật sự rất là tiếc đúng không :)).

Quả thật, để có thể hack một số game online thì việc đầu tiên thì bạn phải thực hiện đối với các game offline trước. Tuy nhiên, trong series này thì mình chỉ hướng dẫn các bạn cách hack, viết một trainer game OFFLINE. Đây có thể sẽ là nền cho các bạn tiếp đến sự nghiệp hack game online nhưng bước đi đó bạn phải tự học ngoài series này.

Tiếp theo, để hack một game không khó như các bạn tưởng tượng, không giống như bạn nghĩ là phải cần một khối kiến thức to bự như BigBang <(") hay như những hacker, cracker chính hiệu. No no no!!! Ai cũng có thể hack một game bất kì. Chỉ cần bạn chịu khó học hỏi, mọi chuyện sẽ sớm thành công.

Những phần mềm mình hay sử dụng để hack game là CE (Cheat Engine - Phần mềm hack game điển hình, bạn có thể download tại đây) và một số công cụ hỗ trợ.
Còn một cách nữa bằng cách không sử dụng phần mềm là vọc... và lập trình :)) vào tận sâu trong thư mục của game, mở hết các file xem giá trị rồi lập trình ứng dụng chỉnh sửa các file đó.
Mình sắp sửa cho ra một trainer game CSFIRED 2.0, các game có cùng source với CSFIRED 2.0 nói chung. Thú thật, mình viết trainer đó đều do vào thư mục vọc file, folder, ... blabla rồi kết hợp với ngôn ngữ AutoIT để lập trình nên. Rất đơn giản.

Nếu bạn băn khoăn không biết nên học ngôn ngữ gì để lập trình cơ bản thì mình khuyên nên học AutoIT cho dễ nhé. AutoIT là một ngôn ngữ mã nguồn chuyên lập trình ứng dụng tự động. Rất dễ học và vọc.

Bài mở đầu dù không chất lượng lắm nhưng nói như vậy đủ rồi :)) Mình sẽ post link cho các bạn tham khảo một số hướng dẫn hack game offline cơ bản.

Hướng dẫn

Chúc các bạn vui vẻ.

[GUI & Code] Phần 12: Multi GUI - Đa giao diện người dùng


Giới thiệu
Multi GUI - Đa GUI trong một code luôn là vấn đề nan giải với mấy cha tự học code qua việc vọc vẹc mà không xem video hướng dẫn về những cái cơ bản (ví dụ như mình). Việc đó đã trở nên thành một cái lỗ hỏng kiến thức hơi bị lớn. Vì sao? Vì nếu bạn muốn lập trình một phần mềm hay, độc đáo, "to bự" thì đòi hỏi cần phải sử dụng đến nhiều hơn 1 GUI trong code.

Nói vậy được rồi, ngắn ngọn, xúc xích thôi rồi vào bài nào.

Đa GUI thì các bác có thể làm được nhưng cái quan trọng là phần While của code (đối với mấy bác tạo GUI bằng Koda) hay như em. Chắc chỉ có riêng em là tự huấn luyện mình thôi :v nên kiến thức cũng bấy nhày.

Ở phần này, ta sẽ đi giải đáp một số câu hỏi như sau:

  • Tạo 2 GUI chạy song song thì làm sao?
  • Kết nối 2 GUI với nhau thì làm ntn?
  • Làm sao để GUI này thực thi không làm ảnh hưởng đến GUI kia?
Tất cả sẽ được giải đáp trong bài này.

Hướng dẫn
Lời đầu tiên, những gì trên phần giới thiệu là suy nghĩ của riêng mình. Nếu mình có lỡ "suy bụng ta ra bụng người" thì các bạn thông cảm cho mình. Vì mình cũng là vọc sĩ như các bạn thôi :)) chả hề qua một khóa học tập nào hết. Tự mình tập cho mình thôi.

Đầu tiên, để lấy dữ liệu hành động của GUI, ta cần đặt hàm GUIGetMsg trong phần while của GUI. Phần này mình cũng không rõ vì chỉ mới tìm hiểu dạo gần đây. Ta có cấu trúc của hàm GUIGetMsg như sau:
GUIGetMsg ( [advanced = 0] )

Hệ thống sẽ trả về giá trị như sau:
$GUI_EVENT_SINGLE (0) = (mặc định) Trả về một giá trị sự kiện duy nhất thôi.
$GUI_EVENT_ARRAY (1) = Trả về một mảng chứa các sự kiện và thông tin mở rộng.

Lưu ý: phải khai biến include GUIConstantsEx.au3 nhé.

Thông thường, để sử dụng nhiều hơn 1 GUI thì ta sẽ sử dụng giá trị advenced = 1, trả về nhiều giá trị.
Các sự kiện được trả về là các controlID, ví dụ như $GUI_EVENT_CLOSE: là khi bạn bấm nút tắt (X)

Các ID của sự kiện:
$GUI_EVENT_NONE (0): Không có sự kiện gì xảy ra
$GUI_EVENT_CLOSE: Nút tắt/thoát (ấn nút X tắt đấy)
$GUI_EVENT_MINIMIZE: Nút thu xuống.
$GUI_EVENT_RESTORE: Nút khôi phục.
$GUI_EVENT_MAXIMIZE: Nút phóng to tối đa.
$GUI_EVENT_MOUSEMOVE: Con trỏ chuột đã di chuyển.
$GUI_EVENT_PRIMARYDOWN: Nút chuột chính được nhấn.
$GUI_EVENT_PRIMARYUP: Nút chuột chính đã được phát hành.
$GUI_EVENT_SECONDARYDOWN: Nút chuột thứ hai được nhấn.
$GUI_EVENT_SECONDARYUP: Nút chuột thứ hai được phát hành.
$GUI_EVENT_RESIZED: Hộp thoại đã được thu nhỏ.
$GUI_EVENT_DROPPED: Kết thúc một Drag & Drop hành động @GUI_DragId, @GUI_DragFile và @GUI_DropId sẽ được sử dụng để lấy ID / tập tin tương ứng với liên quan đến kiểm soát.

Về multi GUI thì ta chỉ quan tâm đến $GUI_EVENT_CLOSE thôi.

Tiếp theo, ta sẽ bắt đầu đi vào ví dụ: Đầu tiên mình có một GUI như thế này
Local $hGUI1 = GUICreate("Example GUI1")
Local $idButton1 = GUICtrlCreateButton("Button1", 10, 10, 80, 22)
GUISetState(@SW_SHOW, $hGUI1)
Local $hGUI2 = GUICreate("Example GUI2", 300, 300)
Local $idButton2 = GUICtrlCreateButton("Button2", 10, 10, 80, 22)
GUISetState(@SW_SHOW, $hGUI2)


Vấn đề đặt ra, làm sao khi ấn Button1 (trên GUI 1) thì GUI 2 sẽ hiện ra và khi ấn Button2 (trên GUI 2) thì GUI 2 sẽ tắt.

Ta có phần While như sau:
While 1
 $aMsg = GUIGetMsg($GUI_EVENT_ARRAY) :~ Chúng ta có 2 GUI nên phải sử dụng ARRAY
 Switch $aMsg[1]
  Case $hGUI1 ;~ GUI 1
   Switch $aMsg[0]
    Case $GUI_EVENT_CLOSE ;~ Bấm phát tắt code luôn (tại nó là GUI 1) (*)
     Exit
    Case $idButton1 ;~ Button1 đây, bấm cái GUI 2 hiện lên

     GUISetState(@SW_SHOW, $hGUI2) ;~ @SW_SHOW là hiện lên, $hGUI2 là GUI 2
   EndSwitch


  Case $hGUI2 ;~ GUI 2
   Switch $aMsg[0]
    Case $GUI_EVENT_CLOSE ;~ Nếu bấm nút (X) thoát thì GUI 2 sẽ tắt, GUI 1 còn nguyên (**), phần này khác so với (*) nhé
     GUISetState(@SW_HIDE, $hGUI2) ;~ @SW_HIDE là ẩn đi
    Case $idButton2 ;~ Nếu button2 được bấm thì GUI 2 sẽ tắt đi giống như (**)
     GUISetState(@SW_HIDE, $hGUI2)
   EndSwitch ;~ Có Switch thì phải có EndSwitch nhé.
 EndSwitch
WEnd


Bài viết đến đây là xong. Ví dụ trên mình lấy từ Example 2 của GUIGetMsg trong file help đấy nhé.

Mã nguồn
Xem full code: http://menly.ml/view/0f022c28

[GUI] Login & Register - Tích hợp 2 trong 1

Screenshot:

Giới thiệu:
Đây là một GUI tích hợp 2 chức năng: Đăng nhập và đăng kí, nhìn sơ qua cũng biết.
Giao diện nhỏ gọn, đủ xài.
Tài khoảng, mật khẩu đã đăng kí được lưu trong file data.ini (hoặc data.dll)

Ngoài ra, bạn có thể thay đổi từ radio thành checkbox, combo, ... blabla

Mã nguồn: (http://menly.ml/view/9051de51)
https://drive.google.com/file/d/0Bw1IL1xtaFUiX2lGVVYyY0FwZTg/view?usp=sharing

[GUI & Code] Phần 11: Reg file và AutoIT


Giới thiệu
Như các bạn đã biết ở các bài trước (bài số 3), mình có nhắc tới registry (file .reg). Vậy reg là gì?

Registry là một cơ sở dữ liệu dùng để lưu trữ các thông số kỹ thuật của Windows và lưu lại những thông tin về sự thay đổi, lựa chọn cũng như những thiết lập từ người sử dụng Windows.

Registry chứa các thông tin về phần cứng, phần mềm, người sử dụng và một điều nữa là Registry luôn được cập nhật khi người dùng có sự thay đổi trong các thành phần của Control Panel, File Associations và một số thay đổi trong menu Options của một số ứng dụng,…

Chi tiết bạn có xem ở đây

Hướng dẫn
Cấu trúc của file REG thế nào thì mình không rõ, không biết nhiều để nói cho các bạn nghe nên có gì các bạn thông cảm giùm mình, chịu khó tìm trên google nhé.
[Value Name]
"Key"="Value"


Reg có 5 loại dữ liệu:
  • REG_BINARY: Kiểu nhị phân 32 BIT
  • REG_DWORD: Kiểu Double Word cho phép người dùng nhập theo cơ số 16 (HEX) hoặc cơ số 10 (DECIMAL)
  • REG_EXPAND_SZ: Kiểu chuỗi mở rộng đặc biệt. VD: "%SystemRoot%" thay cho đường dẫn Windows\System32
  • REG_MULTI_SZ: Một kiểu dữ liệu cho phép người dùng nhập nhiều chuỗi, phân biệt bằng phím Enter để cách dòng.
  • REG_SZ: Kiểu chuỗi thông thường.
Mình thường dùng REG_SZ để lưu dữ liệu như tài khoảng, mật khẩu, blabla...

Tiếp theo, mình sẽ nói đến phần tương tác với Reg trong AutoIT.
Để tương tác với file reg thì ta sử dụng các hàm thông dụng sau:
RegDelete ( "keyname" [, "valuename"] )
RegRead ( "keyname", "valuename" )
RegWrite ( "keyname" [, "valuename", "type", value] )

  • RegDelete: dùng để xóa một valuename trong một reg
  • RegRead: dùng để đọc dữ liệu của một value name
  • RegWrite: dùng để ghi dữ liệu vào value name đó

Đầu tiên ta sẽ tiến hành ghi, tạo một reg. Theo thông thường, keyname là sẽ ghi vào đường dẫn sau đây:
HKEY_CURRENT_USER\Software
Vì thế ta sẽ đặt key name là cái link reg ở trên, phải "xẹt" thêm một cái rồi sau đó tạo cho mình một mục riêng. Mình ví dụ nhé:
RegWrite("HKEY_CURRENT_USER\Software\Part 11\", "Rio", "REG_SZ", "Say hello")

Phần này bạn lưu ý:
  • "HKEY_CURRENT_USER\Software\Part 11" là keyname, nơi lưu reg


  • "Rio" là valuename


  • "REG_SZ" là kiểu dữ liệu của cái value


  • "Say hello" là value, dữ liệu


  • Và khi đọc thì bạn chỉ cần đọc cái valuename là "Rio" trên ví dụ và value là "Say hello" thôi. Cái "REG_SZ" khỏi quan tâm cũng được.

    Hàm này để ghi dữ liệu vào reg, sau đó sẽ sử dụng hàm RegRead để đọc value của reg đó. Cái này trong thực tế bạn có thể áp dụng để làm ứng dụng tự động đăng nhập, nhớ tài khoảng, ...

    Tiếp theo mình sẽ nói về hàm đọc reg là RegRead, mình cho ví dụ luôn, xem phát hiểu liền
    $rreg = RegRead("HKEY_CURRENT_USER\Software\Part 11\", "Rio")
    MsgBox(64, "Title", $rreg)

    Bạn chạy code xem, nếu ra một MsgBox hiện "Say hello" là đúng rồi

    Cuối cùng là RegDelete, đọc tên là biết phát là xóa value, dữ liệu của cái valuename rồi.
    RegDelete("HKEY_CURRENT_USER\Software\Part 11\", "Rio")
    $rreg_2 = RegRead("HKEY_CURRENT_USER\Software\Part 11\", "Rio")
    MsgBox(64, "Title", $rreg_2)


    $rreg_2 là để đọc cái valuename của reg đó xem còn dữ liệu (value) trong đó không, kết quả trắng bóc là thành công.

    Mã nguồn
    http://menly.ml/view/e7b0abdc

    [GUI & Code] Phần 10: Ini và AutoIT


    Giới thiệu
    File Ini (.ini) là một loại file dùng để lưu dữ liệu, đọc dữ liệu theo từng phần (section), từng từ khóa (key) và đọc giá trị của từ khóa đó (value). Nói đơn giản nó chỉ là một loại file dùng để lưu trữ dữ liệu tốt hơn txt thôi :v Bản thân mình cũng chẳng rõ về loại file này nữa nhưng mình rất ưa dùng nó (chỉ biết dùng thôi), bạn nào muốn tìm hiểu sâu hơn thì có thể tìm và đọc vài bài của mấy anh lớn như Juno_okyo (chắc kh có đâu), Phạm Vinh (opdo), ...

    Hướng dẫn
    Cấu trúc của một file .ini thế này
    [Section]
    Key=value

    Ta có:
    • Section: Section Names, phần
    • Key: Hiểu nôm na là từ khóa
    • Value: Là giá trị của từ khóa đó
    Mình cho ví dụ:
    [Rio]
    say=hello
    Giải thích:
    • Section ở đây là Rio
    • Key là Say
    • Value là Hello
    • Có thể hiểu nôm na là thằng Rio đẹp trai nào đó nó "nói" xin chào.

    Tiếp theo mình sẽ nói về việc tương tác với Ini trong AutoIT.
    Để tương tác thì ta có vài hàm chính
    IniWrite ( "filename", "section", "key", "value" )
    IniWriteSection ( "filename", "section", "data" [, index = 1] )
    IniRead ( "filename", "section", "key", "default" )
    IniReadSection ( "filename", "section" )
    IniReadSectionNames ( "filename" )
    IniDelete ( "filename", "section" [, "key"] )
    IniRenameSection ( "filename", "section", "new section" [, flag = 0] )


    Để tạo và đưa dữ liệu vào ini thì ta sử dụng hàm IniWrite và IniWriteSection như sau:
    $User = InputBox("[GUI & Code] Part 10", "Vui lòng nhập tài khoảng", "", "", 200, 120)
    $Pass = InputBox("[GUI & Code] Part 10", "Vui lòng nhập mật khẩu", "", "", 200, 120)
    IniWrite(@ScriptDir & "\part10.ini", "User", $User, $Pass)

    ;~ File sẽ đọc ở đây là part10.ini, section sẽ có tên là "User". Còn Key ở đây sẽ là tài khoảng luôn, value sẽ là mật khẩu; là giá trị của key. Có nghĩa là cái tài khoảng key đó, có mật khẩu là value đó. Khi kiểm tra mà không đúng là méo cho vào.


    Để đọc dữ liệu đã đưa vào ini, ta sử dụng 3 hàm IniRead mà trong đó mình thường dùng là IniReadSection.

    $ruser = IniReadSection(@ScriptDir & "\part10.ini", "User")
    MsgBox(64, "[GUI & Code] Part 10", "Tài khoảng: " & $ruser[1][0] & @CRLF & "Mật khẩu: " & $ruser[1][1])

    ;~ Sử dụng hàm IniReadSection thành công thì bạn có thể sự dụng 2 biến:
    ;~ $ruser[1][0]: Để đọc các key (đọc các tài khoảng, dùng để kiểm tra tài khoảng có tồn tại hay không)
    ;~ $ruser[1][1]: Để đọc các value của key (đọc các mật khẩu, nếu tài khoảng tồn tại thì sẽ tiếp tục đến bước kiểm tra mật khẩu, đúng thì cho vào, không thì báo lỗi)


    Tuy nhiên, nếu bạn muốn xóa một section nào đó thì có thể sử dụng IniDelete

    $delete = InputBox("[GUI & Code] Part 10", "Vui lòng nhập tên tài khoảng muốn xóa", "", "", 200, 120)
    IniDelete(@ScriptDir & "\part10.ini", "User", $delete)


    Để đổi tên một section, bạn có thể dùng IniRenameSection

    ;~ Phần này hơi phức tạp với ví dụ hiện tại, vì thế nếu bạn nào có ý định viết phần mềm quản lí người dùng mà có chức năng chỉnh sửa tên người dùng thì nên tạo một file dành riêng cho việc lưu trữ tài khoảng thôi. Từ đó mỗi tài khoảng sẽ có một section riêng mà không dùng chung như ví dụ trên nữa.


    Ngoài ra, bạn cũng có thể làm theo cách xóa key trong một section bất kì đi rồi sau đó viết lại một cái key mới. Tuy nhiên trước khi xóa key thì phải đọc value (là password), nếu muốn an toàn thì lưu ở đâu đó luôn. Vì khi xóa key thì đồng nghĩa value của key đó cũng sẽ bị xóa luôn. Đó là lý do vì sao các bạn nên đặt cho từng user vào từng section riêng. Đặt tài khoảng là một key, mật khẩu là một key riêng.

    Từ đây và những kiến thức có sẵn, bạn có thể tạo ứng dụng quản lí thông tin người dùng.

    Xin chào, chúc bạn thành công.

    Mã nguồn
    http://menly.ml/view/ab6f55e6

    [Source] Text Review v1.0 - Công cụ xem và chỉnh sửa text nhỏ gọn

    Screenshot

    Author
    Đây là một công cụ mình viết ra để sau này có thể thay thế notepad của windows. Dự định ban đầu mình viết ra chỉ để cho bản thân thôi. Sau này thì mình lại nghĩ nên chia sẽ mã nguồn. Nhìn sơ qua thì tool của mình chả có gì đặc sắc cả nên bạn nào có hứng thú thì có thể tải về để nghịch.

    Vì lý do thời gian nên mình đành hoãn dự án lại và chia sẽ toàn bộ mã nguồn trên Rio's Blog (blog của mình). Bạn nào thấy hay thì có thể đem về chỉnh sửa, phát triển thêm.

    Mình cũng đang suy nghĩ sau này, sau khi đã hoàn thành xong các dự án mình đặt ra từ năm 2014 nhưng năm 2015 mình chưa thực hiện được thì mình sẽ thực hiện vào năm 2016 và nếu chưa xong thì năm 2017 mình sẽ tiếp tục <("). Lúc đấy mình sẽ quay lại tiếp tục phát triển ứng dụng này.

    Information
    Một số chỗ mình chưa hoàn thiện, mình sẽ liệt kê ra:
    • Auto open file: Ở phần này, ý tưởng của mình là sẽ làm một chức năng tự động mở file nếu đã nhập đường dẫn liên kết đến file vào ô input (phải qua công đoạn kiểm tra tệp tin có tồn tại hay không)
    • Messages: Chỗ này là hộp tin nhắn (MsgBox), nếu tắt đi thì hộp MsgBox sẽ không hiện để hỏi ý kiến người dùng nữa mà thực thi luôn :3
    Một vài chức năng của Text Review v1.0
    • Mở, đọc và lưu tệp tin
    • Hỗ trợ định dạng text (.txt), reg, ini, ... không mã hóa thì đọc được <(") và đặc biệt là Rio file :v (ghi chơi cho vui)
    • Tự động lưu mở tệp tin khi đã có link (đang phát triển)
    • Sử dụng song song 2 ngôn ngữ: Tiếng Anh và Tiếng Việt (vì đang còn đi học nên nhiều khi cũng có thể sai ngữ pháp)
    • Log: Chức năng lưu dữ liệu khi lỡ tắt (chỉ hoạt động khi tích vào dấu log trước khi thoát ra)
    • Tin nhắn: Cho người dùng tùy chỉnh ẩn/hiện msgbox
    • Mở trong notepad: Sao chép toàn bộ dữ liệu trong khung edit và chuyển sang notepad (không bị vướn unikey nhưng có điều hơi bị cách dòng)
    • Sao chép vào bộ nhớ, chỉ cần ấn Ctrl + V là có thể dán cái trong khung edit ra chỗ khác
    • Dọn dẹp (clean): Dọn dẹp hệ thống
    • Một số cài đặt khác như: Tùy chỉnh độ trong suốt của GUI, đặt tất cả về mặc định

    Download (dung lượng là Ido - 911 KB nhé)
    https://drive.google.com/open?id=0Bw1IL1xtaFUiQXIwNmgyeVhRTDA

    [GUI & Code] Phần 9: Viết phần mềm check key đơn giản


    Giới thiệu
    Lời nói đầu, đây là một bài viết khá đơn giản. Công việc kiểm tra key - mã được thực hiện bên trong source và key cũng nằm bên trong source luôn. Hoàn toàn không có kết nối với internet. Vì thế đây chỉ là một cách nhỏ trong những cách nâng cao thôi. Mình cũng không khuyên các bạn xài phương pháp này.

    Như các bạn đã biết, AutoIT rất dễ bị decode, nếu các bạn để key trong source thì khả năng phần mềm của các bạn bị crack khá cao.

    Nói thật thì mình cũng không muốn viết bài này đâu nhưng vì nó cũng là cơ bản cho những phần mềm check key online về sau.

    Hướng dẫn

    1. GUI Koda
    Để viết một phần mềm check key đơn giản, mình cần một cái GUI có giao diện kiểm tra mã (check key). Trong GUI mình chỉ cần 1 cái Input chính, một Button và thêm label nếu cần. Mình sẽ dùng Koda và tạo GUI mẫu cho các bạn xem.
    GUI Example Check key
    Ở đây mình có một cái GUI đơn giản thôi, mình set cho text nó ở giữa, bạn nào thích để bên trái thì cũng không sao.

    Tiếp theo đến bước case biến cho button "Check".
    Case $Button_Check
     _checkkey()
    Ở func này, mình đặt là _checkkey() cho cùng với bài.

    Suy luận thế này: Khi người dùng nhập dữ liệu vào trong input thì ta sẽ đọc text trong input đó, nếu đúng với những key cho sẵn thì lệnh sẽ được thực thi, còn không thì sẽ báo lỗi. Để đọc text trong input thì ta phải có hàm GUICtrlRead($Input)
    $read = GUICtrlRead($Input_Key)

    Sau khi đã đọc rồi, ta sẽ tiến hành kiểm tra thử xem cái dữ liệu đó có đúng với key không. Nếu không thì báo lỗi v thôi :))
    If $read <> "123456" Then
     MsgBox(16, "Error", "Key không tồn tại.")
    Else
     MsgBox(64, "Success", "Key tồn tại.")
    EndIf

    Như vậy là xong phần check key bằng GUI

    2. InputBox
    Phần InputBox thực chất cũng khá đơn giản, nó rất giống so với GUI. Đầu tiên các bạn phải có một hàm InputBox và đặt biến cho nó. Vì làm bằng InputBox nên sẽ không có GUI, việc đó đồng nghĩa ta sẽ không cần đọc dữ liệu mà cứ đánh trực tiếp thôi. Sử dụng lại phần If ở trên.
    $key = InputBox("Check key", "Vui lòng nhập key", "", "")
    If $key <> "123456" Then
     MsgBox(16, "Error", "Key không tồn tại.")
    Else
     MsgBox(64, "Success", "Key tồn tại.")
    EndIf

    Như thế là xong :)) phần InputBox khá đơn giản

    Mã nguồn
    Key: 123456
    GUI: http://menly.ml/view/45c53794
    InputBox: http://menly.ml/view/692dc65c

    [GUI & Code] Phần 8: Một số thủ thuật nhỏ, cơ bản


    Giới thiệu
    Tính đến đây cũng là phần 8 của series GUI & Code rồi. Trong phần này mình sẽ trình bày cho các bạn xem một số thủ thuật nhỏ từ kinh nghiệp lập trình mà ra. Tuy là những thủ thuật này chỉ là một phần nhỏ thôi nhưng nó giúp ích rất nhiều cho những cái lớn.

    Hướng dẫn
    1. Xuống dòng trong AutoIT
    Để xuống dòng thì bạn sử dụng chuỗi kí tự này: @CRLF
    Ví dụ:
    MsgBox(0, "", "Line 1" & @CRLF & "Line 2")


    2. Viết tiếng việt khi lập trình
    Để viết tiếng việt trong SciTE thì bạn mở giao diệnSciTE lên, nhìn trên thanh công cụ có chữ File, click vào chữ File, tìm trên menu trải xuống chữ Encoding, sau đó bạn chọn một trong 4 cái cuối.
    File -> Encoding => UTF-16 Big Endian/UTF-16 Little Endian/UTF-8 with BOM/UTF-8


    3. Sửa lỗi.. dấu nháy kiểu Pascal
    Bạn cảm thấy dấu nháy bị to ra, không thể chỉnh sửa một chỗ được, xóa chỗ này thì chỗ kia cũng bị dính rồi xoa theo. Nó là kiểu nháy insert bạn hay thấy trong Pascal (nếu có học pascal). Để sửa lỗi, bạn ấn vào nút Insert trên bàn phím

    4. Tìm kiếm tài liệu AutoIT (File Help)
    Thủ thuật này cũng không có gì mới, để xem cấu tạo của một hàm thế nào thì bạn tô đen hàm đó, ấn F1 đợi đôi chút thì file help sẽ được hiện lên ngay hàm đó để hỗ trợ cho bạn.

    5. Đặt GUI ra giữa màn hình
    Bạn chỉ cần thay phần lefttop trong hàm GUICreate thành -1.
    #Region ### START Koda GUI section ### Form=
    $FormLogin = GUICreate("Login System v1.0", 296, 128, -1, -1)
    $Login_LabelUser = GUICtrlCreateLabel("Username:", 5, 11, 67, 20)
    $Login_LabelPass = GUICtrlCreateLabel("Password:", 5, 44, 65, 20)
    $Login_InputUser = GUICtrlCreateInput("", 72, 8, 221, 24, $ES_CENTER)
    $Login_InputPass = GUICtrlCreateInput("", 72, 40, 221, 24, BitOR($ES_CENTER,$ES_PASSWORD))
    $Login_ButtonLogin = GUICtrlCreateButton("Log In", 5, 80, 121, 41)
    $Login_ButtonSignin = GUICtrlCreateButton("Sign In", 171, 80, 121, 41)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###


    6. Thay đổi giao diện của SciTE
    Lưu ý: Chỉ dành cho bản full

    Đầu tiên bạn tạo một file mới "Twilight.SciTEConfig" sau đó copy nó vào folder "SciTEConfig" trong thư mục cài đặt AutoIT.
    Tiếp tục, bạn mở SciTE lên và nhấn tổ hợp phím Ctrl + 1. Chọn "Color Settings" tab. Click "New Scheme". Sau đó chọn "Twilight" trong danh sách thả xuống.
    Cuối cùng, nhấn "Update"

    Twilight.SciTEConfig: http://menly.ml/view/a79cb3aa

    Viết đến đây thôi, sau này mình sẽ cập nhật tiếp tại post này.

    [GUI & Code] Phần 7: Viết phần mềm đa ngôn ngữ (Multi-Language)


    Giới thiệu
    Phần này ban đầu mình định viết Ini, Reg và AutoIT nhưng sau thì thấy cụt ý quá nên mình đã xóa và viết bài này vì nội dung ngắn gọn, xúc tích và đơn giản hơn.

    Hướng dẫn
    Phần này có liên quan đôi chút về Ini File (.ini) nên mình sẽ nói đôi chút về file ini
    Cấu trúc của file Ini như này:
    [Section]
    Key=Value
    Giải thích:
    • Section: Phần, nghĩ đơn giản là từng phần
    • Key: Một từ khóa nào đó
    • Value: Giá trị của từ khóa đó
    Mình sẽ cho vài ví dụ:
    [Rio]
    say=hello
    Ở đây ta có section là Rio, key là say, value là hello. Nói thẳng ra thằng Rio nó bảo (say): helllo (chat đấy).

    Phần Ini tới đây là xong. Tiếp theo mình sẽ nói về cách hoạt động của phần mềm.
    Cách hoạt động thế này. Đầu tiên ta có một cái GUI, trong cái GUI đó cần có các label (vì text sẽ được thay vào label đó), button hay checkbox hay radio gì đó thì tùy nhưng mình sẽ chọn checkbox vì nó đơn giản (tất nhiên mấy cái kia cũng đơn giản nếu bạn biết sử dụng checkbox). Sau khi click chọn vào checkbox (checked) thì ngôn ngữ trong file sẽ được thay đổi.

    Sau khi code xong, nghĩ lại thì thấy có lẽ mình khỏi làm thành file .ini luôn cho gọn và tự hỏi lại rằng mình đã code có sai gì không hay là hay hoặc dở. (haizz). Thôi bắt đầu nào. Vì thế phần này mình chỉ viết cho các bạn xem để nắm sơ về cơ bản của một phần mềm đa ngôn ngữ thôi.

    Đầu tiên các bạn tạo một GUI có checkbox hay button hoặc radio gì đó nhưng phần này mình sẽ sử dụng checkbox cho đơn giản.

    Tiếp theo, ta tạo một file tên bất kì có đuôi là .ini. Mình lấy ví dụ là Lan.ini
    Cách tạo: Tạo một file .txt bằng notepad sau đó đổi đuôi lại .ini là xong

    Trong file Lan.ini các bạn nhập vào 2 mục, 1 là ENG, 2 là VIE để trong dấu ngoặt
    Ví dụ:
    [ENG]

    [VIE]

    Đây là cái trong Lan.ini của mình
    [ENG]
    User=Username:
    Pass=Password:
    Login=Login
    Msg=Login successfully!
    Error=Error !!!

    [VIE]
    User=Tài khoảng:
    Pass=Mật khẩu:
    Login=Đăng nhập
    Msg=Đăng nhập thành công!
    Error=Lỗi !!!

    Giải thích:
    User, Pass, Login, Msg, Error là Key; là những chú thích, phần này chỉ là cơ bản và do mình tự chế nên mình nghĩ mấy cái đó không cần quan tâm, cái cần quan tâm là những cái value kia.
    Tiếp theo là bước gắn dữ liệu vào biến (case biến). Ở trong cái GUI của mình, có 2 control cần case biến là checkbox và button và 2 cái này hoạt động riêng biệt.

    Mình đặt func cho checkbox là ChangeLan()
    Case $Checkbox
     ChangeLan()

    Tiếp theo, mình cần đọc xem checkbox có được check hay không, ta sử dụng hàm GUICtrlRead (đặt trong func ChangeLan nhé)
    Global $rLan = GUICtrlRead($Checkbox)

    Nếu có (tức = 1) thì cái gì đó sẽ xảy ra, ta có đoạn code mẫu
    If GUICtrlRead($checkbox) = 1 Then ;~ Tức đã được check
    ....
    Else ;~ ElseIf GUICtrlRead($checkbox) = 4 (= 4 là không chọn)
    ....
    EndIf


    Nếu checkbox được checked thì ngôn ngữ VIE-Vietnamese sẽ được set. Còn bỏ checked thì ngôn ngữ sẽ trở lại mặc định (mặc định là ENG - English). Hàm kiểm tra xem checkbox mình đã viết ở trên rồi giờ tới phần đọc file Ini. Ta sử dụng hàm IniReadSection
    $IniEng = IniReadSection(@ScriptDir & "\Lan.ini", "ENG")
    $IniVie = IniReadSection(@ScriptDir & "\Lan.ini", "VIE")

    Các bạn để ý kỉ, Lan.ini là file mà mình kêu bạn tạo ở trên. Còn ENG và VIE là 2 section mà mình cũng đã kêu bạn đặt trong file Lan.ini đó. @ScriptDir là một macro, file autoit này bạn để ở đâu thì nó sẽ tìm ngay tại nơi đó một file có tên là Lan.ini, tuy nhiên bạn phải đặt thêm dấu "\" vào trước chữ Lan.ini là vì thế này. Bạn hãy chạy thử MsgBox với nội dung sau thử xem
    MsgBox(0, "", @ScriptDir & "Lan.ini")
    Đây là hình ảnh của mình sau khi chạy

    Bạn có thấy gì lạ không? :)) Đấy, Multi Language là folder chứa file .au3 và cả file Lan.ini của mình. Nếu bạn không đặt dấu "\" vào trước file Lan.ini thì code sẽ bị lỗi, nó sẽ tìm file "Multi LanguageLan.ini". Lưu ý là dấu "\" nhé.


    Đây là link sau khi mình thêm dấu "\" vào. Như thế khi code nó đọc, nó sẽ tìm một file Lan.ini trong thư mục Multi Language <3

    Thực ra còn một hàm nữa là IniReadSectionNames nhưng mình không biết dùng :'>

    Tiếp theo, sau khi đọc section của file Lan.ini thì code sẽ trả về các giá trị như thế này
    IniReadSection ( "filename", "section" )

    Remarks
    $aArray[n][0] = nth Key
    $aArray[n][1] = nth Value

    Ví dụ: 1 file ini có section là Rio, key là say, value là hello.
    $read=IniReadSection(@ScriptDir & "/rio.ini", "Rio")

    Ta sẽ được trả về 2 dữ liệu
    $read[1][0]="Say"
    $read[1][1]="Hello"

    Hiểu chứ :)) cũng đơn giản mà. Trong bài này thì ta chỉ quan tâm tới value thôi, key bỏ đi nên mình chỉ sử dụng [1][1], [2][1], [3][1], ..... [n][1] thôi.

    Ta có sẵn một func ở trên, func ChangeLan() trong func đó có một hàm là GUICtrlRead($checkbox) mà ở trên mình kêu thêm đấy. Sau khi đã gắn biến vào để kiểm tra rồi, ta sẽ dùng hàm If...EndIf để set text ngôn ngữ lên Label. (ở trên mình đã nói rồi, ở trên có cái hàm mẫu).
    Nếu checkbox được checked thì = 1, ta sẽ set ngôn ngữ Vietnamese vào
    GUICtrlSetData($Label_User, $IniVie[1][1])
    GUICtrlSetData($Label_Pass, $IniVie[2][1] )
    GUICtrlSetData($Button_Login, $IniVie[3][1])
    Còn không hoặc bỏ chọn thì sẽ trở về mặc định, English
    GUICtrlSetData($Label_User, $IniEng[1][1])
    GUICtrlSetData($Label_Pass, $IniEng[2][1])
    GUICtrlSetData($Button_Login, $IniEng[3][1])

    Thế là xong.

    À còn một vấn đề nữa, chính là phần Login. Phần login thì bạn có thể tự code (nếu có xem phần 1 và phần 2) và kèm áp dụng phần Remarks vào thì sẽ rất dễ.
    Bạn nào không làm được thì xem code nhé.

    Login:
    Tài khoảng: admin
    Mật khẩu: admin

    Chúc bạn thành công

    Mã nguồn
    Source: http://menly.ml/view/6fafa1e1 
    Lan.ini: http://menly.ml/view/a5b85e99

    [GUI & Code] Phần 6: Viết ứng dụng có chức năng random như xRandom v1.0


    Giới thiệu
    Đây là bài hướng dẫn có rất nhiều trên internet. Đặc biệt là bài của Mạnh Tuấn (Juno_okyo) nhưng dường như anh ấy đã xóa. Nên bây giờ mình xin hướng dẫn lại các bạn cách tạo một công cụ random số :)) Random chữ cũng tựa tựa như random số :)) Tìm hiểu tí về bảng mã gì mình quên rồi :p tìm chút trong file help F1 là ra ngay.

    Bạn có thể sử dụng hàng mẫu ở bài này: xRandom v1.0 - Công cụ tạo số ngẫu nhiên
    Hoặc ở đây: https://www.random.org/

    Hướng dẫn
    Đầu tiên ta phải có một GUI: 3 Label, 3 input và 1 button (tùy, nhưng phải lớn hơn hoặc bằng 1, mình làm 1 button thôi cho dễ).
    • 3 Label, đặt theo thứ tự (xuống hàng): Min (số bé nhất), Max (số lớn nhất), Result (kết quả)
    • 3 Input, đặt ngang với các Label, muốn đẹp thì set cho text nằm ở giữa. Input Result set Readonly :)) Cho 3 cái thêm style $ES_Number lại cho đỡ phần If :))
    • 1 Button.

    Sau một hồi mò với Koda mình đã tạo được một cái GUI

    Sau khi đã tạo xong GUI, có một cái hàm chính, ta chỉ cần gắn hàm này vào là xong
    Random ( [Min = 0 [, Max = 1 [, Flag = 0]]] )
    Bắt tay vào code nào. Ta case biến trong vòng lặp như mấy bài trước.
    Case $Button1
     Randomx()

    Tạo một func set cho Randomx().

    Trong phần Func này ta phải 2 biến đọc dữ liệu từ 2 input Min và Max (vì code là $input1, ... nên mình không chỉnh sửa gì hết
    $rMin = GUICtrlRead($Input1) ;~ Đọc dữ liệu input Min
    $rMax = GUICtrlRead($Input2) ;~ Đọc dữ liệu input Max

    Phần tiếp theo, ở đây bạn có thể đặt biến vào để random được rồi nhưng nếu muốn chuyên nghiệp thì cần một số lệnh kiểm tra dữ liệu từ các input đưa vào.
    • Nếu 1 trong 2 Input để trống thì hiện msgbox báo lỗi (16)
    • Nếu số trong Input Min lớn hơn Input Max thì báo lỗi (16)
    Ta code như này, sử dụng hàm If...EndIf
    If $rMin = "" Or $rMax = "" Then
     MsgBox(16, "Error", "Một trong hai không được để trống")
    ElseIf $rMin > $rMax Then
     MsgBox(16, "Error", "Min không được lớn hơn Max")

    Phần random ta sẽ code như này, sau khi random thì ta cần set dữ liệu vào ô Input của Result :)) Nên vì thế ta phải đặt biến cho hàm Random hoặc khỏi đặt, làm gọn luôn (mình sẽ code 2 cách)
    Cách 1
    $random = Random($rMin, $rMax, 1)
    GUICtrlSetData($Input3, $random)

    Cách 2
    GUICtrlSetData($Input3, Random($rMin, $rMax, 1))

    • Random là hàm Random số
    • $rMin là số nhỏ nhất
    • $rMax là số lớn nhất
    • 1 là flaq, thêm nó vào nó sẽ chỉ Random số nguyên thôi
    • GUICtrlSetData là hàm set dữ liệu lên Control
    • $Input3 là input của Result
    Thế là xong :)) Ghép code lại, chỉnh sửa hàm, thêm chữ vào

    Có một điều thú vị: Tại sao phần If  không có kiểm tra loại dữ liệu, kiểm tra xem nó có phải là số hay không, lỡ chữ thì sao?

    Xin thưa! Phần kiểm tra xem nó có là chữ hay không thì không cần lo nữa vì đã có $ES_Number ở trên kia mình bảo thêm vào 3 Input rồi đấy :)) Không tin cứ nhập thử đi, không phải số nó không cho nhập đâu :))

    Mã nguồn
    http://menly.ml/view/2e0d2dd1

    [GUI & Code] Phần 5: MsgBox nâng cao


    Trích lại phần cũ
    Đây là một phần hoàn toàn mới và không liên quan gì đến các phần cũ :))

    Giới thiệu
    Đây là một phần hoàn toàn mới, chỉ liên quan đến các hàm cơ bản như InputBox, MsgBox, ... (mình biết 2 cái này nên mình chỉ hướng dẫn 2 cái này thôi nha, còn lại các bạn tự tìm hiểu)

    Hướng dẫn
    1. Tạo MsgBox nâng cao
    Đầu tiên, để sử dụng được các hàm nâng cao này (đối với mình là nâng cao ok :v) thì bạn phải khai báo include. Copy đoạn code sau đặt vào trên đầu code
    #include <MsgBoxConstants.au3>
    Ta sẽ có vài dòng flaq chính, thay flaq vào là những con số, bình thường bạn chỉ để 0, 16, 32, 48, bla bla. Sau khi đã khai báo hàm include thì bạn có quyền được tạo một cái MsgBox khác với flaq khác
    0: $MB_OK
    1: $MB_OKCANCEL
    2: $MB_ABORTRETRYIGNORE
    3: $MB_YESNOCANCEL
    4: $MB_YESNO
    5: $MB_RETRYCANCEL
    6: $MB_CANCELTRYCONTINUE
    16384: $MB_HELP

    Chi tiết hơn là ấn F1
    Một số mẫu MsgBox
    MsgBox kiểu Yes No

    MsgBox kiểu Abort, Retry, Ignore

    2. Viết code với MsgBox nâng cao
    Sau khi có một mẫu MsgBox mà mình muốn rồi, chúng ta sẽ đi tới phần code. Đầu tiên sử dụng file help để hỗ trợ (F1). Ở đây mình sẽ hướng dẫn với Flaq $MB_YESNO (4) - MsgBox giao diện Yes và No.

    Đầu tiên ta có mã nguồn MsgBox giao diện Yes or No
    #include <MsgBoxConstants.au3>
    MsgBox(4, "Test", "Ấn yes hoặc no")

    Sau khi đã có code một MsgBox rồi ta sẽ tiến hành đặt biến và kiểm tra dữ liệu (nếu người dùng bấm Yes thì câu lệnh của Yes sẽ được thực hiện, bấm No thì câu lệnh của No được thực hiện).

    Ta đặt cho hàm MsgBox một cái biến là $msg, ta có code đầy đủ
    #include <MsgBoxConstants.au3>
    $msg = MsgBox(4, "Test", "Ấn yes hoặc no")

    Tiếp tục, dùng hàm If...EndIf để check dữ liệu của MsgBox. Ta có Button Pressed và Return Value
    OK: $IDOK (1)
    CANCEL: $IDCANCEL (2)
    ABORT: $IDABORT (3)
    RETRY: $IDRETRY (4)
    IGNORE: $IDIGNORE (5)
    YES: $IDYES (6)
    NO: $IDNO (7)
    TRY AGAIN: $IDTRYAGAIN (10)
    CONTINUE: $IDCONTINUE (11)

    Ở đây là Yes no nên ta chỉ dùng $IDYES (6) và $IDNO (7) thôi.

    Code thế này: Nếu ấn Yes thì hàm MsgBox với flaq 0 sẽ hiện lên báo đã ấn vào Yes. No cũng vậy và ngược lại. Bạn xem code mẫu
    If $msg = 6 Then
     MsgBox(0, "Part 5", "Bạn đã ấn Yes")
    Else
     MsgBox(0, "Part 5", "Bạn đã ấn No")
    EndIf

    Giải thích thế này, hàm If sẽ kiểm tra xem $msg (tức MsgBox với Yes, No) nếu $msg gửi về giá trị 6 (tức người dùng ấn ô Yes).
    Ngược lại chỉ có phần Else, tại sao ở đây chỉ có check xem $msg là 6 thì blablabla. Vì, chỉ có 2 dữ liệu là Yes hoặc No, mình đã đặt 6 (Yes) rồi thì cái còn lại chắc chắn phải là No.
    Bạn nào cẩn thận thì có thể code thêm đoạn này nữa là xong
    Thay đoạn Else thành câu dưới
    ElseIf $msg = 7 Then


    Bài viết đến đây là xong :)) chúc bạn thành công.

    Mã nguồn
    http://menly.ml/view/57867762

    [GUI & Code] Phần 4: Tạo hotkey với button trong GUI


    Trích lại phần cũ
    Mã nguồn bài 3: http://menly.ml/view/90e2c49e

    Giới thiệu
    • Phần này rất đơn giản, tiện dụng hơn HotKeySet.
    • Phần này sẽ dính liền đến button của GUI, HotKeySet nằm bên ngoài.
    • Đơn giản, ngắn gọn. HotKeySet lại có nhiều bất lợi. 
    • 2 dòng.

    Hướng dẫn
    Mình sẽ sử dụng lại code của phần trước là phần 3, ai chưa có thì có thể download ở link phía trên.
    Mở script lên, ta chỉ cần thêm 2 dòng này vào, chỉnh sửa tí là xong.
    Dim $Form1_AccelTable[1][2] = [["{Enter}", $Button1]]
    GUISetAccelerators($Form1_AccelTable)

    Chỉnh sửa 2 cái sau đây
    • INS thay vào là key mà bạn muốn set (thường là Enter), xem trong hàm Send của file help (F1)
    • $Button1 là tên biến của button mà bạn muốn gán key vào.


    Mã nguồn
    http://menly.ml/view/9f09c375

    [GUI & Code] Phần 3: Tạo GUI có checkbox "Nhớ tài khoảng"


    Trích lại bài cũ
    Full source của 2 bài trước: http://menly.ml/view/4390cc97

    Giới thiệu
    Ở phần này bạn có thể sử dụng source của 2 bài cũ rồi chỉnh sửa lại, thêm checkbox vào hoặc bạn có thể tạo một GUI mới bằng Koda hoặc bằng tay. Cách tạo bằng Koda thì mình đã hướng dẫn ở phần 1 rồi (xem tại đây)

    Làm thêm chức năng "Nhớ tài khoảng" bằng checkbox cũng không có gì khó. Có 2 cách để thực hiện
    1. Lưu ra file sau đó check xem có nhớ tài khoảng không (cách này cũng đơn giản nhưng mình sẽ hướng dẫn sau)
    2. Sử dụng những hàm có liên quan đến Reg như RegWrite, RegRead, .... (mình ưu tiên cách này hơn)

    Hướng dẫn
    Để có thể thực hiện được thì đầu tiên bạn phải có một cái GUI đăng nhập và trong GUI đó yêu cầu phải có khung checkbox "Nhớ tài khoảng" (nói vậy cho mấy ông newbie rõ thôi, là newbie thì nên làm theo mẫu trước).

    Mình dùng cái GUI ở 2 phần trước và import vào Koda chỉnh sửa lại, thêm giao checkbox. Và thành quả cuối cùng:
    Một GUI login có checkbox "nhớ tài khoảng"
    Ta bắt đầu tiến hành code nào. Lần đầu đăng nhập thì trước đó sẽ chưa có lưu tài khoảng nào cả, nên chỗ input bạn nên xóa 2 dòng admin giúp mình vì mình để đó cho các bạn hiểu. Chỗ đó sau này sẽ được thay thế bằng tài khoảng sẽ nhớ.

    Như phần 2 mình hướng dẫn, ta cũng case biến cho control và code thế này: Khi người dùng nhấn vào button Login, code sẽ tiến hành đưa kiểm tra xem ô checkbox Remember có được tích vào hay không (hay có được checked hay không). Nếu có thì sẽ dùng hàm RegWrite để viết dữ liệu lên đó. Lần thứ 2 đăng nhập thì 2 (2 là có cả tài khoảng và mật khẩu, 1 là chỉ có tài khoảng thôi, tùy chọn) input sẽ đọc reg bằng hàm RegRead, nếu chả có gì thì sẽ để trống, còn có dữ liệu hay tài khoảng mật khẩu được ghi vào thì sẽ lấy mấy cái đó set text của 2 Input.

    Nói không bằng làm, code thế này: Vẫn case biến và đặt func như phần 2, chỉ case cái Button thôi, cái Checkbox thì mặc kệ. Sau đó ta có phần While như này

    While 1
     $nMsg = GUIGetMsg()
     Switch $nMsg
      Case $GUI_EVENT_CLOSE
       Exit
      Case $Login_Blogin
       _login()
     EndSwitch
    WEnd

    Phần Func thì khác. Đầu tiên ta phải đặt biến và gọi hàm để đọc dữ liệu từ 2 Input đã.
    Func _login()
     $ruser = GUICtrlRead($Input1)
     $rpass = GUICtrlRead($Input2)
    EndFunc

    Sau đó, dùng đó dùng hàm If...Else/ElseIf...EndIf để kiểm tra dữ liệu người dùng đưa vào.
    If $ruser = "" Or $rpass = "" Then
     MsgBox(16, "Error", "Tài khoảng hoặc mật khẩu đều không được để trống.")

    Dòng đầu có nghĩa là kiểm tra xem 2 cái Input đó có nhập gì không (một trong hai vì có cái Or ở giữa, Or: hoặc). Nếu một trong 2 khung để trống thì sẽ có một hộp thoại msgbox hiện lên.

    Tiếp tục, nếu không có lỗi xảy ra thì ta code phần nhớ tài khoảng.
    Else
     If GUICtrlRead($Checkbox1) = 1 Then
      RegWrite($reglink, "user", "REG_SZ", $ruser)
      RegWrite($reglink, "pass", "REG_SZ", $rpass)
      RegWrite($reglink, "checked", "REG_SZ", 1)
     Else
      RegWrite($reglink, "user", "REG_SZ", "")
      RegWrite($reglink, "pass", "REG_SZ", "")
      RegWrite($reglink, "checked", "REG_SZ", 4)
     EndIf
     MsgBox(0, "Successful", "Login successful")
    EndIf

    Ở đây có nghĩa thế này, GUI đọc dữ liệu từ hàm, nếu ô checkbox mà được tích vào thì dữ liệu trả về sẽ bằng 1 nên ta sẽ có hàm If như này. Nếu hàm checkbox được checked rồi thì hàm RegWrite sẽ chạy. Cấu trúc của hàm RegWrite như sau
    RegWrite ( "keyname" [, "valuename", "type", value] )
    • Keyname là cái registry key được viết, không như tìm trong explorer mà chúng ta phải mò trong regedit bằng cách ấn Run: Regedit. Thường thì được lưu trong HKEY_CURRENT_USER\Software\<tên>\
    • Value name là dữ liệu được ghi, ở đây là "user" và "pass"
    • Type thì có vài loại như "REG_SZ", "REG_MULTI_SZ", "REG_EXPAND_SZ", "REG_DWORD", "REG_QWORD", or "REG_BINARY". Tùy vào mục đích sử dụng nhưng ở đây mình chỉ dùng cái đầu tiên thôi.
    • Cuối cùng là value, dữ liệu sẽ được ghi vào. Ở code trên, value này sẽ là tài khoảng và mật khẩu đã được nhập trong 2 hàm Input.

    Vì không biết biến $reglink là gì nên mình đành phải khai báo bên ngoài để nó bớt rối
    Global $reglink = "HKEY_CURRENT_USER\Software\System Login Part 3\"
    Mình thường đặt Global cho nó rộng rãi :v sử dụng toàn code và khi báo mỗi chỗ khác nhau cho khỏi nhằm.

    Công đoạn cuối cùng là làm sao khi mở lần thứ hai thì code nó sẽ lấy cái tài khoảng và mật khẩu mà bạn đã nhớ. Chúng ta sử dụng hàm RegRead chèn vào hai hàm Input trong GUI (hoặc chỉ chèn tài khoảng thôi cho chức năng  chỉ nhớ mỗi tài khoảng)
    Thay vì
    Global $Input1 = GUICtrlCreateInput("admin", 80, 5, 225, 24, BitOR($GUI_SS_DEFAULT_INPUT,$ES_CENTER))
    Global $Input2 = GUICtrlCreateInput("admin", 80, 37, 225, 24, BitOR($GUI_SS_DEFAULT_INPUT,$ES_CENTER,$ES_PASSWORD))

    thì sẽ thành
    Global $Input1 = GUICtrlCreateInput(RegRead($reglink, "user"), 80, 5, 225, 24, BitOR($GUI_SS_DEFAULT_INPUT,$ES_CENTER))
    Global $Input2 = GUICtrlCreateInput(RegRead($reglink, "pass"), 80, 37, 225, 24, BitOR($GUI_SS_DEFAULT_INPUT,$ES_CENTER,$ES_PASSWORD))

    Đã xong!

    Bước cuối cùng là save lại hoặc ấn F5 để hưởng thụ thành quả của mình.

    Lưu ý: Nếu bạn nào chỉ muốn nhớ tài khoảng mà không nhớ mật khẩu thì xóa các thứ sau:
    Chỉnh sửa chỗ $Input2 phần đọc pass
    Xóa luôn cái $rpass = GUICtrlRead($$Input2)
    Xóa chỗ nào có phần "pass" trong câu lệnh If..EndIf
    1. RegWrite($reglink, "pass", "REG_SZ", $rpass)
    2. RegWrite($reglink, "pass", "REG_SZ", "")

    Have fun. Chúc thành công.

    Mã nguồn
    http://menly.ml/view/90e2c49e

    [GUI & Code] Phần 2: Case biến, đặt hành động (phần While trong GUI)


    Trích lại bài cũ
    Xem lại phần 1: http://riotxtreview.blogspot.com/2016/08/gui-code-phan-1-huong-dan-tao-gui-ang.html 

    Hướng dẫn
    Đã tạo GUI xong rồi thì chúng ta phải đặt case biến, có thể xem là đặt nhiệm vụ cho cái Button kia. Có nghĩa là, khi chúng ta click vào Button thì một lệnh sẽ được thực thi.

    Sử dụng mã nguồn của phần 1 (xem tại đây)

    Ở đây chúng ta không cần chú ý phần GUI, chỉ chú ý đến biến và cái vòng lặp vô cực (While... WEnd)

    Để đặt nhiệm vụ cho control. Ta để ý hàm Case. Trong GUI ở phần 1 khi tạo bằng Koda cho sẵn ta hàm case như sau
    Case $GUI_EVENT_CLOSE
    Exit
    Vấn đề bây giờ là button 1 phải hoạt động, ta thêm vào bên dưới phần Case cho sẵn một hàm như như mẫu bên dưới:
    Case $Button1
    _login() 

    Ta ra khỏi vòng lặp While, viết một cái Func...EndFund với cái mà bạn đã đặt dưới biến đã case.
    Func _login()
    EndFunc 

    Xong phần cơ bản rồi. Phần chính giữ Func và EndFunc sau khi đã khai báo thì nó sẽ do bạn tự code nên cứ thỏa thích. Mình sẽ cho ví dụ:
    Func _login()
    MsgBox(0, "Rio Blogspot", "Ok")
    EndFunc 

    Ấn F5 chạy code và ấn thử xem Button có hiện như câu lệnh lên không, nếu đúng thì bạn đã thành công.

    Lưu ý: Nhớ set phạm vi biến cho các control trong GUI nha

    Mã nguồn
    http://menly.ml/view/4390cc97

    [GUI & Code] Phần 1: Tạo GUI đăng nhập bằng Koda


    Giới thiệu
    • Đây là bài đầu tiên trong Series GUI & Code của mình. Đây là một bài hết sức cơ bản cho các bạn thích lập trình AutoIT và đang làm quen với GUI trong AutoIT.
    • Để tạo GUI thì có 2 cách: 1 là tạo bằng hay hoặc 2 là tạo bằng phần mềm Koda.
    • Riêng Koda thì bạn có thể download trên trang chủ hoặc tải script về, nó có sẵn trong script.

    Hướng dẫn
    Ở đây mình đã dùng quen Koda nên mình sẽ dùng Koda mà hướng dẫn.

    Đầu tiên mở Koda, Koda có giao diện như này

    Ở đây chúng ta có 5 khung
    1. Thanh công cụ
    2. Khung quản lí GUI
    3. Khung điều chỉnh các control
    4. Khung thiết kế GUI, xem trước, điều chỉnh GUI
    5. Khung quản lí các GUI chính
    Chúng ta chỉ tập trung vào khung số 1, 3 và 4 thôi.

    Bắt đầu nào, dùng Label, Input và Button sau đó dùng chuột điều chỉnh lại kích thước của GUI.
    Sau một hồi mò mẫn, mình đã tạo được một GUI như này


    Sau đó chúng ta ấn F9 (Generate code) để lấy source code hoặc ấn F10 (Run form review) để chạy và lấy code, mình thì ưa dùng F9 hơn.

    Sau khi ấn F9, chúng ta có một đống chữ thế này

    Copy hết rồi bỏ vào một file .au3 hoặc bỏ vào script. Thế là chúng ta đã có được một GUI.

    Chúc các bạn thành công.

    Lưu ý:

    • Muốn GUI ở giữa màn hình thì chỉnh giá trị left và top lại thành -1 (chỉnh trong code chứ không chỉnh trong Koda)


    Mã nguồn
    http://menly.ml/view/7cdfe543

    AutoIT là gì?


    I. AutoIT là gì?
    Vì có rất nhiều trang web như Quốc Toàn Blog đã có bài nói về ngôn ngữ AutoIT và một số diễn đàn khác cũng có nói đến như AutoITVN nên mình sẽ nói ngắn gọn xúc xích... à nhầm xúc tích.

    Vậy AutoIT là gì? - AutoIT là một ngôn ngữ lập trình theo dạng tự động. Nó là một ngôn ngữ bậc cao (vì là bậc cao nên trong thời gian lập trình có thể ít nhiều xảy ra những lỗi có thể gọi là "nhảm" - mình bị rồi -_-). Không như C là ngôn ngữ bậc thấp nên code của C thuộc dạng khó học. Còn AutoIT là mã nguồn bậc cao nên rất dễ học. Xem ví dụ nhé:

    Ví dụ
    $text = InputBox("Rio Blogspot", "AutoIT là gì?", "", "", 250, 120) Msgbox(0, "Rio Blogspot", $text) Xong. Giải thích nhé
    • $text là đặt biến cho hàm InputBox, hàm InputBox có thể được xem là một hàm dùng để lấy dữ liệu mà người dùng nhập vào. Ở cái ngoặt đầu tiên, "Rio Blogspot" là tiêu đề (title), "AutoIT là gì?" là phần giới thiệu, "" thứ nhất là dữ liệu cho sẵn người dùng trong khung input, "" thứ hai là password char, mình để trống thì có nghĩa không có gì xảy ra còn để một vài kí tự như "*" thì do dù nhập gì thì nó cũng hiện thị là "*". 250 là chiều rộng, 120 là chiều cao.
    • MsgBox đúng như cái tên, có nghĩa là "Message Box", là hộp thoại của phần mềm gửi đến người dùng. Số 0 đầu tiên là flaq (cái này những bài sau bạn sẽ biết), "Rio Blogspot" vẫn là tiêu đề", $text. $text ở đây là dữ liệu mà bạn đã nhập ở khung InputBox ở trên, bạn nhập gì thì hộp thoại sẽ viết vậy.

    II. Download mã nguồn AutoIT
    Trang chủ:
    https://www.autoitscript.com/site/autoit/downloads/

    Xong. Bài viết chỉ ngắn gọn vậy thôi nhưng mình sẽ cung cấp cho bạn một số liên kết để người nào có hứng thì xem cho rõ.

    1. Tại sao AutoIT luôn bị "ghét"? - Juno_okyo's Blog
    2. Ngôn ngữ lập trình là gì ? AutoIT là gì ? AutoIT có phải là ngôn ngữ lập trình virus ? - Quốc Toàn Blog
    3. Cơ bản về AutoIT: Giới thiệu, cài đặt, và hướng dẫn sử dụng AutoIt. - AutoITVN

    RegToolz - Công cụ đăng kí tài khoảng cho game CSFIRED 2.0

    Screenshot:

    Infomation:
    • Công cụ đăng kí tài khoảng cho game CSFIRED 2.0

    Download:
    https://drive.google.com/file/d/0Bw1IL1xtaFUiZXJ4QUVTTHY1MlU/view?usp=sharing

    ImgVert 1.0 - Công cụ chuyển đổi định dạng hình ảnh

    Screenshot:

    Infomation:
    Chức năng:

    • Hỗ trợ chuyển đổi ảnh sang 7 định dạng: BMP, JPG, PNG, GIF, TIF, TGA, PCX (3.0 trở lên)
    • Hỗ trợ hình ảnh: JPG, BMP, PNG (3.0 trở lên)
    • Lưu ảnh đã chuyển đổi vào thư mục ảnh gốc. (3.0 trở lên)


    Download:
    https://drive.google.com/file/d/0Bw1IL1xtaFUiS0RpYzVwMUNsTjQ/view?usp=sharing

    Auto Send Message 1.0 - Gửi text theo thời gian lặp

    Screenshot:

    Infomation:

    • Tool này mình sử dụng các hàm: HotKeySet, Send, Sleep là chủ yếu. 
    Hướng dẫn


    1. Bật tool, nhập text vào, chỉnh thời gian
    2. Qua facebook viết status hoặc vào chat rồi quay lại tool ấn Send.
    3. Sau khi ấn Send rồi thì lập tức quay lại chat facebook để nó auto :v


    Download:
    https://drive.google.com/file/d/0Bw1IL1xtaFUiZl9xNGl3NlFNZWM/view?usp=sharing

    Transparent Window 2.0 - Làm mờ cửa sổ

    Screenshot:

    Infomation:

    • Công cụ làm mờ cửa sổ, y như cách bạn làm với Window Title Change. 
    • Phiên bản 3.0 sẽ tích hợp Windows Finder


    Download:
    https://drive.google.com/file/d/0Bw1IL1xtaFUiNVZFV1VqVm9CSlU/view?usp=sharing

    Shutdown Timer 2.0 - Đếm thời gian tắt máy tính

    Screenshot:

    Infomation:

    • Công cụ tắt máy tính đơn giản cho người lập trình. (1000 = 1s, từ đó tính tới)
    • Nhưng trong tương lai mình sẽ thiết kế phiên bản 3.0 với tính năng thân thiện hơn.


    Download:
    https://drive.google.com/file/d/0Bw1IL1xtaFUiUkpuX1NDTjMyc3M/view?usp=sharing

    Window Title Change 1.0 - Thay đổi tên cửa sổ

    Screenshot:

    Infomation:

    • Đây là một cái tool nhỏ gọn, đơn giản. Hỗ trợ cho các bạn sử dụng công cụ Transparent Window.
    • Trong tương lai mình sẽ update phiên bản 2.0 tích hợp Transparent Windows vào.


    Download:
    https://drive.google.com/file/d/0Bw1IL1xtaFUiVmo1dGM5Q3BtQzA/view?usp=sharing

    Windows Finder - Công cụ lấy thông tin cửa sổ

    Screenshot:

    Infomation:
    • Đây là một cái tool lấy thông tin của một cửa sổ nhỏ gọn. Có nguồn từ forum autoitscript.com

    Download:
    https://drive.google.com/file/d/0Bw1IL1xtaFUiaWdubGZFQzJmQ3M/view?usp=sharing

    xRandom v1.0 - Công cụ tạo số ngẫu nhiên

    Screenshot:

    Information:

    • Đây là một công cụ random số nhỏ gọn, được lấy ý tưởng từ random.org


    Download:
    https://drive.google.com/file/d/0Bw1IL1xtaFUieGFWNURpRWtiWDQ/view?usp=sharing

    AutoIt Detector - Công cụ kiểm tra một file EXE có được viết bằng AutoIT hay không

    Screenshot:

    Information:

    • Như cái tên, đây là công cụ giúp kiểm tra một file .exe có được viết bằng AutoIT hay không. Nhưng nếu không loại trừ khả năng mã hóa code :)) Lúc đó chả kiểm tra được gì đâu.
    • Source là của anh Mạnh Tuấn (Juno_okyo). Mình chỉ đem về thêm GUI thôi.


    Download:
    https://drive.google.com/file/d/0Bw1IL1xtaFUiakFRZmdWWWhMMzg/view?usp=sharing

    Get Coordinates - Công cụ lấy tọa độ con trỏ chuột trên màn hình

    Screenshot:

    Information:

    • Đây là một trong những sản phẩm đầu tay của mình. Vì thế giao diện + chức năng còn hơi bị xấu và không logic lắm.


    Download:
    https://drive.google.com/file/d/0Bw1IL1xtaFUiU2VDU3NHUWhjRWc/view