`
leonardleonard
  • 浏览: 801725 次
社区版块
存档分类
最新评论

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

阅读更多

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.
   
/// </summary>
   public int flags;
   
/**//// <summary>
   
/// Specifies the time stamp for this message.
   
/// </summary>
   public int time;
   
/**//// <summary>
   
/// Specifies extra information associated with the message. 
   
/// </summary>
   public int dwExtraInfo;
  }



  
/**//// <summary>
  
/// The KBDLLHOOKSTRUCT structure contains information about a low-level keyboard input event. 
  
/// </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 KeyboardHookStruct
  
...{
   
/**//// <summary>
   
/// Specifies a virtual-key code. The code must be a value in the range 1 to 254. 
   
/// </summary>
   public int vkCode;
   
/**//// <summary>
   
/// Specifies a hardware scan code for the key. 
   
/// </summary>
   public int scanCode;
   
/**//// <summary>
   
/// Specifies the extended-key flag, event-injected flag, context code, and transition-state flag.
   
/// </summary>
   public int flags;
   
/**//// <summary>
分享到:
评论

相关推荐

    C# 鼠标钩子 监测鼠标双击事件

    综上所述,"C# 鼠标钩子 监测鼠标双击事件"是一个关于如何在C#中利用Windows API实现全局鼠标事件监听的实例,特别是对双击事件的捕捉和处理。开发者可以通过此项目学习到如何设置和管理鼠标钩子,以及如何在C#中...

    c# 键盘钩子和鼠标钩子

    免费送了 包含两种钩子程序 键盘钩子和鼠标钩子 需要的朋友可以看看

    c# 钩子记录鼠标运行轨迹

    c# 钩子记录鼠标运行轨迹c# 钩子记录鼠标运行轨迹 c# 钩子记录鼠标运行轨迹c# 钩子记录鼠标运行轨迹c# 钩子记录鼠标运行轨迹 c# 钩子记录鼠标运行轨迹

    c#键盘鼠标钩子

    在IT领域,尤其是在Windows...总的来说,C#键盘鼠标钩子是一个深入的Windows编程主题,涉及到对底层操作系统的理解以及使用P/Invoke调用API。通过学习和实践,开发者可以构建出能够控制或扩展用户输入行为的应用程序。

    C#鼠标钩子源码.zip

    在C#中,我们通常利用P/Invoke(Platform Invoke)来调用Windows API函数实现钩子。以下是一些关键知识点: 1. **SetWindowsHookEx函数**:这是Windows API中用于设置钩子的关键函数,接受一个钩子类型、钩子处理...

    c# 全局钩子(使用c++编写的鼠标过程)

    在这个场景中,我们看到标题提到的是“c#全局钩子”,但实现方式是通过C++来编写鼠标过程。这通常涉及到混合编程,即在C#应用程序中嵌入C++代码来实现特定功能。 首先,让我们了解一下什么是钩子。在Windows操作...

    C#鼠标钩子和键盘事件

    在C#中,我们可以利用`SetWindowsHookEx`函数通过P/Invoke技术调用Win32 API来设置鼠标钩子。通常,我们需要创建一个委托类型以定义钩子回调函数,并在该函数中处理捕获到的鼠标事件,如鼠标移动、点击等。 ### ...

    C#使用钩子屏蔽了打开对话框的鼠标右键功能

    总结,通过使用C#调用Windows API中的钩子功能,我们可以拦截并控制`OpenFileDialog`和`SaveFileDialog`的鼠标右键事件,实现特定的定制行为。这个过程中涉及到了P/Invoke、钩子机制、回调函数以及Windows消息处理等...

    C#钩子实现键盘鼠标监控和操作的源码(禁止非法用途)

    使用C#编写的源码,内含4个工具类(键盘监控、键盘输入、鼠标监控、鼠标输入),根据需要自己调用,窗口程序仅做实例效果参考,VS2015,64位win10实测可用,目前尚未实现驱动级,编写外挂可能不会有效果

    c#键盘鼠标钩子.zip

    通过这个"C#键盘鼠标钩子"项目,开发者提供了无DLL依赖的实现方法,简化了部署流程,同时也展示了如何在C#中有效利用WinAPI来扩展.NET Framework的功能。学习和理解这一技术可以帮助开发者更好地控制应用程序的行为...

    C# 鼠标钩子

    在C#编程中,"鼠标钩子"是一个高级技术,用于拦截和处理系统级别的鼠标事件。这通常涉及使用Windows API(应用程序接口)函数,因为.NET Framework本身并不直接提供这样的功能。通过设置鼠标钩子,开发者可以捕获并...

    C# 全局键盘钩子类(包括鼠标)

    在C#中实现全局键盘钩子,开发者通常会利用Windows API函数,如SetWindowsHookEx。这个特定的压缩包文件"AdrHookDemo"可能包含了一个演示如何在C#中实现这种功能的示例项目。 首先,我们要理解键盘钩子的工作原理。...

    c#抓图,截取屏幕,鼠标键盘钩子程序

    在C#中,可以利用GDI+(Graphics Device Interface)库来实现这一功能。以下是一个简单的示例: ```csharp using System.Drawing; using System.Windows.Forms; // 创建一个与屏幕大小相同的Bitmap对象 Bitmap ...

    C#键盘鼠标钩子

    C#键盘鼠标钩子,可以知道键盘和鼠标的动作, 本人根据这个工具,制作成了不用鼠标键盘五分钟 用友自动退出工具 当然了,还可以做成很多程序! QQ交流:873968102

    C# 采用钩子实现扫码枪功能.zip

    在IT行业中,C#是一种广泛使用的编程语言,尤其在Windows应用程序和游戏开发中。本案例中,我们讨论的主题是如何...同时,了解如何利用钩子技术与硬件交互,对于进行更复杂的系统集成和设备控制也具有重要的实践价值。

    c#全局钩子(键盘,鼠标)

    这个压缩包文件可能包含了一个C#实现的全局钩子示例,用于演示如何在不依赖外部DLL的情况下监听键盘和鼠标操作,包括组合键。 首先,全局钩子是通过Windows API函数SetWindowsHookEx实现的。这个函数允许你安装一个...

    C# 键盘钩子实例源码

    总的来说,这个【C# 键盘钩子实例源码】是学习如何在C#中利用Windows API实现键盘监控的绝佳资源。通过分析和运行这个源码,开发者可以深入理解Windows消息机制、P/Invoke技术以及钩子的工作原理,这对于提升Windows...

    c# 全局钩子 (实例)

    ### C# 全局钩子 (实例) #### 概述 在C#中,全局钩子(Global Hook)是一种能够捕获系统范围内事件的技术。它主要用于监控和拦截键盘或鼠标等输入设备产生的消息。本篇内容将详细介绍如何使用C#实现全局键盘钩子,...

    C#全局钩子屏蔽键盘按键Demo

    本项目“C#全局钩子屏蔽键盘按键Demo”就是利用C#编程语言实现的一个实例,能够有效地屏蔽键盘按键以及特定的组合键,如Alt+F4。 1. **C#编程语言**:C#是由微软开发的一种面向对象的编程语言,广泛用于Windows桌面...

Global site tag (gtag.js) - Google Analytics