双击鼠标HOOK学习
前一阵子换了一个好看的桌面,但是图标太多挡住了很不高兴,在桌面点右键,隐藏桌面图片很麻烦,于是想做一个小软件一键隐藏、显示桌面图标,好让我欣赏壁纸。
鉴于这阵子学习C语言,就用C++写一个程序。暂定为双击鼠标右键,隐藏桌面图标。
查询得知,需要关键的技术为HOOK。于是开始动工。
首先,要解决的是如何执行隐藏操作。
鉴于之前做过一个类似的C#程序,我先尝试了模拟按键:找到桌面的句柄后,依次按下,鼠标右键(或菜单键)、查看(快捷键V)、显示桌面图标(快捷键D)。经过百般尝试,最终得出结论,我对桌面发送右键可以执行,紧接着的模拟键盘都不成功,按键应该对应菜单项的句柄才能发送。我暂时放弃了这个方法。
然后经过SPY++捕捉系统消息,查阅msdn得出了一个消息ShowWindow(hwnd,SW_HIDE); 这个消息可以隐藏桌面,测试通过。
然后,解决响应鼠标双击。
写了一个简单的HOOK程序,使用MH_MOUSE_LL全局鼠标钩子,无需DLL注入。测试单击左键右键,配合ShowWindow这个消息,已经可以显示隐藏桌面图标了。但是对于双击鼠标,程序始终没有响应。查阅资料得知,MH_MOUSE_LL方法虽然省事,但是他能捕获到的鼠标消息只有,单击,移动,并没有双击这个消息。
我还走了一段弯路,以为console程序就不支持鼠标双击事件,还写了一个MFC窗口,才发现,支持的双击仅限于在窗口本身操作,并是不我想要的HOOK全局双击。
既然没有双击,解决方案就两种,一是自己写个计时器,来监控两次单击的时间间隔;另一种是改用MH_GETMESSAGE DLL注入全局拦截双击事件。这里我选用第一种,最终完成,代码如下。
#include "stdafx.h"
#include <windows.h>DWORD lastTime;
BOOL lastIsRight=FALSE;
BOOL isHiden=FALSE; //定义为全局变量,每次点击保证重新载入值
LRESULT CALLBACK LowLevelMouseProc(int nCode,WPARAM wParam,LPARAM lParam)
{typedef void (WINAPI *PSWITCHTOTHISWINDOW) (HWND,BOOL);
PSWITCHTOTHISWINDOW SwitchToThisWindow;
HMODULE hUser32=GetModuleHandle(_T("user32"));
//载入窗口前置函数
SwitchToThisWindow=(PSWITCHTOTHISWINDOW)GetProcAddress(hUser32,"SwitchToThisWindow");
HWND hwnd =FindWindow(_T("Progman"),NULL);
hwnd = FindWindowEx(hwnd, NULL, _T("SHELLDLL_DefView"), NULL);
hwnd = FindWindowEx(hwnd, NULL, _T("SysListView32"), NULL);
//桌面句柄查找
if(hwnd!=NULL){ if (nCode>=0){ if(wParam==WM_RBUTTONUP){if(!lastIsRight){lastTime=::GetTickCount();lastIsRight=TRUE;}else{DWORD nowTime=::GetTickCount();if(nowTime-lastTime<350)//时间间隔为350ms{if(!isHiden) {ShowWindow(hwnd,SW_HIDE);isHiden=TRUE;}else {ShowWindow(hwnd,SW_SHOW);isHiden=FALSE;}lastIsRight=FALSE;}elselastTime=nowTime;}}}
}return CallNextHookEx(0,nCode,wParam,lParam);
}int _tmain(int argc, _TCHAR* argv[])
{MSG msg;SetWindowsHookExW(WH_MOUSE_LL,LowLevelMouseProc,GetModuleHandleW(0),0);while(GetMessageW(&msg,0,0,0))DispatchMessageW(&msg);return 0;
}
双击鼠标HOOK学习相关推荐
- PC微信hook学习笔记(一)—— 获取个人信息
PC微信hook学习笔记(一)-- 获取微信个人信息 1 起步 2. 获取基址 2.1 用CE查看个人信息 2.1.1 获取昵称基址 2.1.2 dll模块基址 2.2 用OD查看个人信息 2.3 内 ...
- 如何实现listbox选项,然后双击鼠标实现选项的删除
如何实现双击鼠标左键然后删除列表框中的选项呢? 只需要两步: 第一步,建立listbox控件与鼠标事件的绑定并给一个跳转函数; 如本例中的listbox控件,绑定事件'<Double-Butto ...
- 在VMware中,双击鼠标左键,ctrl键粘滞问题
在虚拟机下开发程序时,发现键盘输入异常.后发现是双击鼠标左键时,ctrl键粘滞所致. 网上搜索解决方案是: 在VMvare中 选择"虚拟机" -> "设置" ...
- vue判断是否双击_vue双击事件2.0事件监听(点击-双击-鼠标事件)和事件修饰符操作...
Vue 事件处理方法 可以用 v-on 指令监听 DOM 事件,并在触发时运行一些 JavaScript 代码. v-on:click 单击事件 + + - - v-on:dblclick 双击事件 ...
- JavaScript---解决单击、双击鼠标冲突
问题描述:一般情况下,双击鼠标一次会执行两次单击鼠标事件和一次双击鼠标事件,那么在双击鼠标时如何阻止两次单击鼠标事件的发生呢? 解决方法:设置定时器,当第一次点击鼠标时,记录下点击的时间,并设置单击事 ...
- 桌面文件夹和计算机打不开怎么办,电脑双击鼠标无法打开桌面文件或文件夹怎么办...
我们在使用电脑的时候,都知道一个最基本的常识,就是打开软件必须需要双击图标,然后程序就会自动运行,但是有时候我们双击却意外弹出了程序的属性界面,不能直接打开,必须右击程序,选择打开程序才能运行程序,这 ...
- JavaScript 双击鼠标滚动屏幕的代码
uusee下载,uusee2012pptv下载usee播放器精美图片中国无线论坛电脑知识与技术vagaa哇嘎电影,vagaa哇嘎电影下载sou狗麦克疯破解版uusee网络电视2011pipi 下载uu ...
- 天正双击墙体不能编辑_VBA让双击鼠标干点别的事情
今天早上,微信群有人咨询 选中单元格后,双击不再编辑,而是复制,能不能用vba做到? 这个是可以的. 在excel中,如果直接双击单元格,会进入单元格的编辑状态,然后可以开始输入内容或者修改单元格的内 ...
- python opencv 双击鼠标绘制圆
10-python opencv 双击鼠标绘制圆 10-python opencv 双击鼠标绘制圆 概述 实现过程 引用与创建空图 设置回调函数 回调上述函数 显示图像 源代码 运行结果 参考 概述 ...
最新文章
- bireme数据源同步工具--debezium+kafka+bireme
- 前嗅ForeSpider教程:网站登录配置
- linux php后门,Linux_一个初级的linux后门制作方法,众所周知,Linux的文件权限如: - phpStudy...
- shell脚本详解(六)——数组简介和排序算法
- Mysql配置参数常见问题
- 华为手机下拉菜单变大_手机投屏到电视最好的方法和手机可同屏也可电视当电脑手机当鼠标...
- 今天是个特殊的日子,养活我的Java爸爸诞生,发送一波福利!
- maven-3.5.3通过eclipse打包问题(1)
- IDEA里面添加lombok插件,编写简略风格Java代码(转)
- python读取同花顺数据_python爬取同花顺数据
- flask之session、cookie摘抄笔记
- 微信公众号上传永久图片素材
- LeetCode,无它,唯手熟尔(二)
- python之表白神器--组图拼爱心墙
- 免费内网穿透端口映射工具-网络通
- 路飞学城结算中心实现
- 恢复误删的 TiDB 集群
- 没看错!用游戏测试人工智能。
- 使用Latex进行中文排版
- 广州大学学生实验报告,数据结构实验,二叉树的操作与实现
热门文章
- MySQL系列之优化——1.优化哲学、2. 优化工具的使用、3. 优化思路分解、4. MySQL参数优化测试、5.1 参数优化、6. 参数优化结果、7. 锁的监控及处理、8. 主从优化
- Java——BorderLayout边界布局
- CString,string,char*,char[],GetBuffer(int)
- stm32 串口发数据 0x00 变 0x80
- 中国稀土矿的成分和稀土选矿方法介绍
- http错误403 禁止_什么是403禁止的错误(以及如何解决)?
- pxe装机原理_pxe装机部署
- 请简述什么是事务?事务有哪些属性?
- 【PTM】ELMo:通过预训练语言模型生成词向量
- Mysql下载安装详细流程(超实用)