Professional Documents
Culture Documents
Lớp 11C1 trường THPT Đăk Nông (Thị xã Gia Nghĩa - Đ ăk Nông)
Địa chỉ nhà : Thôn 1, thị trấn Đăk Mâm Huyện Krông Nô Tỉnh Đắk Nông
Tự hào ghê cái Logo của cuốn sách mình thiết kế bằng ... Word và Paint đấy. Nhìn vô cũng
chuyên nghiệp đấy chứ
Lời nói đầu
Sau khi “Xuất bản” cuốn “Chiêu thức lập trình” mình quả thật rất buồn vì chẳng có lấy một lời
động viên từ bất kỳ ai (Ở Đăk Nông này mình có biết ai mà khoe) còn anh em ở việt nam nét thì
chẳng đoái hoài gì cả vì vậy mình đã thật sự nản, để cuối cùng sau một sự cố nghề nghiệp phiên
bản Chiêu thức lập trình phiên bản 2 mình viết gần hoàn thành bỗng tan vào sương khói mình đã
tuyệt vọng. Nhưng mới hồi sáng khi mình “Viếng” www.caulacbovb.com một diễn đàn mình tham
gia từ khá lâu nhưng không mấy quan tâm mình đã thấy cuốn sách này được chia sẽ trên đó,
cùng với đó là lời khen của một nhân vật mình không nhớ tên đã làm mình rất vui, vì mình đã
nhận ra mình cũng được công nhận dù chỉ một chút. Cuốn Chiêu thức lập trình lần này sẽ được
nâng cấp lên với nhiều chiêu thức và hình vẽ minh hoạ để giúp các bạn nâng cao kiến thức.
Lời cầu cứu : Do từ năm lớp 9 đến nay mình chỉ tập trung vào học lập trình (Mà lại toàn tự học)
nên hiện nay đệ đã học sút rất nhiều nguy cơ rớt đại học ngày một đến gần mà ước mơ lớn nhất
của đời đệ là đậu vào khoa Công Nghệ Thông Tin Đại học Bách Khoa Hồ Chí Minh đệ mong
rằng có huynh nào đã từng phải nếm trải cảnh thi đại học thì chia sẻ kinh nghiệm học, học sách
gì ... Còn nếu có sách vở (Cũ cũng được) không cần dùng tới nhưng tốt để ôn thi đại học thì chia
sẽ cho đệ. Nếu có huynh nào có lòng “Hảo tâm” hãy gửi đến địa chỉ : (Đây là địa chỉ cô giáo dạy
Tin của trường đệ vào hết năm học này có thể thay đổi)
Phạm Thị Loan giáo viên trường Trung Học Phổ Thông Đăk Nông, xin ghi rõ là nhở gửi cho em
Lê Nguyên Dũng lớp 11C1
Cuốn sách này là cuốn sách hoàn toàn miễn phí để chia sẽ trong cộng đồng lập trình nên nếu có
ai múôn sử dụng để in sách thì cũng nên ghi rõ xuất sứ.
Trong sách tôi xin chỉ rõ xuất xứ, mong rằng các ban cũng sẽ tôn trong 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ợ.
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 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.com
Binh khí sử dụng : Một Picture và một CommandButton
Đoạn mã :
Option Explicit
'Declarations
Dim StartTime(100) 'Starttime of a up/down
movement
Dim DownMovement(100) As Boolean 'are we doing a up or down
movement ???
Dim MoveDistance As Double 'distance target has moved
since the start of the movement
Dim YPos(100) As Double 'Holds the y position of a
letter
Dim MovementDone(100) As Boolean 'Is set to true when a up /
down movement is completed
Dim StartHeight(100) As Double 'From which hight will
the letter fall down ?
Dim UpMovementTime(100) As Double 'How long will it the
letter take to move up
Dim PowerLoss(100) As Double 'losing xx% of power
when touching the ground
Dim Message As String 'Message you want to display
Dim Looop As Integer 'Loop var
Dim TextColor(100) As ColorConstants 'Color of one letter
'Settings
picture1.ScaleMode = 4
picture1.FontName = "Courier New"
Message = "Ohh my god ! It's raining letters today !!! Contact me:
overkillpage@gmx.net" 'Message you want to display
Next Looop
Do
Else
MoveDistance = (StartHeight(Looop) + (0.5 * 9.81 *
(UpMovementTime(Looop) - (Timer - StartTime(Looop))) ^ 2)) 'Calculating
falling distance
End If
YPos(Looop) = MoveDistance
picture1.CurrentX = picture1.ScaleWidth / 2 -
Int((Len(Message) / 2)) + Looop
picture1.CurrentY = YPos(Looop)
'Setting the letters y position
picture1.ForeColor = TextColor(Looop)
'Setting the letters color
picture1.Print Mid(Message, Looop, 1)
'Text picture1put
Next Looop
DoEvents
Next Looop
End Sub
For l = 1 To Len(TXT)
Letters(l) = Mid(TXT, l, 1)
Next
Timer2.Enabled = True
End Sub
End Sub
End If
End Sub
TEXTT = lblText
Timer1.Enabled = True
Timer2.Enabled = False
HERE:
Timer2.Enabled = False
End 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.com
Binh khí sử dụng : Chỉ cần một cái Form
Đoạn mã :
- 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
Xuất xứ : www.pscode.com
Binh khí sử dụng : Chỉ cần một cái Form, trong form c ó s ẵn h ình n ền (Màu đen sẽ là màu chỉ
định trong suốt)
Đoạn mã : Bản thân đoạn mã này cũng có thêm một vài chức năng ngoài nhưng đều rất thích
hợp cho 1 ứng dụng
Option Explicit
Private Declare Function ReleaseCapture Lib "user32" () As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA"
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam
As Any) 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 Const HWND_TOPMOST = -1
Private Const SWP_NOMOVE = &H2
Private Const SWP_NOSIZE = &H1
Private Const Flags = SWP_NOMOVE Or SWP_NOSIZE
'Transparency Function
'I copied this from Robert Gainor's Example
Private Function MakeTransparent(ByRef Frm As Form, ByVal
TransparentColor As Long) As Long
Dim rgnMain As Long, rgnPixel As Long, bmpMain As Long, dcMain As Long
Dim Width As Long, Height As Long, X As Long, Y As Long
Dim ScaleSize As Long, RGBColor As Long
ScaleSize& = Frm.ScaleMode
Frm.ScaleMode = 3
Frm.BorderStyle = 0
Width& = Frm.ScaleX(Frm.Picture.Width, vbHimetric, vbPixels)
Height& = Frm.ScaleY(Frm.Picture.Height, vbHimetric, vbPixels)
Frm.Width = Width& * Screen.TwipsPerPixelX
Frm.Height = Height& * Screen.TwipsPerPixelY
rgnMain& = CreateRectRgn(0&, 0&, Width&, Height&)
dcMain& = CreateCompatibleDC(Frm.hDC)
bmpMain& = SelectObject(dcMain&, Frm.Picture.Handle)
For Y& = 0& To Height&
For X& = 0& To Width&
RGBColor& = GetPixel(dcMain&, X&, Y&)
If RGBColor& = TransparentColor& Then
rgnPixel& = CreateRectRgn(X&, Y&, X& + 1&, Y& + 1&)
CombineRgn rgnMain&, rgnMain&, rgnPixel&, RGN_XOR
DeleteObject rgnPixel&
End If
Next X&
Next Y&
SelectObject dcMain&, bmpMain&
DeleteDC dcMain&
DeleteObject bmpMain&
If rgnMain& <> 0& Then
SetWindowRgn Frm.hwnd, rgnMain&, True
MakeTransparent = rgnMain&
End If
Frm.ScaleMode = ScaleSize&
End Function
'Form Code
Private Sub Form_Load()
Call FormOnTop(Me)
Call CenterForm(Me)
Call MakeTransparent(Me, CLng(0))
End Sub
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private 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
Picture1.ScaleMode = vbPixels
w = Picture1.ScaleWidth
h = Picture1.ScaleHeight
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.com
Binh khí sử dụng : Chẳng cần gì ta chỉ cần tay không bắt hổ
Đoạn mã :
Đô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.net
Binh khí sử dụng : Cần một cái Module
Đoạn mã :
Trong Module :
Public Const DT_CENTER = &H1
Public Const DT_WORDBREAK = &H10
Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Declare 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 Long
Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal
nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As
Long
Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal
nIDEvent As Long) As Long
Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As
Integer
Declare Function SetRect Lib "user32" (lpRect As RECT, ByVal X1 As
Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Global Cnt As Long, sSave As String, sOld As String, Ret As String
Dim Tel As Long
Function GetPressedKey() As String
For Cnt = 32 To 128
If GetAsyncKeyState(Cnt) <> 0 Then
GetPressedKey = Chr$(Cnt)
Exit For
End If
Next Cnt
End Function
Sub 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 If
End Sub
Trong Form :
Private Sub Form_Load()
Me.Caption = "Key Spy"
SetTimer Me.hwnd, 0, 1, AddressOf TimerProc
End Sub
Private 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 Sub
Private Sub Form_Resize()
Form_Paint
End Sub
Private Sub Form_Unload(Cancel As Integer)
KillTimer Me.hwnd, 0
MsgBox sSave
End 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 Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA"
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private 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&
Loop
End 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.net
Binh 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 Long
Declare Function DefWindowProc Lib "user32" _
Alias "DefWindowProcA" (ByVal hwnd As Long, _
ByVal wMsg As Long, ByVal wParam As Long, _
ByVal lParam As Long) As Long
Public Const WM_SETHOTKEY = &H32
Public Const WM_SHOWWINDOW = &H18
Public Const HK_SHIFTA = &H141 'Shift + A
Public Const HK_SHIFTB = &H142 'Shift * B
Public Const HK_CONTROLA = &H241 'Control + A
Public Const HK_ALTZ = &H45A
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
Binh khí sử dụng : Tương đối nhiều
Đoạn mã :
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
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 Explicit
Private gInTray As Boolean
Private gTrayId As Long
Private gTrayTip As String
Private gTrayHwnd As Long
Private gTrayIcon As StdPicture
Private gAddedToTray As Boolean
Const MAX_SIZE = 510
'-------------------------------------------------------
Private Sub UserControl_Initialize()
'-------------------------------------------------------
gInTray = defInTray
gAddedToTray = False
gTrayId = 0
gTrayHwnd = hwnd
'-------------------------------------------------------
End Sub
'-------------------------------------------------------
'-------------------------------------------------------
Private Sub UserControl_InitProperties()
'-------------------------------------------------------
InTray = defInTray
TrayTip = defTrayTip
Set TrayIcon = Picture
'-------------------------------------------------------
End Sub
'-------------------------------------------------------
'-------------------------------------------------------
Private Sub UserControl_Paint()
'-------------------------------------------------------
Dim edge As RECT
'-------------------------------------------------------
edge.Left = 0
edge.Top = 0
edge.Bottom = ScaleHeight
edge.Right = ScaleWidth
DrawEdge hDC, edge, BDR_RAISEDOUTER, BF_RECT Or BF_SOFT
'-------------------------------------------------------
End Sub
'-------------------------------------------------------
'-------------------------------------------------------
Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
'-------------------------------------------------------
With PropBag
InTray = .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, gTrayTip
End With
'-------------------------------------------------------
End Sub
'-------------------------------------------------------
'-------------------------------------------------------
Private Sub UserControl_Resize()
'-------------------------------------------------------
Height = MAX_SIZE
Width = MAX_SIZE
'-------------------------------------------------------
End Sub
'-------------------------------------------------------
'-------------------------------------------------------
Private Sub UserControl_Terminate()
'-------------------------------------------------------
If InTray Then
InTray = False
End If
'-------------------------------------------------------
End Sub
'-------------------------------------------------------
'-------------------------------------------------------
Public Property Set TrayIcon(Icon As StdPicture)
'-------------------------------------------------------
Dim Tray As NOTIFYICONDATA
Dim rc As Long
'-------------------------------------------------------
If Not (Icon Is Nothing) Then
If (Icon.Type = vbPicTypeIcon) Then
If gAddedToTray Then
Tray.uID = gTrayId
Tray.hwnd = gTrayHwnd
Tray.hIcon = Icon.Handle
Tray.uFlags = NIF_ICON
Tray.cbSize = Len(Tray)
rc = Shell_NotifyIcon(NIM_MODIFY, Tray)
End If
'-------------------------------------------------------
Public Property Get TrayIcon() As StdPicture
'-------------------------------------------------------
Set TrayIcon = gTrayIcon
'-------------------------------------------------------
End Property
'-------------------------------------------------------
'-------------------------------------------------------
Public Property Let TrayTip(Tip As String)
'-------------------------------------------------------
Dim Tray As NOTIFYICONDATA
Dim rc As Long
'-------------------------------------------------------
If gAddedToTray Then
Tray.uID = gTrayId
Tray.hwnd = gTrayHwnd
Tray.szTip = Tip & vbNullChar
Tray.uFlags = NIF_TIP
Tray.cbSize = Len(Tray)
rc = Shell_NotifyIcon(NIM_MODIFY, Tray)
End If
gTrayTip = Tip
PropertyChanged 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) Then
If Show Then
If Ambient.UserMode Then
PrevWndProc = SetWindowLong(gTrayHwnd, GWL_WNDPROC, AddressOf SubWndProc)
'-------------------------------------------------------
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 NOTIFYICONDATA
Dim tFlags As Long
Dim rc As Long
'-------------------------------------------------------
Tray.uID = Id
Tray.hwnd = hwnd
Tray.uCallbackMessage = TRAY_CALLBACK
Tray.uFlags = Tray.uFlags Or NIF_MESSAGE
Tray.cbSize = Len(Tray)
rc = Shell_NotifyIcon(NIM_ADD, Tray)
'-------------------------------------------------------
End Sub
'-------------------------------------------------------
'-------------------------------------------------------
Private Sub DeleteIcon(hwnd As Long, Id As Long)
'-------------------------------------------------------
Dim Tray As NOTIFYICONDATA
Dim rc As Long
'-------------------------------------------------------
Tray.uID = Id
Tray.hwnd = hwnd
Tray.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 MouseEvent
Case WM_MOUSEMOVE
RaiseEvent MouseMove(Id)
Case WM_LBUTTONDOWN
RaiseEvent MouseDown(vbLeftButton, Id)
Case WM_LBUTTONUP
RaiseEvent MouseUp(vbLeftButton, Id)
Case WM_LBUTTONDBLCLK
RaiseEvent MouseDblClick(vbLeftButton, Id)
Case WM_RBUTTONDOWN
RaiseEvent MouseDown(vbRightButton, Id)
Case WM_RBUTTONUP
RaiseEvent MouseUp(vbRightButton, Id)
Case WM_RBUTTONDBLCLK
RaiseEvent 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
Đô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
lfHeight As Long
lfWidth As Long
lfEscapement As Long
lfOrientation As Long
lfWeight As Long
lfItalic As Byte
lfUnderline As Byte
lfStrikeOut As Byte
lfCharset As Byte
lfOutPrecision As Byte
lfClipPrecision As Byte
lfQuality As Byte
lfPitchAndFamily As Byte
lfFaceName(1 To LF_FaceSize) As Byte
End Type
cbSize As Long
iBorderWidth As Long
iScrollWidth As Long
iScoolHeight As Long
iCaptionWidth As Long
iCaptionHeight As Long
iSMCaptionWidth As Long
iSMCaptionHeight As Long
lfCaptionFont As LOGFONT
iMenuWidth As Long
iMenuHeight As Long
lfMenuFont As LOGFONT
lfStatusFont As LOGFONT
lfMessageFont As LOGFONT
End Type
Const SPI_SetNonClientMetrics = 42
Const SPI_GettNonClientMetrics = 41
'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 = -13
Private Const VNI_FontWeight = 700
Private Const VNI_FontName = "VNI-Palatin"
Private Const VNI_FontLen = 11 `Len(VNI_FontName)
Dim I As Integer
Dim VarGT As Long
Dim VarHeight As Long
Dim VarWeight As Long
Dim VarStr As String
FontMetric.cbSize = REG_StructureSize
OldFontMetric =FontMetric
FontMetric.lfCaptionFont.lfHeight = VNI_FontHeight
FontMetric.lfCaptionFont.lfWeight = VNI_FontWeight
VarStr = VNI_FontName
For I=1 To LF_FaceSize
If I <= VNI_FontLen Then
FontMetric.lfCaptionFont.lfFaceName(I)= CByte(Asc(Mid(VarStr,I,1)))
FontMetric.lfMenuFont.lfFaceName(I)= CByte(Asc(Mid(VarStr,I,1)))
Else
FontMetric.lfCaptionFont.lfFaceName(I) = 0
FontMetric.lfMenuFont.lfFaceName(I) = 0
End If
Next I
VarGT= SystemParametersInfo
(SPI_SetNonClientMetrics, REG_StructureSize, FontMetric,0)
End 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ên
Private Sub Form_UnLoad(Cancel As Integer)
RestoreFont
End
End 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ã :
'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ọ
Dim Ret&
Dim lphKey&
Dim Path As String
Path = App.Path
If Right(Path, 1) <> "\" Then
Path = 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ạn
sKeyName = ".mp3"
sKeyValue = "Khunglongbeo"
Ret& = RegCreateKey&(HKEY_CLASSES_ROOT, sKeyName, lphKey&)
Ret& = RegSetValue&(lphKey&, "", REG_SZ, sKeyValue, 0&)
sKeyName = "Khunglongbeo"
sKeyValue = Path & "Khunglongbeo.exe %1"
Ret& = RegCreateKey&(HKEY_CLASSES_ROOT, sKeyName, lphKey&)
Ret& = RegSetValue&(lphKey&, "shell\open\command", REG_SZ, _
sKeyValue, MAX_PATH)
'Đổi Icon
SHChangeNotify 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_Thong
End Sub
Đoạn mã :
‘ 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 thiet
Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal
X As Long, ByVal Y As Long) As Long
Private 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 Long
Dim j As Long
Dim Mang1() As Long
Dim Mang2() As Long
Dim Co As Integer
''Chuyen tung anh sang che do pixels
lpHinh1.ScaleMode = vbPixels
lpHinh2.ScaleMode = vbPixels
Co = 0
''Duyet gia tri cho tung pixel anh
ReDim Mang1(lpHinh1.Width, lpHinh1.Height) As Long
For i = 0 To lpHinh1.Width 1
For j = 0 To lpHinh1.Height 1
''Luu tung gia tri pixel vao trong Mang1
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 j
Next i
''Doan ma nay giong ma tren dung de xu li anh 2
ReDim Mang2(lpHinh2.Width, lpHinh2.Height) As Long
For 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 j
Next i
''So sanh tung pixel tu hai mang trung gian
On Error Resume Next
If (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 If
Else
For 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 If
End If
End Sub
Private Sub CmdSS_Click()
Call So_Sanh(Pic1, Pic2)
End Sub
Private Sub Form_Load()
On Error Resume Next
'Doi voi picture1
Picture1.Name = "Pic1"
Picture1.AutoRedraw = True
Picture1.AutoSize = True
Picture1.Appearance = True
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 = "VNIPalatin"
Command1.Caption = "So sánh"
''Doi voi form
Me.AutoRedraw = True
Me.ScaleMode = vbPixels
End 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ã :
'*********************************************************************'
Danh sách các Ports trong máy
Public Function TrimStr(strName As String) As String
Dim x As Integer
x = InStr(strName, vbNullChar)
If x > 0 Then TrimStr = Left(strName, x - 1) Else TrimStr = strName
End Function
Public Function LPSTRtoSTRING(ByVal lngPointer As Long) As String
Dim lngLength As Long
lngLength = lstrlenW(lngPointer) * 2
LPSTRtoSTRING = String(lngLength, 0)
CopyMem ByVal StrPtr(LPSTRtoSTRING), ByVal lngPointer, lngLength
LPSTRtoSTRING = TrimStr(StrConv(LPSTRtoSTRING, vbUnicode))
End Function
Public Function GetAvailablePorts(ServerName As String) As Long
Dim ret As Long
Dim PortsStruct(0 To 100) As API_PORT_INFO_2
Dim pcbNeeded As Long
Dim pcReturned As Long
Dim TempBuff As Long
Dim i As Integer
ret = EnumPorts(ServerName, 2, TempBuff, 0, pcbNeeded, pcReturned)
TempBuff = HeapAlloc(GetProcessHeap(), 0, pcbNeeded)
ret = EnumPorts(ServerName, 2, TempBuff, pcbNeeded, pcbNeeded,
pcReturned)
If ret Then
CopyMem PortsStruct(0), ByVal TempBuff, pcbNeeded
For i = 0 To pcReturned - 1
Ports(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).fPortType
Next
End If
GetAvailablePorts = pcReturned
If TempBuff Then HeapFree GetProcessHeap(), 0, TempBuff
End Function
Private Sub Lay_Ports()
Dim NumPorts As Long
Dim i As Integer
NumPorts = GetAvailablePorts("")
Me.Print "Daùnh saùch caùc Port hieän taïi"
For i = 0 To NumPorts - 1
Me.Print Ports(i).pPortName
Next
End Sub
'*********************************************************************'
Thôngt tin về tình trạng mạng và thông số card mạng
Private Sub Lay_Adepter()
Dim error As Long
Dim FixedInfoSize As Long
Dim AdapterInfoSize As Long
Dim i As Integer
Dim PhysicalAddress As String
Dim NewTime As Date
Dim AdapterInfo As IP_ADAPTER_INFO
Dim Adapt As IP_ADAPTER_INFO
Dim AddrStr As IP_ADDR_STRING
Dim FixedInfo As FIXED_INFO
Dim Buffer As IP_ADDR_STRING
Dim pAddrStr As Long
Dim pAdapt As Long
Dim Buffer2 As IP_ADAPTER_INFO
Dim FixedInfoBuffer() As Byte
Dim AdapterInfoBuffer() As Byte
FixedInfoSize = 0
error = GetNetworkParams(ByVal 0&, FixedInfoSize)
If error <> 0 Then
If error <> ERROR_BUFFER_OVERFLOW Then
Me.Print "GetNetworkParams sizing failed with error " & error
Exit Sub
End If
End If
ReDim FixedInfoBuffer(FixedInfoSize - 1)
AdapterInfoSize = 0
error = GetAdaptersInfo(ByVal 0&, AdapterInfoSize)
If error <> 0 Then
If error <> ERROR_BUFFER_OVERFLOW Then
Me.Print "GetAdaptersInfo sizing failed with error " & error
Exit Sub
End If
End If
ReDim AdapterInfoBuffer(AdapterInfoSize - 1)
Next
Me.Print "Physical Address: " & PhysicalAddress 'mac address
If Buffer2.DhcpEnabled Then
Me.Print "DHCP Enabled "
Else
Me.Print "DHCP disabled"
End If
pAddrStr = Buffer2.IpAddressList.Next
Do While pAddrStr <> 0
CopyMemory Buffer, Buffer2.IpAddressList, LenB(Buffer)
Me.Print "IP Address: " & Buffer.IpAddress
Me.Print "Subnet Mask: " & Buffer.IpMask
pAddrStr = Buffer.Next
If pAddrStr <> 0 Then
CopyMemory Buffer2.IpAddressList, ByVal pAddrStr,
Len(Buffer2.IpAddressList)
End If
Loop
Me.Print "Default Gateway: " & Buffer2.GatewayList.IpAddress
pAddrStr = Buffer2.GatewayList.Next
Do While pAddrStr <> 0
CopyMemory Buffer, Buffer2.GatewayList, Len(Buffer)
Me.Print "IP Address: " & Buffer.IpAddress
pAddrStr = Buffer.Next
If pAddrStr <> 0 Then
CopyMemory Buffer2.GatewayList, ByVal pAddrStr, Len(Buffer2.GatewayList)
End If
Loop
NewTime = CDate(Adapt.LeaseObtained)
Me.Print "Lease Obtained: " & CStr(NewTime)
NewTime = CDate(Adapt.LeaseExpires)
Me.Print "Lease Expires : " & CStr(NewTime)
pAdapt = Buffer2.Next
If pAdapt <> 0 Then
CopyMemory AdapterInfo, ByVal pAdapt, Len(AdapterInfo)
End If
Loop
End Sub
Private Sub Form_Load()
Me.Font = "VNI-Palatin"
Me.AutoRedraw = True
Ten_Card_ManHinh
Ten_Cac_May_In
Ban_Phim
Lay_CPU
Lay_Ports
Lay_Adepter
End Sub
Đôc chiêu 17 : Chương trình khởi động cùng với Windowns home
Xuất xứ : www.pscode.com
Binh khí sử dụng : Một Module
Đoạn mã :
Module :
Option Explicit
Public Const HKEY_CLASSES_ROOT = &H80000000
Public Const HKEY_LOCAL_MACHINE = &H80000002
Public Const ERROR_SUCCESS = 0&
Public Const HKEY_CURRENT_USER = &H80000001
counter = 1
Do
counter = InStr(counter, Text, Char)
If counter <> 0 Then
Mid(Text, counter, Len(ReplaceChar)) = ReplaceChar
Else
ReplaceChars = Text
Exit Do
End If
Loop
ReplaceChars = Text
End Function
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
Binh 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à CmdDecrypt
Đ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 String
Open DuongDan For Binary As #1
Dim BoDem As String
BoDem = Space(LOF(1))
Get #1, , BoDem
Close #1
Dim Message As String
Open DuongDan For Binary As #2
Message = BoDem & ThongDiep & Chr(Len(ThongDiep))
Put #2, , Message
End Function
Public Function Lay_Thong_Diep(DuongDan As String) As String
Open DuongDan For Binary As #1
Dim BoDem As String
BoDem = Space(LOF(1))
Get #1, , BoDem
Close #1
Dim Message As String
Dim LuuC As String
LuuC = Right(BoDem, 1)
Message = Right(BoDem, Asc(LuuC) + 1)
Message = Left(Message, Len(Message) - 1)
Lay_Thong_Diep = Message
End Function
End Function
Public Function Decode(Data As String, Optional Depth As Integer) As
String
Dim TempChar As String
Dim TempAsc As Integer
Dim NewData As String
Dim vChar As Integer
End Function
Private Sub CmdEncode_Click()
TxtKetqua.Text = Encode(txtDulieu.Text, 9)
End Sub
Private 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ã
Lời kết : Chao ôi mệt quá qua 1 buổi lối ngày 10 tháng 11 và cả một ngày 11 tháng 11 đã hoàn
thành 14 Chiêu thức, hình như hơi chậm thì phải các bạn, do phải “Lục tung” hết cái máy lên
mới tìm thấy những chiêu “Tâm đắt” để viết sách, nhất là chiêu Mã hoá dữ liệu dạng text đã làm
mình mất hơn 1 buổi tối mới tìm ra, kiểu này thì phải nhờ các bạn nếu có Chiêu thức nào hay thì
gửi Email cho mình để tổng hợp và nâng cấp cho cuốn sách lần sau (An tâm đi mình sẽ ghi
nhận các bạn trong cuốn sách từ trang bìa đến xuất xứ của chiêu thức đó), một mình làm chán
quá các bạn ạ. Mà mình cũng hết Chiêu thức để viết tiếp rồi. Chiêu thức lập trình phiên bản 2 tới
đây là hết mong các bạn đóng góp ý kiến để phiên bản sau hoàn thiện hơn
Lê Nguyên Dũng lớp 11C1 trường THPT Đăk Nông ( Thị xã Gia Nghĩa tỉnh Đăk Nông)
Ngày “Xuất bản” : 10h sáng ngày 12 tháng 11 năm 2005