Làm thế nào để thiết lập một móc Windows trong Visual C#.NET

QUAN TRỌNG: Bài viết này được dịch bằng phần mềm dịch máy của Microsoft chứ không phải do con người dịch. Microsoft cung cấp các bài viết do con người dịch và cả các bài viết do máy dịch để bạn có thể truy cập vào tất cả các bài viết trong Cơ sở Kiến thức của chúng tôi bằng ngôn ngữ của bạn. Tuy nhiên, bài viết do máy dịch không phải lúc nào cũng hoàn hảo. Loại bài viết này có thể chứa các sai sót về từ vựng, cú pháp hoặc ngữ pháp, giống như một người nước ngoài có thể mắc sai sót khi nói ngôn ngữ của bạn. Microsoft không chịu trách nhiệm về bất kỳ sự thiếu chính xác, sai sót hoặc thiệt hại nào do việc dịch sai nội dung hoặc do hoạt động sử dụng của khách hàng gây ra. Microsoft cũng thường xuyên cập nhật phần mềm dịch máy này.

Nhấp chuột vào đây để xem bản tiếng Anh của bài viết này:318804
Để có một phiên bản Microsoft Visual Basic của bài viết này, xem 319524.
Giới thiệu
Bài viết này mô tả cách thiết lập một móc đó là cụ thể cho một chủ đề và để một thủ tục móc bằng cách sử dụng móc chuột ví dụ. Bạn có thể dùng móc để giám sát một số loại sự kiện. Bạn có thể kết hợp những sự kiện này với một chủ đề cụ thể hoặc với tất cả các chủ đề của máy tính để bàn tương tự như là một chủ đề gọi điện thoại.
THÔNG TIN THÊM

Đặt một móc chuột

Để đặt một móc, gọi cho các SetWindowsHookEx chức năng từ tập tin User32.dll. Chức năng này cài đặt một thủ tục định nghĩa đơn móc trong chuỗi móc gắn liền với móc nối.

Để thiết lập một móc chuột và giám sát các sự kiện chuột, hãy làm theo các bước sau:
  1. Bắt đầu Microsoft Visual Studio.NET.
  2. Trên các Tệp trình đơn, điểm đến Mới, sau đó bấm Dự án.
  3. Trong các Dự án mới hộp thoại hộp, bấm vào Visual C# các dự án dưới Các loại dự án, sau đó bấm Ứng dụng Windows dưới Khuôn mẫu. Trong các Tên hộp, loại ThreadSpecificMouseHook. Theo mặc định, một hình thức được đặt tên Form1 được tạo ra.
  4. Thêm dòng sau mã trong tập tin Form1.cs sau khi một khác bằng cách sử dụng phát biểu.
    using System.Runtime.InteropServices;
  5. Thêm sau mã trong các Form1 lớp học.
    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. Thêm một Nút kiểm soát mẫu, và sau đó thêm mã sau đây trong các Button1_click thủ tục.
    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. Thêm mã sau cho các MouseHookProc chức năng trong các Form1 lớp học.
    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. Nhấn F5 để chạy các dự án. Nhấp vào các hình thức để đặt móc nối. Tọa độ chuột xuất hiện trên thanh tiêu đề hình thức khi di chuyển con trỏ về hình thức. Nhấp vào nút một lần nữa để loại bỏ móc nối.

Toàn cầu móc không được hỗ trợ trong các.NET Framework

Ngoại trừ WH_KEYBOARD_LL tầm thấp móc và móc nối tầm thấp WH_MOUSE_LL, bạn không thể thực hiện toàn cầu móc trong Microsoft.NET Framework. Để cài đặt một móc toàn cầu, một móc phải có một xuất khẩu DLL bản xứ để bơm chính nó trong một tiến trình khác mà yêu cầu một chức năng hợp lệ và nhất quán để gọi vào. Hành vi này đòi hỏi một xuất khẩu DLL. Các.NET Framework không hỗ trợ xuất khẩu DLL. Quản lý mã đã không có khái niệm về một giá trị phù hợp cho một con trỏ hàm vì những con trỏ chức năng là proxy được xây dựng cách năng động.

Thủ tục cấp thấp móc được gọi là trên các chủ đề cài đặt móc nối. Ở tầm thấp móc yêu cầu thủ tục móc được thực hiện trong một DLL.
THAM KHẢO
Để biết thêm chi tiết về móc, ghé thăm Web site sau của Microsoft Developer Network (MSDN):

Cảnh báo: Bài viết này được dịch tự động

Thuộc tính

ID Bài viết: 318804 - Xem lại Lần cuối: 08/27/2011 18:39:00 - Bản sửa đổi: 2.0

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

  • kbhowtomaster kbmt KB318804 KbMtvi
Phản hồi