Tác giả: NoBi
Cấp độ bài viết: Nâng cao
Tóm tắt: Hướng dẫn sử dụng hàm API SendMessage & PostMessage
SendMessage
Chúng ta đã biết là hệ điều hành Windows hoạt động dựa trên cơ sở thông điệp (message). Khi HĐH muốn thông tin tới những ứng dụng hay giữa 2 ứng dụng muốn truyền tin với nhau thì đều gửi những thông điệp cho nhau. Ví dụ khi một ứng dụng kết thúc thì HĐH sẽ gửi thông điệp WM_DESTROY tới ứng dụng đó hoặc khi ta thêm 1 item vào Listbox thì ứng dụng/HĐH sẽ gửi thông điệp LB_ADDSTRING tới Listbox. Nếu bạn muốn thay đổi tiêu đề (Title), lấy chuổi văn bản từ Textbox hay đặt 1 chuổi văn bản vào Textbox của 1 ứng dụng khác, hàm API SendMessage sẽ rất hữu dụng cho bạn.
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
- .hwnd : handle của cửa sổ sẽ nhận thông điệp (message).
- .wMsg : thông điệp sẽ được gửi tới cửa sổ.
- .wParam : tham số được gửi cùng với thông điệp (phụ thuộc vào thông điệp).
- .lParam : tham số được gửi cùng với thông điệp (phụ thuộc vào thông điệp).
- Private Const WM_GETTEXT = &HD
- Private Const WM_GETTEXTLENGTH = &HE
- Private Type POINTAPI
- X As Long
- Y As Long
- End Type
- Private Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
- Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) 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 Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
- Dim Pt As POINTAPI, mWnd As Long
- 'Get the current cursor position
- GetCursorPos Pt
- 'Get the window under the cursor
- mWnd = WindowFromPoint(Pt.X, Pt.Y)
- Dim length As Long
- Dim result As Long
- Dim strtmp As String
- length = SendMessage(mWnd, WM_GETTEXTLENGTH, ByVal 0, ByVal 0) + 1
- strtmp = Space(length)
- result = SendMessage(mWnd, WM_GETTEXT, ByVal length, ByVal strtmp)
- Me.Print strtmp
- End Sub
- Private Sub Form_Paint()
- Me.CurrentX = 0
- Me.CurrentY = 0
- Me.Print "Click on this form," + vbCrLf + "Hold the mouse button," + vbCrLf + "drag the mouse over another window," + vbCrLf + "release the mouse button" + vbCrLf + "and see what happens!"
- End Sub
Bây giờ hãy click chuột lên Form, giữ nguyên như vậy và di chuyển chuột tới cái Textbox nào chứa các dấu * , bạn sẽ thấy được password của nó. Chúc bạn thành công !!!.