Bu makalede, Fare kancası örnek olarak kullanarak, belirli bir iş parçacığı ve bir kanca işlemi olan bir kanca ayarlama yöntemi açıklanır. Kancaları, belirli türdeki olayları izlemek için kullanabilirsiniz. Bu olaylar, belirli bir iş parçacığı veya arayan bir iş parçacığı aynı masaüstünü tüm iş parçacıkları ile ilişkilendirebilirsiniz.
Bir kanca ayarlamak için <a0></a0>, User32.dll dosyasından SetWindowsHookEx işlevini çağırın. Bu işlev, bir uygulama tanımlı kanca işlemi ile kanca ilişkili kanca zincirdeki yükler.
Bir Fare kancası ayarlayın ve fare olayları izlemek için aşağıdaki adımları izleyin:
Microsoft Visual Studio .NET'i başlatın.
Dosya menüsünde Yeni ' nin üzerine gelin ve sonra Project ' i tıklatın.
Yeni proje) iletişim kutusunda, Project Types altında Visual C# Projects ' ı tıklatın ve şablonları altında Windows uygulama ' yı tıklatın. Ad kutusuna ThreadSpecificMouseHook yazın. Varsayılan olarak, Form1 adlı bir form oluşturulur.
Aşağıdaki kod satırını diğer kullanarak ifadeleri.
using System.Runtime.InteropServices;
sonra Form1.cs dosyasında ekleyin...
Form1 ResultClass
public delegate int HookProc(int nCode, IntPtr wParam, IntPtr lParam);
//Declare the hook handle as an int.
static int hHook = 0;
//Declare the mouse hook constant.
//For other hook types, you can obtain these values from Winuser.h in the Microsoft SDK.
public const int WH_MOUSE = 7;
private System.Windows.Forms.Button button1;
//Declare MouseHookProcedure as a HookProc type.
HookProc MouseHookProcedure;
//Declare the wrapper managed POINT class.
[StructLayout(LayoutKind.Sequential)]
public class POINT
{
public int x;
public int y;
}
//Declare the wrapper managed MouseHookStruct class.
[StructLayout(LayoutKind.Sequential)]
public class MouseHookStruct
{
public POINT pt;
public int hwnd;
public int wHitTestCode;
public int dwExtraInfo;
}
//This is the Import for the SetWindowsHookEx function.
//Use this function to install a thread-specific hook.
[DllImport("user32.dll",CharSet=CharSet.Auto,
CallingConvention=CallingConvention.StdCall)]
public static extern int SetWindowsHookEx(int idHook, HookProc lpfn,
IntPtr hInstance, int threadId);
//This is the Import for the UnhookWindowsHookEx function.
//Call this function to uninstall the hook.
[DllImport("user32.dll",CharSet=CharSet.Auto,
CallingConvention=CallingConvention.StdCall)]
public static extern bool UnhookWindowsHookEx(int idHook);
//This is the Import for the CallNextHookEx function.
//Use this function to pass the hook information to the next hook procedure in chain.
[DllImport("user32.dll",CharSet=CharSet.Auto,
CallingConvention=CallingConvention.StdCall)]
public static extern int CallNextHookEx(int idHook, int nCode,
IntPtr wParam, IntPtr lParam);
Forma Düğme denetimi ekler ve sonra da Button1_click yordamda aşağıdaki kodu ekleyin.
private void button1_Click(object sender, System.EventArgs e)
{
if(hHook == 0)
{
// Create an instance of HookProc.
MouseHookProcedure = new HookProc(Form1.MouseHookProc);
hHook = SetWindowsHookEx(WH_MOUSE,
MouseHookProcedure,
(IntPtr)0,
AppDomain.GetCurrentThreadId());
//If the SetWindowsHookEx function fails.
if(hHook == 0 )
{
MessageBox.Show("SetWindowsHookEx Failed");
return;
}
button1.Text = "UnHook Windows Hook";
}
else
{
bool ret = UnhookWindowsHookEx(hHook);
//If the UnhookWindowsHookEx function fails.
if(ret == false )
{
MessageBox.Show("UnhookWindowsHookEx Failed");
return;
}
hHook = 0;
button1.Text = "Set Windows Hook";
this.Text = "Mouse Hook";
}
}
Form1 ResultClass
public static int MouseHookProc(int nCode, IntPtr wParam, IntPtr lParam)
{
//Marshall the data from the callback.
MouseHookStruct MyMouseHookStruct = (MouseHookStruct) Marshal.PtrToStructure(lParam, typeof(MouseHookStruct));
if (nCode < 0)
{
return CallNextHookEx(hHook, nCode, wParam, lParam);
}
else
{
//Create a string variable that shows the current mouse coordinates.
String strCaption = "x = " +
MyMouseHookStruct.pt.x.ToString("d") +
" y = " +
MyMouseHookStruct.pt.y.ToString("d");
//You must get the active form because it is a static function.
Form tempForm = Form.ActiveForm;
//Set the caption of the form.
tempForm.Text = strCaption;
return CallNextHookEx(hHook, nCode, wParam, lParam);
}
}
F5 tuşuna basarak projeyi çalıştırın. Kanca ayarlamak için bu formdaki bir düğmeyi tıklatın. Fare koordinatlarına, işaretçiyi, form üzerinde hareket ettiğinde formun başlık çubuğunda görünür. Yeniden kanca kaldırmak için düğmeyi tıklatın.
WH_KEYBOARD_LL alt düzey kanca ve WH_MOUSE_LL alt düzey kanca dışında Microsoft .NET Framework'de genel Kancaları uygulayamıyor. Genel bir kanca yüklemek için <a0></a0>, kendi içinde aranacak geçerli, tutarlı bir işlev gerektiren başka bir işleme eklemesine yerel bir DLL verme bir kanca olmalıdır. Bu davranış, bir DLL verme gerektirir. .NET Framework DLL'I verir desteklemiyor. Bu işlev işaretçileri, dinamik olarak oluşturulan proxy'ler olduğundan, yönetilen kod yok bir işlev işaretçisi için tutarlı bir değer kavramı vardır.
Alt düzey kanca yordamlar kanca yüklediği iş parçacığında olarak adlandırılır. Alt düzey Kancaları kanca işlemi bir DLL uygulanması gerekmez.
Ö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:318804
(http://support.microsoft.com/kb/318804/en-us/
)
Bu makaleyi kullanabilmek için kişisel olarak ne kadar çaba harcadınız?
Çok az
Az
Ne Az, Ne Fazla
Fazla
Çok fazla
Bu bilgiyi geliştirmek için ne yapabiliriz?
Gizliliğinizi korumak için, irtibat bilgilerinizi görüşlerinize eklemeyin.
Teşekkür ederiz! Görüşleriniz, destek içeriğimizi geliştirmek amacıyla kullanılacaktır. Daha fazla yardım seçeneği için lütfen, Yardım ve Destek Ana Sayfası’nı ziyaret edin.