全局钩子不全局?
#include "stdafx.h"
#pragma data_seg("ShareData")
HHOOK ghMouseHook=NULL;
HINSTANCE ghInstance=NULL;
HWND ghWnd=NULL;
#pragma data_seg()
#define WM_MOUSEINFO WM_USER + 100
//---------------------------------------------------------------------------
struct MOUSEINFO
{
HANDLE mhWnd; //鼠标停留窗口句柄
int miPosX;
int miPosY;
};
extern "C" __declspec(dllexport) void SetWindowHandle(HANDLE ahWnd);
extern "C" __declspec(dllexport) int StartGetWord();
extern "C" __declspec(dllexport) int StopGetWord();
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
ghInstance = (HINSTANCE)hModule;
case DLL_THREAD_DETACH:
if (ghMouseHook != NULL)
{
UnhookWindowsHookEx(ghMouseHook);
ghMouseHook = NULL;
}
}
return TRUE;
}
LRESULT CALLBACK MyHookProc(int aiCode ,WPARAM wParam,LPARAM lParam)
{
if(aiCode<0)
return CallNextHookEx(ghMouseHook,aiCode,wParam,lParam);
LPMOUSEHOOKSTRUCT lpMouse=(MOUSEHOOKSTRUCT *)lParam;
MOUSEINFO * lpInfo = new MOUSEINFO;
lpInfo->mhWnd = lpMouse->hwnd;
lpInfo->miPosX = lpMouse->pt.x;
lpInfo->miPosY = lpMouse->pt.y;
::SendMessage(ghWnd,WM_MOUSEINFO,(WPARAM)lpInfo,0);
delete lpInfo;
return CallNextHookEx(ghMouseHook,aiCode,wParam,lParam);
}
extern "C" void SetWindowHandle(HANDLE ahWnd)
{
ghWnd = (HWND)ahWnd;
}
extern "C" int StartGetWord()
{
ghMouseHook = SetWindowsHookEx(WH_MOUSE,(HOOKPROC)MyHookProc,ghInstance,NULL);
if(ghMouseHook == NULL)
return 1;
return 0;
}
extern "C" int StopGetWord()
{
if(ghMouseHook != NULL)
{
UnhookWindowsHookEx(ghMouseHook);
ghMouseHook = NULL;
}
return 0;
}
我用BCB做的exe程序调用,装载钩子后钩子只在这个exe程序活动,鼠标在这个程序的窗口中才会接收到dll发送来的消息。鼠标移到exe程序外的其他程序就没有消息了。
相关推荐
基于springboot+vue的摄影作品社区(项目源码)
基于springboot+vue的摄影作品社区(项目源码) 系统采用前后端分离的 B/S 架构。后端基于 Spring Boot 2.7.2 与 Java 1.8 构建,以 MyBatis-Plus 完成数据访问、PageHelper 实现分页,用 MySQL 8 存储业务数据;身份认证采用 Sa-Token 轻量级框架并整合 JWT 令牌,配合 Redis 实现图形验证码缓存与会话存储;前端使用 Vue 3 与 Naive UI 构建界面,由 Vite 完成构建,看板统计图表基于 ECharts 渲染。系统面向普通用户与管理员两类角色:用户端提供注册登录、作品上传与归档、多条件检索浏览、作品集管理、分类与标签管理、摄影圈专题、回收站、个人设置与公告查看等功能;管理端提供数据看板、用户管理与公告管理等功能。
Vue基于springboot的乡村生态旅游平台_k2864o48毕业设计源码数据库.zip
Vue基于springboot的乡村生态旅游平台_k2864o48毕业设计源码数据库
Python3 datetime时区避坑指南
原生datetime.now()获取本地时间,不带时区属性,属于 naive时间,跨服务器比对会报错。带时区时间使用datetime.astimezone,强制绑定东八区时区。禁止手动加减8小时修改时差,夏令时更新会导致时间错误。时间计算:timedelta直接实现天数、小时增减,无需手动换算秒数。字符串解析使用strptime,格式化使用strftime,格式符号严格区分大小写,%Y四位年份、%y两位年份极易写错。线上时间异常大多源于时区不统一。 yc.ahsalar.com qsvsnks.yihucx.com tongjiang.xilaohan.com lq.aasmile.com xj.banutech.net
前端开发基于history.js的HTML5与HTML4浏览器兼容方案:单页应用无刷新历史状态管理技术实现-jcbbroJ3l1792421687
内容概要:本文系统介绍了如何利用history.js实现单页应用(SPA)在HTML5c与HTML4浏览器间s草错发的无缝历史状态管理。通过封装原生History API并在不支持的浏览器中自动降级为哈希路由,history.js解决了因浏览器兼容性导致的后退按钮失效、URL混乱等问题。文章详细讲解了其核心机制,包括状态对象管理、自动模式切换(HTML5 pushState vs HTML4 哈希)、状态数据持久化以及针,对Safari、IE等浏\览器的兼容性修复方案,并提供了从入门到实战的完整示例,涵盖初始化、事,件监听、页面加载及性能优化技巧。;jcbbroJ3l1792421687 www.kfshiye.com www.wap.kfstjx.com www.kuaicai-mro.com lianyingjs.com www.kdd888.com
MATLAB实现了约束感知混合水波和灰狼优化,用于作物规划。.zip
1.版本:matlab2014a/2019b/2024b 2.附赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。


