Bu makalede, bir iş parçacığı ve kanca işlemi için belirli bir kanca nasıl. Bu makalede, Fare kancası örnek olarak kullanılmıştır.
Kancaları, belirli olay türlerini izlemek için kullanabilirsiniz. Bu olaylar, aynı masaüstünü arayan bir iş parçacığı. tüm iş parçacıkları veya belirli bir iş parçacığı ile ilişkilendirebileceğiniz
Bir kanca belirlemek içinSetWindowsHookExUser32.dll dosyasını işlevini . Bu işlev, kanca zincirindeki kancası. ile ilişkili olan bir uygulama tanımlı kanca işlemi yükler
Fare kancası için ve fare olaylarını izlemek için aşağıdaki adımları izleyin:
Başlatma Microsoft Visual Studio .NET.
,Dosyamenüsü,Yeni[NULL]'iProje.
,Yeni projeiletişim kutusunu tıklatınVisual Basic ProjelerialtındaProje türleri. Ardından 'Windows uygulamasıaltındaŞablonları.
,Adıkutusunda, türThreadSpecificMouseHook. Varsayılan olarak, Form1 adlı bir form oluşturulur.
Form1.vb dosyanın başlangıcına yapıştırın aşağıdaki kodu.
Imports System.Runtime.InteropServices
Public Delegate Function CallBack( _
ByVal nCode As Integer, _
ByVal wParam As IntPtr, _
ByVal lParam As IntPtr) As Integer
,Form1sınıf, yapıştırın aşağıdaki kodu.
'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
Forma düğme Ekle. Daha sonra aşağıdaki kodu yapıştırınButton1_Clickyordam.
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
,Form1sınıfı, aşağıdaki kodu yapıştırınMouseHookProcişlev.
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
F5 tuşuna basarak projeyi çalıştırın. Kanca belirlemek için form üzerindeki bir düğmeyi tıklatın. İmleç koordinatları, işaretçiyi formun üzerine getirdiğinde formun başlık çubuğunda görünür.
.NET Framework genel Kancaları uygulayamaz. Alt düzey kancaları, arayanın işleminde çalışır. Diğer işlemler içinde kod eklenmesini, bu Kancaları gerektirmez. Yönetilen kod uygulanabilir, ancak bunlar çalışmaya devam.. Her girdi olay kanca gönderilir önce dönmek için alt düzey kanca beklemesi için yavaş Kancaları ile sistemin yanıt verme yeteneğini önemli ölçüde etkileyebilir. Windows, sessizce işlemek için uzun süren bir kanca kaldırır. Yönetilen kod ne zaman çöp toplayıcısını çalıştırır denetleyemediği olduğunu kanca işlemi her zaman yeterince hızlı kaldırılmasını önlemek için hiçbir garantisi yoktur.
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:319524
(http://support.microsoft.com/kb/319524/en-us/
)
Bu makaleyi kullanmak için ne kadar kişisel çaba harcadınız?
Çok az
Az
Orta
Fazla
Çok fazla
Bu bilgiyi geliştirmemiz için nedenleri ve bu konuda neler yapabileceğimizi paylaşın
Teşekkürler! Görüşleriniz, destek içeriğimizi geliştirmemize yardımcı olmak için kullanılmaktadır. Diğer yardım seçenekleri için, lütfen Yardım ve Destek Giriş Sayfasını ziyaret edin.