Viết chương trình sử dụng GUI Đầu tiên, bạn hãy dùng Koda để tạo 1 form như sau đã hướng dẫn sử dụng GUI trong Tut 1 Chương trình này để tự động đăng nhập – giúp thoát khỏi những cặp mắt
Trang 1Version 1.3
NGÔN NGỮ LẬP TRÌNH DÀNH CHO MỌI NGƯỜI !
-designed by Lý Thế Minh – nick : autoboy195 – Y!m : unluckystar_195 borned : 20-2-1995 ^^!
-Time : 10:25PM 5-02-10 (( tut có 34 trang)
Tui sẽ cố trình bày 1 cách dễ hiểu nhất !
TUTORIAL 2 :
VIẾT CHƯƠNG TRÌNH SỬ DỤNG GUI & TRUY XUẤT REGISTRY
I Viết chương trình sử dụng GUI
Đầu tiên, bạn hãy dùng Koda để tạo 1 form như sau (đã hướng dẫn sử dụng GUI trong Tut 1)
(Chương trình này để tự động đăng nhập – giúp thoát khỏi những cặp mắt tò
mò , bạn có tài khoản nào thì tạo tài khoản đấy, không nhất thiết phải 6 tài khoản như của tui )
Nếu bạn không muốn (hoặc không biết sử dụng Koda thế nào) thì hãy copy code sau vào chương trình soạn thảo :
#NoTrayIcon ; Không hiển thị trong thanh System Tray (thanh đồng hồ)
; ~ Tạo GUI
#include <GUIConstants.au3> ; thư viện giao diện
$Main = GUICreate("Auto Tools - by autoboy195", 282, 136, 252, 168) ; tạo form
$Label1 = GUICtrlCreateLabel("Chọn các nơi cần Auto đăng nhập", 8, 8,
260, 18)
Trang 2$Gunnybtton = GUICtrlCreateButton("Logon Gunny", 8, 40, 113, 25, 0) ; tạo button
$Yahoobutton = GUICtrlCreateButton("Logon Yahoo", 160, 40, 105, 25, 0)
$VnZoom = GUICtrlCreateButton("Logon Vn-zoom", 8, 72, 113, 25, 0)
$72ls = GUICtrlCreateButton("Logon 72ls", 160, 72, 105, 25, 0)
$hm = GUICtrlCreateButton("Logon Hocmai", 8, 104, 113, 25, 0)
$vina = GUICtrlCreateButton("Logon Vinaphone", 160, 104, 105, 25, 0)
GUISetState() ; hiện GUI
Các cách tạo gui đã học ở Tut 1, tui không nhắc lại nữa
Các biến đều tạo mà không cần khai báo
Đó là bước 1 – tạo giao diện Bây giờ ta sẽ gắn thêm “thịt” cho nó – viết code
Có giao diện (thui gọi là GUI cho nó nhàn) rùi, bây giờ bạn chạy chương trình, xem có lỗi gì không, nếu không thì làm tiếp
Vì phần này có vẻ “hơi” khó nên tui sẽ chia ra làm nhiều mảng:
(*) Viết code cho nút “Logon Gunny” – hihi, tui cũng chơi gunny mà
+ Tạo nút ấn :
$Gunnybtton = GUICtrlCreateButton("Logon Gunny", 8, 40, 113, 25, 0) Chú thích :
-Cái chỗ $Gunnybtton là biến tạo ra bằng cách không cần khai báo trước Biến này sẽ có nhiệm vụ là “chứa” nút Loggon Gunny
+ Tạo dữ liệu để nạp : Phần này sẽ lưu dữ liệu của bạn như ID và Pass, vì nếu không có dữ liệu sẵn thì chương trình sẽ không thể logon được
Code:
; ~ Khai bao cho Gunny
$gunny_id = "tên đăng nhập của bạn"
$gunny_pwd = "pass của bạn"
Như đã nói ở trên, hai biến trên đều tạo ra mà không cần khai báo
+ Lệnh thực hiện trong nút Logon Gunny : Lệnh này sẽ dc chạy khi nút đó
dc ấn , thực chất là tạo chương trình con – function – hàm
Code:
Func Gunny_logon($gunny_id,$gunny_pwd)
Trang 3WinActivate("Gunny - Login -","")
send($gunny_id) ; Gõ ID
send("{TAB}") ; Chuyển qua Pass
send($gunny_pwd) ; Gõ Pass
send("{TAB}") ; Chuyển qua nút đăng nhập
send("{ENTER}") ; Đăng nhập !
EndFunc
* Lưu ý trong Func, bạn dùng đến biến nào thì phải khai báo biến đó trong
dấu() Vd bạn dùng 2 biến $a và $b trong hàm test Viết như sau
Func test($a,$b)
Đừng quên lưu ý này nhé
* Chú thích chữ màu da cam trong code : (phần này khó giải thích quá)
Trong Tut 1, bạn đã biết WinWaitActive(“tiêu đề cửa sổ”,“”) là một lệnh
để chờ cửa sổ nào đó mở ra khi chạy chương trình Lệnh đó chậm hơn so với lệnh tui tô màu da cam – nghĩa là : Tiêu đề cửa sổ đang chạy
Nếu bạn đang mở word, internet explorer, yahoo, … Khi run chương trình, chương trình chỉ tìm đến ứng dụng nào có tiêu đề chứa nội dung Gunny – Login – mà thôi, còn các ứng dụng khác cũng đang chạy nhưng không có tiêu đề như trên thì cũng bó tay ! Bởi vậy bàn hoàn toàn yên tâm không sợ mất thông tin ^^ (Kể cả bạn mở word hay notepad rùi chạy thì cũng ko có tác dụng , yên tâm không lộ pass )
Có vẻ như tôi giải thích quá khó hỉu ! Bạn hãy xem ví dụ sau là biết ngay
Trình duyệt Explorer
Như bạn thấy tui đang mở 2 chương trình : trình duyệt và explorer Bạn có
để ý thấy tiêu đề của trình duyệt không ? Có dòng Gunny – Login – đúng không nào Bây giờ thu nhỏ cả 2 chương trình đó lại (nút dấu – trên tiêu đề cửa sổ ý), chạy chương trình thì ngay lập tức, trình duyệt dc bật lên và auto logon !
Kể cả khi bạn dùng FireFox hoặc Opera … đều được ! ^^
Tui nói “chạy” chứ không phải bạn thực hành lun nhá ! Vì đã có code hoàn chỉnh đâu mà chạy dc !??
[?] Tại sao phải đề dấu - ở cuối chữ Login vậy ???
Đó là dấu gạch nối, sau dấu đó là tên trình duyệt , vì ta muốn chương trình
chạy trên mọi trình duyệt nên phải làm như vậy !
Trang 4Phù !! … Nếu đã hỉu thì hãy đọc tiếp
Vậy là ta đã có 3 yếu tố : Dữ liệu cần nạp, nút ấn và lệnh thực hiện
Bây giờ chỉ còn yếu tố thứ 4 : kiểm tra xem nút đó dc ấn hay không ? nếu ấn
thì gọi lệnh thực hiện lên
Bước đầu tiên là kiểm tra xem có sự kiện nào xảy ra trên GUI không
(sự kiện : là những thao tác diễn ra trên GUI )
Có 2 cách :
Cách 1 : Dùng vòng lặp while … wend (hẳn bạn còn nhớ cấu trúc này chứ)
while 1 ; Cấu trúc form ko tự mất đi !
$sukien = GUIGetMsg() ; Ghi nhận sự kiện xảy ra trên form
Switch $sukien ; Lựa chọn với các sự kiện
case $GUI_EVENT_CLOSE ; Nếu ấn close button thì
MsgBox(0,"AutoSimple - v1.0.0","Cảm ơn bạn đã sử dụng chương trình ! - Thoát sau 3s") ExitLoop ; Thoát vòng lặp
Exit ; Thoát
case $Gunnybtton ; Nếu sự kiện là khi user ấn nút Logon Gunny ( bằng với tham số trong biến
$Gunnybtton)
Gunny_logon($gunny_id,$gunny_pwd);,$tieu_de) ; Thì gọi chương trình Logon Gunny lên
case $Yahoobutton ; Nếu ấn Logon Yahoo
Yahoo_logon($ym_id,$ym_pwd);,$tieu_de) ; Thì gọi Yahoo Logon lên
EndSwitch
WEnd
• Chú thích code :
while 1 : xem thêm trong Tut 1, có nghĩa là vòng lặp vô tận ! Nếu là số 0 thì
là dừng hẳn vòng lặp
$sukien = GUIGetMsg() ; Ghi nhận sự kiện xảy ra trên form, ở đây biến
$sukien được tạo ko cần khai báo, GUIGetMsg() là một hàm để kiểm tra
xem có sự kiện nào xảy ra trên GUI không
$GUI_EVENT_CLOSE : Là 1 hàm khi user ấn nút Close trên cửa sổ
$Gunnybtton : nút Logon Gunny có biến đại diện là $Gunnybtton, vì vậy ta
thao tác với nút cũng chính là thao tác với biến đại diện
$Yahoobutton : giải thích tương tự như trên
Trong vòng lặp trên, có 3 sự lựa chọn (cấu trúc Switch Case)
- Khi user ấn nút Close : thì thoát chương trình
- Khi ấn nút Logon Gunny : thì chạy hàm đăng nhập Gunny
- Khi ấn nút Logon yahoo : thì chạy hàm đăng nhập Yahoo
Trang 5Hàm đăng nhập yahoo chỉ là ví dụ tôi cho vào, nếu copy y nguyên code trên
và chạy sẽ báo lỗi Nếu muốn có hàm này, copy code sau vào:
; ~ Khai bao cho Yahoo
$ym_id = "tên đăng nhập yahoo của bạn"
$ym_pwd = "mật khẩu yahoo của bạn"
;; * Logon Yahoo!
Func Yahoo_logon($ym_id,$ym_pwd)
WinActivate("Yahoo! Messenger")
send($ym_id) ; Gõ ID
send("{TAB}") ; TAB
send($ym_pwd) ; Gõ Pass
send("{TAB}{TAB}{TAB}{TAB}{ENTER}") ; TAB 4 lần rồi đăng nhập !
EndFunc
Bạn có thể cho các code vào từng phần, ví dụ phần FUNC, phần KHAI BÁO
Đây là toàn bộ code
#NoTrayIcon ; Không hiển thị trong thanh System Tray (thanh đồng hồ)
; ~ Tạo GUI
#include <GUIConstants.au3> ; thư viện giao diện
$Main = GUICreate("Auto Tools - by autoboy195", 282, 136, 252, 168) ; tạo form
$Label1 = GUICtrlCreateLabel("Chọn các nơi cần Auto đăng nhập", 8, 8,
260, 18)
$Gunnybtton = GUICtrlCreateButton("Logon Gunny", 8, 40, 113, 25, 0) ; tạo button
$Yahoobutton = GUICtrlCreateButton("Logon Yahoo", 160, 40, 105, 25, 0)
$VnZoom = GUICtrlCreateButton("Logon Vn-zoom", 8, 72, 113, 25, 0)
$72ls = GUICtrlCreateButton("Logon 72ls", 160, 72, 105, 25, 0)
$hm = GUICtrlCreateButton("Logon Hocmai", 8, 104, 113, 25, 0)
$vina = GUICtrlCreateButton("Logon Vinaphone", 160, 104, 105, 25, 0)
; KHAI BÁO
; ~ Khai bao cho Gunny
$gunny_id = "tên đăng nhập của bạn"
$gunny_pwd = "pass của bạn"
; ~ Khai bao cho Yahoo
$ym_id = "tên đăng nhập yahoo của bạn"
Trang 6$ym_pwd = "mật khẩu yahoo của bạn"
; CHƯƠNG TRÌNH CHÍNH
while 1 ; Cấu trúc form ko tự mất đi !
$sukien = GUIGetMsg() ; Ghi nhận sự kiện xảy ra trên form
Switch $sukien ; Lựa chọn với các sự kiện
case $GUI_EVENT_CLOSE ; Nếu ấn close button thì
MsgBox(0,"AutoSimple - v1.0.0","Cảm ơn bạn đã sử dụng chương trình ! - Thoát sau 3s")
ExitLoop ; Thoát vòng lặp
Exit ; Thoát
case $Gunnybtton ; Nếu sự kiện là khi user ấn nút Logon Gunny ( bằng với tham số trong biến $Gunnybtton)
Gunny_logon($gunny_id,$gunny_pwd);,$tieu_de) ; Thì gọi chương trình Logon Gunny lên
case $Yahoobutton ; Nếu ấn Logon Yahoo
Yahoo_logon($ym_id,$ym_pwd);,$tieu_de) ; Thì gọi Yahoo Logon lên EndSwitch
Wend
;FUNC
;;* Logon Gunny
Func Gunny_logon($gunny_id,$gunny_pwd)
WinActivate("Gunny - Login -","")
send($gunny_id) ; Gõ ID
send("{TAB}") ; Chuyển qua Pass
send($gunny_pwd) ; Gõ Pass
send("{TAB}") ; Chuyển qua nút đăng nhập
send("{ENTER}") ; Đăng nhập !
EndFunc
;; * Logon Yahoo!
Func Yahoo_logon($ym_id,$ym_pwd)
WinActivate("Yahoo! Messenger")
send($ym_id) ; Gõ ID
send("{TAB}") ; TAB
send($ym_pwd) ; Gõ Pass
send("{TAB}{TAB}{TAB}{TAB}{ENTER}") ; TAB 4 lần rồi đăng nhập !
Trang 7; … thêm code ở đây
Ấn F5 vận hành thử Trông dài vậy thôi nhưng đều rất đơn giản Bạn có thể chỉnh sửa code cho gọn hơn
Cách 2:
GUI Events – Sự kiện trên GUI
1 Khai báo
#include <GUIConstantsEx.au3>
Opt("GUIOnEventMode", 1) ; Chuyển sang chế độ On Event (1)
(1) Chế độ xử lí thao tác trong GUI, GUIGetMsg() sẽ ko dùng dc nữa !
*Lưu ý : Bạn phải tạo Gui trước ! có GUI mới dùng dc phần này (xem phần trên)
2 Viết code
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")
; Nếu user ấn Close thì gọi hàm CLOSEClicked bên dưới
Func CLOSEClicked()
Exit
EndFunc
Chú thích :
- GUISetOnEvent : sự kiện trong gui
- $GUI_EVENT_CLOSE : sự kiện khi ấn nút Close
Đó là code cơ bản, bây h ta sẽ nâng cao hơn
Đầu tiên, tạo 1 Gui đã:
;~ KHAI BÁO
#include <GUIConstantsEx.au3>
Opt("GUIOnEventMode", 1) ; Chuyển sang chế độ On Event
$mainwindow = GUICreate("Hello World", 200, 100) ; Tạo GUI
$okbutton = GUICtrlCreateButton("OK", 70, 50, 60) ; Tạo nút tên OK
; Nút OK được chứa trong biến $okbutton nên ta thao tác với biến cũng như thao tác với nút
GUISetState() ; show GUI
;~ MAIN
GUICtrlSetOnEvent($okbutton, "OKButton") ; xem chú thích
Func OKButton()
MsgBox(0, "GUI Event", "Bạn đã ấn OK")
Exit
EndFunc
Trang 8Chú thích :
GUICtrlSetOnEvent($okbutton, "OKButton")
Ta phân tích :
GUI = Giao diện
Ctrl = Control (các công cụ trên gui, ở đây là button)
SetOnEvent = Thiết đặt sự kiện
Nghĩa là Thiết đặt sự kiện của control trên GUI
Ở đây, sự kiện của button chính là khi user ấn nút, nếu thao tác này được thực hiện thì hàm OKButton được chạy Ta có CT tổng quát :
Tên biến chứa nút : $a = GUICtrlCreatButton(… )
Biến chứa nút là $a, trong code trên thì biến chứa nút là $okbutton
Code tổng quát của cách 2:
#include <GUIConstantsEx.au3>
;~ GUI
Opt("GUIOnEventMode", 1)
; Make Control
$mainwindow = GUICreate("title",width,height,left,top)
$name_button = GUICtrlCreateButton("text",left,top,width,height)
; more controls …
GUISetState() ; show GUI
;~ MAIN
GUICtrlSetOnEvent($name_button, "func1")
;~ FUNC
; Func 1
Func func1()
; code here
End Func
; more func here …
; Giữ cho ct ko bị thoát ^^
While 1
Sleep(1000)
wend
Bạn có thấy code gọn hơn rất nhiều ko ? Hjx, cách diễn đạt hơi dài nhưng nó ứng dụng khá nhìu trong các soft về GUI
Trang 9Ví dụ mẫu : Lập trình 1 soft có GUI tương tác với người dùng (kich thước
tùy ý), có 3 nút ấn, tên lần lượt là nút1, nút2, nút3 Khi ấn từng nút thì từng lệnh trong nút dc thực hiện
CODE
#include <GUIConstantsEx.au3>
;~ = GUI =
Opt("GUIOnEventMode", 1)
; Make Control
$mainwindow = GUICreate("Vi du", 193, 151, 192, 124)
$Button1 = GUICtrlCreateButton("nut1", 16, 8, 161, 33)
$Button2 = GUICtrlCreateButton("nut2", 16, 56, 161, 33)
$Button3 = GUICtrlCreateButton("nut3", 16, 104, 161, 33)
; more controls …
GUISetState() ; show GUI
;~ = MAIN =
GUICtrlSetOnEvent($button1,"func1")
GUICtrlSetOnEvent($button2,"func2")
GUICtrlSetOnEvent($button3,"func3")
;~ FUNC
Func func1()
MsgBox(0,"","You click nut1")
EndFunc
Func func2()
MsgBox(0,"","You click nut2")
EndFunc
Func func3()
MsgBox(0,"","You click nut3")
Exit
EndFunc
while 1
Sleep(1000)
WEnd
;Expand
;GUICreate("title",width,height,left,top)
;GUICtrlCreateButton("text",left,top,width,height)
Trang 10Giao diện của code trên !
Với phần này cực kì đơn giản luôn ^^
Tạo 1 Key trong registry, nếu có rùi thì ghi đè lên
$duong_dan = "c:\windows\vidu.exe"
RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Windows\Curre ntVersion\Run","Protecter","REG_SZ",$duong_dan) ; ghi vào REG
MsgBox(0,"","xong")
Chữ màu xanh : câu lệnh tạo 1 key trong Reg
Chữ màu cam : đường dẫn của Key
Chữ màu tím : Tên Key cần tạo
Chữ màu nâu : Kiểu dữ liệu
REG_SZ : chuỗi – string
REG_BINARY : kiểu nhị phân
REG_DWORD : kiểu 0 và 1 (True False)
Chữ màu đen : text trong key đó (ở đây key có kiểu dữ liệu là chuỗi)
Giả sử biến $duong_dan = "c:\windows\vidu.exe"
Chạy thử ^^
Key mới đã dc tạo !
Trang 11Giá trị của Key mới tạo !
Xóa 1 key trong registry
RegDelete("HKEY_CURRENT_USER\Software\Microsoft\Windows\C
urrentVersion\Run","Protecter") ; xoa trong REG
Chữ màu xanh : Câu lệnh xóa 1 Key
Chữ màu cam : đường dẫn Key
Chữ màu tím : Tên Key
Đọc 1 Key trong Registry
RegRead ( "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run ", " Protecter " )
Chữ màu xanh : Lệnh đọc Key
Chữ màu cam : Tên Key
Chữ màu tím : Tên giá trị trong key