ID Artikel: 319524 - Kajian Terakhir: 24 September 2011 - Revisi: 2.0

Bagaimana untuk mengatur hook dalam Visual Basic.NET

Tips SistemThis article applies to a different operating system than the one you are using. Article content that may not be relevant to you is disabled.
Untuk Microsoft Visual C# versi dari artikel ini, lihat 318804  (http://support.microsoft.com/kb/318804/ ) .

Pada Halaman ini

Perbesar semua | Perkecil semua

RINGKASAN

Artikel ini menjelaskan cara menetapkan kail yang khusus untuk benang dan kait prosedur. Artikel ini menggunakan kait mouse sebagai contoh.

Anda dapat menggunakan kait untuk memantau peristiwa jenis tertentu. Anda dapat mengaitkan kejadian ini dengan benang tertentu atau dengan semua thread yang ada di desktop sama sebagai benang panggilan.

INFORMASI LEBIH LANJUT

Mengatur mouse hook

Untuk mengatur hook, panggilan SetWindowsHookEx fungsi dari User32.dll file. Fungsi ini menginstal aplikasi kait prosedur dalam rantai kait yang berhubungan dengan kait.

Untuk mengatur mouse hook dan untuk memantau peristiwa mouse, ikuti langkah berikut:
  1. Mulai Microsoft Visual Studio.NET.
  2. Pada Berkas menu, titik Baru, lalu klik Project.
  3. Dalam Proyek baru kotak dialog, klik Proyek-proyek Visual Basic di bawah Jenis proyek. Kemudian, klik Aplikasi Windows di bawah Pola acu.
  4. Dalam Nama kotak, jenis ThreadSpecificMouseHook. Secara default, suatu bentuk yang dinamakan Form1 dibuat.
  5. Pada awal Form1.vb file, paste kode berikut.
    Imports System.Runtime.InteropServices
    Public Delegate Function CallBack( _
        ByVal nCode As Integer, _
        ByVal wParam As IntPtr, _
        ByVal lParam As IntPtr) As Integer
  6. Dalam Form1 kelas, paste kode berikut.
    'Declare the mouse hook constant.
    'For other hook types, obtain these values from Winuser.h in Microsoft SDK.
        Dim WH_MOUSE As Integer = 7
        Shared hHook As Integer = 0
    
        'Keep the reference so that the delegate is not garbage collected.
        Private hookproc As CallBack
    
        'Import for the SetWindowsHookEx function.
        <DllImport("User32.dll", CharSet:=CharSet.Auto, CallingConvention:=CallingConvention.StdCall)> _
         Public Overloads Shared Function SetWindowsHookEx _
              (ByVal idHook As Integer, ByVal HookProc As CallBack, _
               ByVal hInstance As IntPtr, ByVal wParam As Integer) As Integer
        End Function
    
        'Import for the CallNextHookEx function.
        <DllImport("User32.dll", CharSet:=CharSet.Auto, CallingConvention:=CallingConvention.StdCall)> _
         Public Overloads Shared Function CallNextHookEx _
              (ByVal idHook As Integer, ByVal nCode As Integer, _
               ByVal wParam As IntPtr, ByVal lParam As IntPtr) As Integer
        End Function
        'Import for the UnhookWindowsHookEx function.
        <DllImport("User32.dll", CharSet:=CharSet.Auto, CallingConvention:=CallingConvention.StdCall)> _
             Public Overloads Shared Function UnhookWindowsHookEx _
                  (ByVal idHook As Integer) As Boolean
        End Function
    
        'Point structure declaration.
        <StructLayout(LayoutKind.Sequential)> Public Structure Point
            Public x As Integer
            Public y As Integer
        End Structure
    
        'MouseHookStruct structure declaration.
        <StructLayout(LayoutKind.Sequential)> Public Structure MouseHookStruct
            Public pt As Point
            Public hwnd As Integer
            Public wHitTestCode As Integer
            Public dwExtraInfo As Integer
        End Structure
  7. Tambahkan tombol untuk formulir. Kemudian, paste kode berikut di button1_click prosedur.
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    
            If hHook.Equals(0) Then
                hookproc = AddressOf MouseHookProc
                hHook = SetWindowsHookEx(WH_MOUSE, _
                                         hookproc, _
                                         IntPtr.Zero, _
    AppDomain.CurrentDomain.GetCurrentThreadId())
                If hHook.Equals(0) Then
                    MsgBox("SetWindowsHookEx Failed")
                    Return
                Else
                    Button1.Text = "UnHook Windows Hook"
                End If
            Else
                Dim ret As Boolean = UnhookWindowsHookEx(hHook)
    
                If ret.Equals(False) Then
                    MsgBox("UnhookWindowsHookEx Failed")
                    Return
                Else
                    hHook = 0
                    Button1.Text = "Set Windows Hook"
                    Me.Text = "Mouse Hook"
                End If
            End If
    
        End Sub
  8. Dalam Form1 kelas, paste kode berikut untuk MouseHookProc fungsi.
        Public Shared Function MouseHookProc( _
        ByVal nCode As Integer, _
        ByVal wParam As IntPtr, _
        ByVal lParam As IntPtr) As Integer
    Dim MyMouseHookStruct As New MouseHookStruct()
    
            Dim ret As Integer
    
            If (nCode < 0) Then
                Return CallNextHookEx(hHook, nCode, wParam, lParam)
            End If
    
            MyMouseHookStruct = CType(Marshal.PtrToStructure(lParam, MyMouseHookStruct.GetType()), MouseHookStruct)
    
            Dim tempForm As Form
            tempForm = Form.ActiveForm()
    
            Dim strCaption As String
            strCaption = "x = " & MyMouseHookStruct.pt.x & " y = " & MyMouseHookStruct.pt.y
    
            tempForm.Text = strCaption
            Return CallNextHookEx(hHook, nCode, wParam, lParam)
    
        End Function
  9. Tekan F5 untuk menjalankan projek. Klik tombol pada formulir untuk mengatur pengait. Koordinat pointer muncul pada bilah keterangan bentuk ketika pointer yang bergerak pada formulir.
  10. Klik tombol itu lagi untuk menghapus hook.

Kait global tidak didukung di.NET Framework

Anda tidak dapat menerapkan global kait di.NET Framework. Tingkat rendah kait berjalan dalam proses penelepon. Ini kait tidak memerlukan kode disuntikkan ke dalam proses lainnya. Mereka dapat diimplementasikan dalam kode berhasil, tetapi mereka mungkin tidak terus bekerja. Karena setiap event masukan harus menunggu untuk hook tingkat rendah kembali sebelum hook dikirim, kait lambat dapat secara signifikan mengganggu responsif dari sistem. Windows diam-diam menghapus setiap kail yang memakan waktu terlalu lama untuk memproses. Karena kode dikelola tidak dapat mengendalikan saat apa sampah kolektor berjalan, ada tidak ada jaminan bahwa prosedur kait akan selalu kembali cukup cepat untuk menghindari menjadi dihapus.

REFERENSI

Untuk informasi lebih lanjut tentang kait, kunjungi website Microsoft Developer Network (MSDN) berikut:
http://MSDN.Microsoft.com/en-us/library/ms644959.aspx (http://msdn.microsoft.com/en-us/library/ms644959.aspx)

Berlaku bagi:
  • Microsoft .NET Framework 2.0
  • Microsoft .NET Framework 1.1
  • Microsoft .NET Framework 1.0
  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
Kata kunci: 
kbhowtomaster kbmt KB319524 KbMtid
Penerjemahan MesinPenerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:319524  (http://support.microsoft.com/kb/319524/en-us/ )