Visual C# .NET ile bir Windows kanca ayarlama hakkında

Makale çevirileri Makale çevirileri
Makale numarası: 318804 - Bu makalenin geçerli olduğu ürünleri görün.
Bu makalenin Microsoft Visual Basic sürümü için bkz: 319524.
Hepsini aç | Hepsini kapa

Bu Sayfada

Giriş

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.

Daha fazla bilgi

Bir Fare kancası ayarlayın.

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:
  1. Microsoft Visual Studio .NET'i başlatın.
  2. Dosya menüsünde Yeni ' nin üzerine gelin ve sonra Project ' i tıklatın.
  3. 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.
  4. Aşağıdaki kod satırını diğer kullanarak ifadeleri.
    using System.Runtime.InteropServices;
    sonra Form1.cs dosyasında ekleyin...
  5. 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);
  6. 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";
    	} 
    }
  7. 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); 
    	}
    }
  8. 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.

Genel kancaları, .NET Framework'te desteklenmez.

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.

Referanslar

Kancaları hakkında daha fazla bilgi için aşağıdaki Microsoft Developer Network (MSDN) Web sitesini ziyaret edin:
http://msdn.microsoft.com/en-us/library/ms632589(VS.85).aspx

Özellikler

Makale numarası: 318804 - Last Review: 11 Aralık 2006 Pazartesi - Gözden geçirme: 3.6
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft .NET Framework 2.0
  • Microsoft .NET Framework 1.1
  • Microsoft .NET Framework 1.0
  • Microsoft Visual C# 2005 Express Edition
  • Microsoft Visual C# .NET 2003 Standard Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
Anahtar Kelimeler: 
kbmt kbhowtomaster KB318804 KbMttr
Machine-translated Article
Ö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

Geri Bildirim Ver

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com