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#中利用Windows API实现全局鼠标事件监听的实例,特别是对双击事件的捕捉和处理。开发者可以通过此项目学习到如何设置和管理鼠标钩子,以及如何在C#中...
免费送了 包含两种钩子程序 键盘钩子和鼠标钩子 需要的朋友可以看看
c# 钩子记录鼠标运行轨迹c# 钩子记录鼠标运行轨迹 c# 钩子记录鼠标运行轨迹c# 钩子记录鼠标运行轨迹c# 钩子记录鼠标运行轨迹 c# 钩子记录鼠标运行轨迹
在IT领域,尤其是在Windows...总的来说,C#键盘鼠标钩子是一个深入的Windows编程主题,涉及到对底层操作系统的理解以及使用P/Invoke调用API。通过学习和实践,开发者可以构建出能够控制或扩展用户输入行为的应用程序。
在C#中,我们通常利用P/Invoke(Platform Invoke)来调用Windows API函数实现钩子。以下是一些关键知识点: 1. **SetWindowsHookEx函数**:这是Windows API中用于设置钩子的关键函数,接受一个钩子类型、钩子处理...
在这个场景中,我们看到标题提到的是“c#全局钩子”,但实现方式是通过C++来编写鼠标过程。这通常涉及到混合编程,即在C#应用程序中嵌入C++代码来实现特定功能。 首先,让我们了解一下什么是钩子。在Windows操作...
在C#中,我们可以利用`SetWindowsHookEx`函数通过P/Invoke技术调用Win32 API来设置鼠标钩子。通常,我们需要创建一个委托类型以定义钩子回调函数,并在该函数中处理捕获到的鼠标事件,如鼠标移动、点击等。 ### ...
总结,通过使用C#调用Windows API中的钩子功能,我们可以拦截并控制`OpenFileDialog`和`SaveFileDialog`的鼠标右键事件,实现特定的定制行为。这个过程中涉及到了P/Invoke、钩子机制、回调函数以及Windows消息处理等...
使用C#编写的源码,内含4个工具类(键盘监控、键盘输入、鼠标监控、鼠标输入),根据需要自己调用,窗口程序仅做实例效果参考,VS2015,64位win10实测可用,目前尚未实现驱动级,编写外挂可能不会有效果
通过这个"C#键盘鼠标钩子"项目,开发者提供了无DLL依赖的实现方法,简化了部署流程,同时也展示了如何在C#中有效利用WinAPI来扩展.NET Framework的功能。学习和理解这一技术可以帮助开发者更好地控制应用程序的行为...
在C#编程中,"鼠标钩子"是一个高级技术,用于拦截和处理系统级别的鼠标事件。这通常涉及使用Windows API(应用程序接口)函数,因为.NET Framework本身并不直接提供这样的功能。通过设置鼠标钩子,开发者可以捕获并...
在C#中实现全局键盘钩子,开发者通常会利用Windows API函数,如SetWindowsHookEx。这个特定的压缩包文件"AdrHookDemo"可能包含了一个演示如何在C#中实现这种功能的示例项目。 首先,我们要理解键盘钩子的工作原理。...
在C#中,可以利用GDI+(Graphics Device Interface)库来实现这一功能。以下是一个简单的示例: ```csharp using System.Drawing; using System.Windows.Forms; // 创建一个与屏幕大小相同的Bitmap对象 Bitmap ...
C#键盘鼠标钩子,可以知道键盘和鼠标的动作, 本人根据这个工具,制作成了不用鼠标键盘五分钟 用友自动退出工具 当然了,还可以做成很多程序! QQ交流:873968102
在IT行业中,C#是一种广泛使用的编程语言,尤其在Windows应用程序和游戏开发中。本案例中,我们讨论的主题是如何...同时,了解如何利用钩子技术与硬件交互,对于进行更复杂的系统集成和设备控制也具有重要的实践价值。
这个压缩包文件可能包含了一个C#实现的全局钩子示例,用于演示如何在不依赖外部DLL的情况下监听键盘和鼠标操作,包括组合键。 首先,全局钩子是通过Windows API函数SetWindowsHookEx实现的。这个函数允许你安装一个...
总的来说,这个【C# 键盘钩子实例源码】是学习如何在C#中利用Windows API实现键盘监控的绝佳资源。通过分析和运行这个源码,开发者可以深入理解Windows消息机制、P/Invoke技术以及钩子的工作原理,这对于提升Windows...
### C# 全局钩子 (实例) #### 概述 在C#中,全局钩子(Global Hook)是一种能够捕获系统范围内事件的技术。它主要用于监控和拦截键盘或鼠标等输入设备产生的消息。本篇内容将详细介绍如何使用C#实现全局键盘钩子,...
本项目“C#全局钩子屏蔽键盘按键Demo”就是利用C#编程语言实现的一个实例,能够有效地屏蔽键盘按键以及特定的组合键,如Alt+F4。 1. **C#编程语言**:C#是由微软开发的一种面向对象的编程语言,广泛用于Windows桌面...