C#利用钩子控制鼠标【月儿原创】

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

C#利用钩子控制鼠标

作者:清清月儿

主页:http://blog.csdn.net/21aspnet/           时间:2007.5.11

工作中有这样的需求,某个控件panel的子控件textbox要实现只留鼠标右键copy,注意同时还不能影响其它panel的子控件textbox,怎么办?
答案是只有用钩子,在codeporject上找到这么一个钩子。

如图所示,第一个文本框只有copy功能。


UserActivityHook.cs


using  System;
using  System.Runtime.InteropServices;
using  System.Reflection;
using  System.Threading;
using  System.Windows.Forms;
using  System.ComponentModel;

namespace  gma.System.Windows
... {
 /**//// <summary>
 /// This class allows you to tap keyboard and mouse and / or to detect their activity even when an 
 /// application runes in background or does not have any user interface at all. This class raises 
 /// common .NET events with KeyEventArgs and MouseEventArgs so you can easily retrieve any information you need.
 /// </summary>

 public class UserActivityHook
 ...{
  Windows structure definitions#region Windows structure definitions

  /**//// <summary>
  /// The POINT structure defines the x- and y- coordinates of a point. 
  /// </summary>
  /// <remarks>
  /// http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/rectangl_0tiq.asp
  /// </remarks>

  [StructLayout(LayoutKind.Sequential)]
   private class POINT
  ...{
   /**//// <summary>
   /// Specifies the x-coordinate of the point. 
   /// </summary>

   public int x;
   /**//// <summary>
   /// Specifies the y-coordinate of the point. 
   /// </summary>

   public int y;
  }


  /**//// <summary>
  /// The MOUSEHOOKSTRUCT structure contains information about a mouse event passed to a WH_MOUSE hook procedure, MouseProc. 
  /// </summary>
  /// <remarks>
  /// http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/hooks/hookreference/hookstructures/cwpstruct.asp
  /// </remarks>

  [StructLayout(LayoutKind.Sequential)]
   private class MouseHookStruct
  ...{
   /**//// <summary>
   /// Specifies a POINT structure that contains the x- and y-coordinates of the cursor, in screen coordinates. 
   /// </summary>

   public POINT pt;
   /**//// <summary>
   /// Handle to the window that will receive the mouse message corresponding to the mouse event. 
   /// </summary>

   public int hwnd;
   /**//// <summary>
   /// Specifies the hit-test value. For a list of hit-test values, see the description of the WM_NCHITTEST message. 
   /// </summary>

   public int wHitTestCode;
   /**//// <summary>
   /// Specifies extra information associated with the message. 
   /// </summary>

   public int dwExtraInfo;
  }


  /**//// <summary>
  /// The MSLLHOOKSTRUCT structure contains information about a low-level keyboard input event. 
  /// </summary>

  [StructLayout(LayoutKind.Sequential)]
   private class MouseLLHookStruct
  ...{
   /**//// <summary>
   /// Specifies a POINT structure that contains the x- and y-coordinates of the cursor, in screen coordinates. 
   /// </summary>

   public POINT pt;
   /**//// <summary>
   /// If the message is WM_MOUSEWHEEL, the high-order word of this member is the wheel delta. 
   /// The low-order word is reserved. A positive value indicates that the wheel was rotated forward, 
   /// away from the user; a negative value indicates that the wheel was rotated backward, toward the user. 
   /// One wheel click is defined as WHEEL_DELTA, which is 120. 
   ///If the message is WM_XBUTTONDOWN, WM_XBUTTONUP, WM_XBUTTONDBLCLK, WM_NCXBUTTONDOWN, WM_NCXBUTTONUP,
   /// or WM_NCXBUTTONDBLCLK, the high-order word specifies which X button was pressed or released, 
   /// and the low-order word is reserved. This value can be one or more of the following values. Otherwise, mouseData is not used. 
   ///XBUTTON1
   ///The first X button was pressed or released.
   ///XBUTTON2
   ///The second X button was pressed or released.
   /// </summary>

   public int mouseData;
   /**//// <summary>
   /// Specifies the event-injected flag. An application can use the following value to test the mouse flags. Value Purpose 
   ///LLMHF_INJECTED Test the event-injected flag.  
   ///0
   ///Specifies whether the event was injected. The value is 1 if the event was injected; otherwise, it is 0.
   ///1-15
   ///Reserved.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值