使用全局鼠标钩子实现右键双击粘贴操作

消息钩子函数入门篇 Windows系统是建立在事件驱动的机制上的,说穿了就是整个系统都是通过消息的传递来实现的。而钩子是Windows系统中非常重要的系统接口,用它可以截获并处理送给其他应用程序的消息,来完成普通应用程序难以实现的功能。钩子可以监视系统或进程中的各种事件消息,截获发往目标窗口的消息并进行处理。这样,我们就可以在系统中安装自定义的钩子,监视系统中特定事件的发生,完成特定的功能,比如截获键盘、鼠标的输入, 阅读详情

http://blog.youkuaiyun.com/booolee/archive/2004/09/18/109005.aspx

使用全局鼠标钩子实现右键双击粘贴操作

版权声明:优快云是本Blog托管服务提供商。如本文牵涉版权问题,优快云不承担相关责任,请版权拥有者直接与文章作者联系解决。


最近单位有大量图象矢量化的工作,时间紧任务重,数化员除了图形绘制还要对图形进行属性设置,因为使用的国外某软件,属性填写部分右键菜单被屏蔽了,所以数化员都需要CTRL+V,就这个键盘的操作动作对于大量的数化工作来说是个非常降低效率的操作,所以写了一个通过右键双击就可以进行粘贴的全局钩子,一经应用,果然工作进度提高了不少,并且数化工作变的轻松了许多,下面就是VC6中编写的代码,写这个钩子过程也遇到过一些困难,不希望有其他朋友也遇到,所以发出代码,供需要的朋友使用,这个代码是根据网友代码修改得来,再次感谢网友卢培培(http://blog.youkuaiyun.com/goodname008)。

全局钩子DLL由VC6编写,数化助手是由VB6编写。

下载编译好的程序:http://www.cjsdn.net/user/download/112563/RDPaster.rar

 

/********************************************************************/
/* 文件名: MyMouseHook.cpp           */
/*                 */
/* 功能: 标准 DLL ---- 利用鼠标全局钩子实现右键双击粘贴功能   */
/*                 */
/* 作者: 李博 (booolee)   时间: 2004.9.18      */
/*                 */
/* BLOG: http://blog.youkuaiyun.com/booolee        */
/********************************************************************/

// 导出函数列表
// StartHook
// StopHook
// About

#define _WIN32_WINNT  0x0500    // 设置系统版本, 确保可以使用底层鼠标钩子

#include "windows.h"

// 全局变量
HINSTANCE g_hInstance = NULL;    // 模块实例句柄
HHOOK  g_hHook = NULL;     // 钩子句柄

// DLL 入口函数
BOOL APIENTRY DllMain(HANDLE hModule, DWORD  ul_reason_for_call, LPVOID lpReserved)
{
 // 保存模块实例句柄
 g_hInstance = (HINSTANCE)hModule;
 
 // 在进程结束或线程结束时卸载钩子
 switch (ul_reason_for_call)
 {
 case DLL_PROCESS_ATTACH:
  break;
 case DLL_THREAD_ATTACH:
  break;
 case DLL_PROCESS_DETACH:
 case DLL_THREAD_DETACH:
  if (g_hHook != NULL) UnhookWindowsHookEx(g_hHook);
  break;
 }
    return TRUE;
}

// 底层鼠标钩子函数
LRESULT CALLBACK MouseHookProc(int nCode, WPARAM wParam, LPARAM lParam)
{
 LPMOUSEHOOKSTRUCT pMouseHook=(MOUSEHOOKSTRUCT FAR *) lParam;
 if (nCode>=0)
 {  
  if (wParam==WM_RBUTTONDBLCLK)
  {   
   HWND glhTargetWnd=pMouseHook->hwnd;   
   if(glhTargetWnd !=NULL)
   {
    char * buffer = NULL;
    if (OpenClipboard(NULL))
    {
     HANDLE hData = GetClipboardData(CF_TEXT);
     char * buffer = (char*)GlobalLock(hData);
     SetWindowText(glhTargetWnd,buffer);
     GlobalUnlock(hData);
     CloseClipboard();
     return TRUE;
    }    
   }
  }
 }
 // 传给系统中的下一个钩子
 return CallNextHookEx(g_hHook, nCode, wParam, lParam);
}

/********************************************************************/
/* 安装鼠标钩子              */
/* 参数: (无)             */
/* 返回值: TRUE 成功, FALSE 失败         */
/********************************************************************/
BOOL WINAPI StartHook()
{
 // 如果已经安装鼠标钩子则返回 FALSE
 if (g_hHook != NULL) return FALSE;
 
 // 安装底层鼠标钩子
 g_hHook = SetWindowsHookEx(WH_MOUSE, MouseHookProc, g_hInstance, NULL);
 if (g_hHook == NULL) return FALSE;
 MessageBox(NULL,"启动成功!","BOBO鼠标双击右键粘贴器",MB_OK);
 return TRUE;
 
}

/********************************************************************/
/* 卸载鼠标钩子              */
/*                 */
/* 参数: (无)             */
/*                 */
/* 返回值: TRUE 成功, FALSE 失败         */
/********************************************************************/
BOOL WINAPI StopHook()
{
 // 卸载钩子
 if (UnhookWindowsHookEx(g_hHook) == 0) return FALSE;
 g_hHook = NULL;
 MessageBox(NULL,"卸载成功!","BOBO鼠标双击右键粘贴器",MB_OK);
 return TRUE;
}

BOOL WINAPI About()
{
 MessageBox(NULL,"作者:李博/n功能:双击鼠标右键进行粘贴操作/n日期:2004.9.18/n邮件:booolee@yahoo.com.cn","关于鼠标钩子",MB_OK);
 return TRUE;
}

********************************************************************/
/* 文件名: MyMouseHook.h           */
/*                 */
/* 功能: 标准 DLL 导出函数头文件, 在使用该DLL的程序中包含此文件  */
/*                 */
/* 作者: 李博 (booolee)   时间: 2004.9.18      */
/*                 */
/* BLOG: http://blog.youkuaiyun.com/booolee        */
/********************************************************************/

DECLSPEC_IMPORT
BOOL
WINAPI
StartHook();

DECLSPEC_IMPORT
BOOL
WINAPI
StopMaskKey();

DECLSPEC_IMPORT
BOOL
WINAPI
About();

 

MaskKey.def代码如下

EXPORTS
StartHook @1
StopHook @2
About  @3

 

VB6中引用钩子的声明

Declare Function StartHook Lib "MyMouseHook" () As Long
Declare Function StopHook Lib "MyMouseHook" () As Long
Declare Function About Lib "MyMouseHook" () As Long

C#全局鼠标钩子 using System; using System.Diagnostics; using System.Runtime.InteropServices; namespace Hook { /// /// 鼠标钩子类。 /// public class MouseHook : BaseHook { #region # 全局变量 # 阅读详情

相关推荐

全局鼠标HOOK实现右键无效NoRButton

全局鼠标HOOK实现右键无效NoRButton

[原]在全局鼠标钩子中模拟鼠标右键单击

[标题]:在全局鼠标钩子中模拟鼠标右键单击 [时间]:2009-3-28 [摘要]:本文分为两部分,第一部分:使用SwapMouseButton()切换鼠标左右键功能。第二部分:在全局鼠标钩子中模拟鼠标右键单击。 [关键字]:鼠标失灵,鼠标右键,切换鼠标左右键,屏幕宽度,屏幕高度,SendInput,全局鼠标钩子,鼠标事件 [平台]:Windows XP SP3 ,VC6 [作者]:Winty (...

天堂露珠 的专栏 696

hook全局鼠标钩子拦截鼠标右键示例源代码

hook全局鼠标钩子拦截鼠标右键示例源代码

C#用鼠标钩子屏蔽任务栏右键弹出菜单

最近遇到需要屏蔽任务栏的右键弹出菜单问题,小费了番周折,写出来希望对需要的人有帮助。 网上查了半天资料,修改注册表可以实现,但有个缺点需要重启机器,甚为不爽。还有用鼠标钩子截获鼠标右键消息来达到目的,这里需要注意一点,当鼠标右键释放时菜单才会弹出(由于开始只截获了鼠标按下的消息,程序一直不灵,一度怀疑用钩子实现的可能性,哎,细心细心啊)。 关于c#调用Windows API和钩子的使用

jumtre的专栏 5110

用户消费行为分析(MapReduce实现,Hive分析)

一、题目要求 数据来自CDNow网站的一份用户购买CD明细,本数据集共有 6 万条 左右数据,数据为 CDNow 网站 1997年1月至1998年6月的用户行为 数据

紫烟的博客 3013

STM32F103C8T6板子使用说明

pcb版,把众多元器件集中到一个板子上面管理。

LYC_462857656的博客 2187

小鑫need help

小鑫need help Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 小鑫遇难了!!!小鑫被巫婆关在巫婆的地牢里了,地牢的门上有个密码锁,密码锁会显示一个字符串,密码是字符串逆序之后每个字符Ascll码的值,当然,数字是不需要转换的。 例:a3b  首先,逆序后的序列为 b3a ,‘b’的Ascll码为

292

Cisco Packet Tracer 7.3免登录技巧:3种方法快速跳过注册界面(附详细截图)

本文针对Cisco Packet Tracer 7.3启动时遇到的登录界面问题,提供了三种合法高效的解决方案。详细介绍了如何利用官方访客模式快速启动、注册思科账号实现一劳永逸登录,以及通过调整本地安装配置优化启动流程,帮助网络学习者与备考者绕过繁琐步骤,快速进入实验环境。

weixin_29305337的博客 739

从农田巡检到快递配送:基于UAV-Need-Help基准的5个行业应用案例解析

本文深入解析了基于UAV-Need-Help基准的无人机视觉语言导航(VLN)技术在五大行业的创新应用,包括精准农业、物流配送、电力巡检、应急响应和生态监测。通过实际案例展示了VLN如何提升作业效率与安全性,特别介绍了OpenUAV平台在实现无人机'听懂人话'方面的技术突破,为行业智能化转型提供实践参考。

lemon的博客 656

告别手动烧录!给STM32H750外挂Flash制作Keil专用下载算法(保姆级避坑指南)

本文详细介绍了为STM32H750外挂Flash开发Keil专用下载算法的全过程,从原理到实战操作,特别针对QSPI Flash的配置和优化提供了保姆级避坑指南。通过定制下载算法,开发者可以告别手动烧录,实现一键下载到外部Flash,大幅提升开发效率。

weixin_42567497的博客 250

Sigmastar平台WDR调试实战:从参数解析到鬼影消除的完整指南

本文提供了Sigmastar平台宽动态(WDR)技术的实战调试指南。针对逆光、运动场景下的核心痛点,系统性地解析了从多曝光采集、HDR融合到色调映射的完整管线,并重点阐述了如何通过调整曝光比、运动阈值与调整曲线等关键参数,有效消除运动鬼影、平衡暗部噪声与细节,最终实现清晰稳定的图像效果。

Jerry的专栏 926

P1035 I need help

描述:     Johnny Q在你的帮助下终于进入了城堡,现在出现在他面前的是一条恐怖的黑水河。河中有大量传说中的食人怪兽------法克鱿,同时还有一个N层正三角梅花桩阵,每个桩上都印有一个数字,如图所示是一个4层的正三角梅花桩阵.   Johnny Q只能从离他最近的即这个三角木桩阵的最上面一个木桩开始一个桩一个桩的跳到对岸去,每次他只能向左下或右下跳一次,跳的距离只能是一个单位步

搬家啦x 739

ESP32-S3驱动雨滴传感器实战:从原理到ADC/GPIO双模式数据采集

本文详细介绍了ESP32-S3驱动雨滴传感器的实战教程,涵盖其工作原理及ADC/GPIO双模式数据采集方法。通过解析传感器利用水的导电性检测雨量的核心机制,提供了完整的硬件连接方案与软件驱动代码,包括模拟量(AO)的ADC读取和数字量(DO)的GPIO读取,并附有调试技巧,帮助开发者快速实现雨滴检测功能。

weixin_32005771的博客 154

SDUTOJ3114-小鑫need help

小鑫need help Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 小鑫遇难了!!!小鑫被巫婆关在巫婆的地牢里了,地牢的门上有个密码锁,密码锁会显示一个字符串,密码是字符串逆序之后每个字符Ascll码的值,当然,数字是不需要转换的。 例:a3b  首先,逆序后的序列为 b3a ,‘b’的Ascll

highmath 1006

YOLOv8 ultralytics使用笔记----labelme标记数据,训练模型、追踪目标。

Ultralytics是一个Python库,它是为执行高级计算机视觉任务而创建的,如对象检测、实例分割、图像分类等。Ultralytics为YOLO模型发布了一个全新的存储库,它被构建为用于机器视觉统一框架。这里先利用,并激活。

qq_48050838的博客 1万+

诊断测试工具CANoe.DiVa从入门到精通系列——开门见山

### 工具主要用于测试ECU的诊断功能。关于自动化诊断测试可以分为如下内容: ### -> 1、根据诊断需求规范进行cdd文件的编辑(现阶段主要是诊断问卷调查表); ### -> 2、新建Diva工程,导入对应的诊断数据库文件生成测试用例; ### -> 3、新建CANoe工程,导入CANoe.DiVa生成的Diva工程; ### -> 4、根据测试报告进行错误处理。

Soly_kun的博客 3547

Need help deciding?

Need help deciding?Give your team project a name like 'calculator', or 'team awesome'.Use Agile if your team tracks development and test activities separately, or wants to compare estimated...

weixin_33772645的博客 88

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Problem  J 小鑫need help

题目描述 小鑫遇难了!!!小鑫被巫婆关在巫婆的地牢里了,地牢的门上有个密码锁,密码锁会显示一个字符串,密码是字符串逆序之后每个字符Ascll码的值,当然,数字是不需要转换的。 例:a3b 首先,逆序后的序列为 b3a ,‘b’的Ascll码为98,’3’不需要转换,’a’的Ascll码为97,所以密码为:98397。小鑫已经快要不行了,你能不能破解密码,救救他?输入 每组输入只有一行,字符串

gtoo888的博客 372

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

help viewing java_Need help on viewing Chart values

Column charts are working fine. But I am facing one issue while viewing the chart values. If two values are having a big difference between them, the lower value is not shown in the charts (which mean...

weixin_42467518的博客 101

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Need help with mp4 converter

So I'm using MP4 Converter to convert avi files to mp4, and I want to know the optimal settings for the Droid, if there are any. I did download HandBrake, but when I try to convert with it, it sh...

weixin_30411819的博客 87

Need help on a fuzzy match problem

A fuzzy match is request to perform a provider match while loading extract file from clients, the code is easy but we met an efficiency problem. On the extract file, each the provider has a not nul

西门,西门,你能不能不贱 549

正整数排序 Help is need for Dexter Uva 11384

面对刚开始没有头绪的题目, 先进行尝试往往是非常有必要的, #include <cstdio> #include <iostream> using namespace std; unsigned int cal(unsigned int n){ if (n == 1) return 0; else if (n == 2) return 1; else ret...

yihuihe 168

android闪退报错,Android release包运行时闪退[Need help]

Android release包运行时闪退 debug包没问题 报错为:E/flutter (29758): [ERROR:flutter/shell/platform/android/platform_view_android_jni.cc(39)] java.lang.UnsatisfiedLinkError: JNI_ERR returned from JNI_OnLoad in "/dat...

weixin_34392511的博客 734
上一篇: 图像合成
下一篇: .net framework 1.0.3705.0 与 1.1.4322 的小小差异
fraternity_java
博客等级 码龄22年 1粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值