Hướng dẫn sử dụng 1 số hàm API trong VB.NET

Xem chủ đề cũ hơn Xem chủ đề mới hơn Go down

Hướng dẫn sử dụng 1 số hàm API trong VB.NET

Bài gửi  NguyenVanThang25 (I12A) on 14/3/2012, 23:47

Trước kia mình có ứng dụng 1 vài hàm API dùng để viết mấy tool nhỏ nhỏ phục vụ cho việc auto.
Giờ mình xin hướng dẫn sơ qua cho bạn nào chưa biết:

Một số hàm mình sử dụng đến:
- FindWindow(ByVal lpClassName As String, ByVal lpWindowName As String) : Hàm này dùng để tìm ra handle chính của tiến trình (có thể hiểu nôm na là cửa sổ giao diện của tiến trình cần gửi)
+ Biến lpClassName: là tên class của tiến trình cần gửi thông điệp.
+ Biến lpWindowName: là tên cửa sổ của tiến trình (Caption - Tiêu đề)
(Để biết được lpClassName và lpWindowName bạn dùng thêm 1 tool có tên là Spy++ cái này có sẵn khi bạn cài VS.NET)

Trong hình mình lấy handle chính của Notepad: Class là Notepad, Caption là Untitled - Notepad
- FindWindowEx(ByVal parentHandle As IntPtr, ByVal childAfter As IntPtr, ByVal lpszClass As String, ByVal lpszWindow As String) : Hàm này dùng để tìm ra handle con, địa chỉ của các controls để gửi thông điệp trực tiếp vào nó.
- (ByVal hWnd As IntPtr, ByVal Msg As Integer, ByVal wParam As Integer, ByVal lParam As String): Gửi thông điệp có chờ. Với hWnd là handle của cửa sổ sẽ nhận thông điệp, Msg là thông điệp, wParam và lParam: Đây là những thông tin cần thiết cho Filter Function trong quá trình xử lý sự kiện. Các giá trị này sẽ có ý nghĩa khác nhau tuỳ thuộc vào loại thông điệp muốn gửi.
- PostMessage(ByVal hWnd As IntPtr, ByVal Msg As Integer, ByVal wParam As Integer, ByVal lParam As Integer): Gửi thông điệp không có chờ (2 hàm này thày có giảng khá cụ thể trên lớp rồi nên mình sẽ không giải thích thêm)

Ok, giờ chúng ta mở VS.NET lên tạo 1 project mới và thiết kế giao diện như sau:

Chương trình này sẽ thay đổi nội dung, tiêu đề, hiển thị và đóng cửa sổ Notepad.
Trươc hết khai báo 1 số hàm API sẽ dùng tới:
Code:

  <DllImport("user32.dll", SetLastError:=True)> _
  Public Shared Function FindWindow(ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr
    End Function
    <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
    Private Shared Function FindWindowEx(ByVal parentHandle As IntPtr, ByVal childAfter As IntPtr, ByVal lpszClass As String, ByVal lpszWindow As String) As IntPtr
    End Function
    <DllImport("user32.dll", SetLastError:=True)> _
    Public Shared Function PostMessage(ByVal hWnd As IntPtr, ByVal Msg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Boolean
    End Function
    <DllImport("user32.dll", CharSet:=CharSet.Auto)> _
    Public Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal Msg As Integer, ByVal wParam As Integer, ByVal lParam As String) As Boolean
    End Function
    <DllImport("user32.dll")> _
Public Shared Function SetWindowText(ByVal hWnd As IntPtr, ByVal [text] As String) As Integer
    End Function
    <DllImport("user32.dll")> _
    Public Shared Function ShowWindow(ByVal hWnd As IntPtr, ByVal nCmdShow As Integer) As Boolean
    End Function
Khai báo biến toàn cục:
Code:

    Const WM_CLOSE = &H10 'Chính là tham số wParam - thực hiện công việc đóng cửa sổ
    Const WM_SETTEXT = &HC ' thực hiện công việc gán nội dung, ngoài ra còn 1 số hàm như WM_CHAR để gán ký tự, WM_GETTEXTLENGTH lấy độ dài chuỗi, WM_KDOWN bắt sự kiện nhấn phím... và rất rất nhiều tham số khác (các bạn có thể tham khảo tại đây http://www.piclist.com/techref/os/win/api/messIndex-local.html)

    Dim hNotepad As Long 'Biến lưu handle cửa sổ chính
    Dim hEdit As Long 'Biến lưu handle phần nhập liệu (Edit)
Hàm lấy handle:
Code:

Private Sub FindHandle()
        hNotepad = New Long
        hEdit = New Long
        hNotepad = FindWindow("Notepad", Nothing)
        hEdit = FindWindowEx(hNotepad, hEdit, "Edit", Nothing)
    End Sub
Xử lý sự kiện nút Edit Notepad:
Code:

Private Sub cmdSend_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdSend.Click
        FindHandle()
        If hEdit <> 0 Then
            SendMessage(hEdit, WM_SETTEXT, Nothing, txtMsg.Text)
        Else
            MsgBox("Cửa sổ Notepad chưa được mở.")
        End If
    End Sub
Tương tự với các nút còn lại.
Đây là link down chương trình Demo mình vừa viết các bạn download về tham khảo thêm:
http://www.mediafire.com/?pne1r6a3o3cddgg
VS 2008 nha các bạn Very Happy

Thực sự 1 số tham số mình không biết mô tả sao cả, nói đúng hơn là mình cũng chưa hiểu hết, mong thày và các bạn đóng góp ý kiến.

NguyenVanThang25 (I12A)

Tổng số bài gửi : 29
Join date : 15/02/2012
Age : 30

Xem lý lịch thành viên

Về Đầu Trang Go down

Xem chủ đề cũ hơn Xem chủ đề mới hơn Về Đầu Trang

- Similar topics

 
Permissions in this forum:
Bạn không có quyền trả lời bài viết