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

原创 2004年09月18日 21:00:00

http://blog.csdn.net/booolee/archive/2004/09/18/109005.aspx

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

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


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

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

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

 

/********************************************************************/
/* 文件名: MyMouseHook.cpp           */
/*                 */
/* 功能: 标准 DLL ---- 利用鼠标全局钩子实现右键双击粘贴功能   */
/*                 */
/* 作者: 李博 (booolee)   时间: 2004.9.18      */
/*                 */
/* BLOG: http://blog.csdn.net/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.csdn.net/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

如何屏蔽ctrl + v 粘贴事件,鼠标右键粘贴事件

通常在自己的APP里的密码框,验证码框需要屏蔽复制,粘贴,怎么办呢? 有三...
  • tiandyoin
  • tiandyoin
  • 2014年09月22日 12:11
  • 2071

XShell鼠标选中, 实现快捷复制和粘贴

Xshell鼠标实现快捷复制和粘贴, 增加Ctrl+v粘贴快捷键.
  • qq_29307291
  • qq_29307291
  • 2017年03月24日 11:33
  • 2276

解决在Vim中鼠标右键不能粘贴

最近维护一台服务器,使用xshell登录后,用vim时,鼠标右键不能粘贴而是进入了visual模式。网上查找一番找到了解决方法: 方法一:在普通模式下键入“ :set mouse-=a”(不包括引号)...
  • A67732711
  • A67732711
  • 2014年10月08日 21:06
  • 794

鼠标全局钩子

转自:http://www.tuicool.com/articles/BfAZna 有问题:在dllmain.h文件中加上extern HINSTANCE glhInstance;不然它总是找不...
  • yuanboshuai
  • yuanboshuai
  • 2017年02月17日 17:21
  • 1341

VC++全局钩子实现鼠标坐标值实时捕获

自从使用.NET WinForm后已经很长时间没用VC++ MFC写过程序了,今天一问友给出一道VC++的题。 题目:使用钩子(HOOK)实现鼠标在屏幕上移动时实时捕获当前位置坐标,并在程序对话框的...
  • u010561359
  • u010561359
  • 2013年05月28日 21:45
  • 2566

matlab中关于pushbotton的左键双击响应问题

如注释所示,我想在按钮上实现四种点击响应,在运行的时候,其它的都行,就是无法实现“左键双击变蓝色”的效果,程序也没有任何报错信息,求大侠指点下到底是烦什么?怎么修改?如果有更好的办法的话我会提高悬赏的...
  • SMF0504
  • SMF0504
  • 2016年07月06日 22:53
  • 1237

MFC picture control响应单击、双击、右键

MFC响应单击、双击、右键,不只是picture可以使用,其他控件也是类似用法 可以实现图片双击放大等特殊功能添加消息响应函数类视图-对话框类-右键类向导 图中从上往下6个依次为 左键双击、...
  • why19940926
  • why19940926
  • 2017年01月12日 20:44
  • 1823

MFC动态链接库以及全局钩子函数操作

动态链接库有两种加载方式:隐式链接加载动态链接库和动态加载动态链接库。     1、隐式链接加载动态链接库     如果有XXX.h ,XXX.lib ,XXX.dll,这样就可以隐式链接加载了。  ...
  • liuyi1207164339
  • liuyi1207164339
  • 2015年07月06日 10:41
  • 1219

解决vim中鼠标右键无法复制的问题

转自:http://www.cnblogs.com/pengdonglin137/p/3485062.html 阅读目录(Content) 选择缓冲区和剪切板原格式粘贴vim中的复制vim...
  • csCrazybing
  • csCrazybing
  • 2016年02月05日 17:53
  • 3894

C#全局键盘钩子

using System; using System.Collections.Generic; using System.Diagnostics; using System.Runtime.Inter...
  • hoopmac
  • hoopmac
  • 2013年10月15日 18:18
  • 953
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用全局鼠标钩子实现右键双击粘贴操作
举报原因:
原因补充:

(最多只允许输入30个字)