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

这是一个使用VC6编写的全局鼠标钩子DLL,通过鼠标全局钩子实现在Windows上右键双击粘贴的功能,旨在提高工作效率。文章提供了详细的代码示例和DLL的使用说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值