أنت غير متصل حاليًا، وفي انتظار الإنترنت الخاص بك ليقوم بإعادة الاتصال

كيفية تعيين ربط Windows في Visual C# .NET

هام: تمت ترجمة هذا المقال باستخدام برنامج ترجمة آلية لشركة مايكروسوفت بدلاً من الاستعانة بمترجم بشري. تقدم شركة مايكروسوفت كلاً من المقالات المترجمة بواسطة المترجمين البشر والمقالات المترجمة آليًا وبالتالي ستتمكن من الوصول إلى كل المقالات الموجودة في قاعدة المعرفة الخاصة بنا وباللغة الخاصة بك. بالرغم من ذلك، فإن المقالة المترجمة آليًا لا تكون دقيقة دائمًا وقد تحتوي على أخطاء إملائية أو لغوية أو نحوية، مثل تلك الأخطاء الصادرة عن متحدث أجنبي عندما يتحدث بلغتك. لا تتحمل شركة مايكروسوفت مسئولية عدم الدقة أو الأخطاء أو الضرر الناتج عن أية أخطاء في ترجمة المحتوى أو استخدامه من قبل عملائنا. تعمل شركة مايكروسوفت باستمرار على ترقية برنامج الترجمة الآلية

اضغط هنا لرابط المقالة باللغة الانجليزية318804
للحصول على إصدار Microsoft Visual Basic من هذه المقالة، راجع 319524.
مقدمة حول
توضح هذه المقالة كيفية تعيين ربط غير محددة مؤشر ترابط إجراء موضع الإضافة في الروتين باستخدام ربط الماوس كمثال. يمكنك استخدام hooks لمراقبة أنواع محددة من الأحداث. يمكنك ربط هذه الأحداث مع مؤشر ترابط معين أو مع كافة مؤشرات الترابط في نفس سطح المكتب كـ مؤشر ترابط استدعاء.
معلومات أخرى

تعيين ربط الماوس

لتعيين موضع الإضافة في الروتين على استدعاء دالة SetWindowsHookEx من الملف User32.dll. تثبيت هذه الدالة إجراء موضع الإضافة في الروتين المعرفة من قبل التطبيق في سلسلة ربط المقترن موضع الإضافة في الروتين.

تعيين ربط ماوس مراقبة أحداث الماوس اتبع الخطوات التالية:
  1. بدء تشغيل Microsoft Visual Studio .NET.
  2. من القائمة ملف، أشر إلى جديد ثم انقر فوق المشروع.
  3. في مربع الحوار مشروع جديد ، انقر فوق Visual C# مشاريع ضمن أنواع Project ثم انقر فوق تطبيق Windows ضمن قوالب. في المربع الاسم، اكتب ThreadSpecificMouseHook. افتراضياً، يتم إنشاء نموذج المسمى Form1.
  4. إضافة سطر التعليمات البرمجية التالي في الملف Form1.cs بعد الأخرى باستخدام عبارات.
    using System.Runtime.InteropServices;
  5. إضافة باتباع التعليمات البرمجية في class. Form1
    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. إضافة عنصر تحكم زر إلى النموذج ثم قم بإضافة التعليمة البرمجية التالية في الإجراء Button1_click. button1_Click(object sender, System.EventArgs e) خالية خاصة
    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. إضافة التعليمات البرمجية التالية الخاصة بدالة MouseHookProc في class. Form1
    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 لتشغيل المشروع. انقر فوق الزر على نموذج تعيين موضع الإضافة في الروتين. يظهر إحداثيات الماوس في شريط التسمية التوضيحية النموذج عند تحريك المؤشر في النموذج. انقر فوق الزر مرة أخرى لإزالة ربط.

لا يتم اعتماد hooks العمومية في .NET Framework

عدا ربط ذات المستوى المنخفض WH_KEYBOARD_LL أو ربط ذات المستوى المنخفض WH_MOUSE_LL لا يمكن تطبيق hooks العمومية في Microsoft .NET Framework. لتثبيت ربط عمومية يجب أن يكون ربط تصدير DLL أصلي إلى الإدخال نفسه في عملية أخرى تتطلب دالة صالح متناسقة للاتصال في. يتطلب هذا السلوك تصدير DLL. لا يعتمد .NET Framework تصدير DLL. تعليمات برمجية تمت إدارتها لديه مفهوم لم قيمة ثابتة مؤشر دالة لأن هذه مؤشرات الدالة وكلاء المضمنة بشكل حيوي.

تسمى الإجراءات ربط ذات المستوى المنخفض على مؤشر ترابط تثبيت موضع الإضافة في الروتين. لا تتطلب hooks ذات المستوى المنخفض يتم تنفيذ الإجراء الخاص بالربط في DLL.
مراجع
لمزيد من المعلومات حول hooks قم بزيارة موقع شبكة مطوري Microsoft (MSDN) التالي على الويب:

تحذير: تمت ترجمة هذه المقالة تلقائيًا

خصائص

رقم الموضوع: 318804 - آخر مراجعة: 12/11/2006 21:35:48 - المراجعة: 3.6

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

  • kbmt kbhowtomaster KB318804 KbMtar
تعليقات
ml>dy>