VC++使用HOOK API 屏蔽PrintScreen键截屏以及QQ和微信默认热键截屏
转载:http://blog.csdn.net/easysec/article/details/8833457
转载:http://www.vckbase.com/module/articleContent.php?id=567&title=
用VS创建一个空的动态库(dll)工程ShieldScreen
ShieldScreen.h文件
#ifndef _SHIELDSCREEN_H_
#define _SHIELDSCREEN_H_
#include <windows.h> #ifdef _cplusplus
extern "C"
{
#endif
void WINAPI UnInstallLaunchEv();//安装钩子
void WINAPI InstallLaunchEv();//去掉钩子
#ifdef _cplusplus
};
#endif #endif
ShieldScreen.cpp文件
// ShieldScreen.cpp : Defines the exported functions for the DLL application.
// #include "stdafx.h"
#include <stdio.h> HHOOK Hook; LRESULT CALLBACK LauncherHook(int nCode, WPARAM wParam, LPARAM lParam);
void strerror(DWORD errno);
void savelog(const char* s);
extern HMODULE hHookDll; _declspec(dllexport) void WINAPI UnInstallLaunchEv()//dll的导出函数
{
UnhookWindowsHookEx(Hook);
} _declspec(dllexport)void WINAPI InstallLaunchEv()//dll的导出函数
{
Hook = SetWindowsHookEx(WH_KEYBOARD_LL,(HOOKPROC)LauncherHook,hHookDll,); if (Hook == NULL)
{
strerror(GetLastError());
}
} LRESULT CALLBACK LauncherHook(int nCode, WPARAM wParam, LPARAM lParam)
{
KBDLLHOOKSTRUCT *Key_Info = (KBDLLHOOKSTRUCT*)lParam; if (nCode == HC_ACTION)
{
if ( WM_KEYDOWN == wParam || WM_SYSKEYDOWN == wParam )
{
BOOL b_lctrl = ::GetAsyncKeyState(VK_LCONTROL) ;//如果左边Ctrl按下
BOOL b_rctrl = ::GetAsyncKeyState(VK_RCONTROL) ;//如果右边Ctrl按下
BOOL b_lAlt = ::GetAsyncKeyState(VK_LMENU) ;//如果左边Alt按下
BOOL b_rAlt = ::GetAsyncKeyState(VK_RMENU) ;//如果右边Alt按下 if ( Key_Info->vkCode == VK_SNAPSHOT )
{
return TRUE;
}
else if (b_lctrl && b_lAlt)
{
switch (wParam)
{
case : //('A')
break;
default:
break;
}
return TRUE;
}
else if (b_rctrl && b_rAlt)
{
switch (wParam)
{
case ://('A')
break;
default:
break;
}
return TRUE;
}
else if (b_lAlt)
{
switch (wParam)
{
case ://('A')
break;
default:
break;
}
return TRUE;
}
else if (b_rAlt)
{
switch (wParam)
{
case ://('A')
break;
default:
break;
}
return TRUE;
}
}
} return CallNextHookEx(Hook,nCode,wParam,lParam);
} void savelog(const char* s)//向D盘根目录下的my.log文件写log信息
{
FILE* p;
errno_t err= fopen_s(&p,"D:\\my.log", "a+");//在d盘根目录下生成my.log文件
fputs(s,p);//fputs是一种函数,具有的功能是向指定的文件写入一个字符串(不自动写入字符串结束标记符‘\0’)。成功写入一个字符串后,文件的位置指针会自动后移,函数返回值为非负整数
fclose(p);
} void strerror(DWORD errno)//根据GetLastError()返回值,将错误信息转化为中文,写入my.log文件
{
void *lpMsgBuf;
FormatMessageA(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
errno,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(char *) &lpMsgBuf,
,
NULL
); savelog((const char *)lpMsgBuf);
// Free the buffer.
LocalFree( lpMsgBuf );
}
在dllmain文件中加入红色字体代码
// dllmain.cpp : Defines the entry point for the DLL application.
#include "stdafx.h" HMODULE hHookDll;//定义一个全局的HMODULE供SetWindowsHookEx函数使用 BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
hHookDll = hModule; switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
使用拦截dll,在你的程序中导入ShieldScreen.h文件,把ShieldScreen.dll放到 exe目录下,把ShieldScreen.lib放到工程目录下,同时加上导入库pragma comment(lib, "ShieldScreen.lib");
在初始化函数处
InstallLaunchEv();//安装钩子
在程序退出处
UnInstallLaunchEv();//取消钩子
VC++使用HOOK API 屏蔽PrintScreen键截屏以及QQ和微信默认热键截屏的更多相关文章
- HOOK API (一)——HOOK基础+一个鼠标钩子实例
HOOK API (一)——HOOK基础+一个鼠标钩子实例 0x00 起因 最近在做毕业设计,有一个功能是需要实现对剪切板的监控和进程的防终止保护.原本想从内核层实现,但没有头绪.最后决定从调用层入手 ...
- 数据防泄漏 | 禁止PrintScreen键
在数据防泄漏软件,通常会禁止 PrintScreen 键,防止通过截屏来将数据保存为图片而导致泄密. 这类软件如果想要实现是比较简单的,但是想要将功能做的强大些,还是需要下功夫的.以前使用过一款数据防 ...
- Android系统onKeyDown监控/拦截/监听/屏蔽返回键、菜单键和Home键
在Android系统中用来显示界面的组件(Component)为Activity,也就是说只有重写Activity的onKeyDown方法来监控/拦截/屏蔽系统的返回键(back).菜单键(Menu) ...
- HOOK API 在多线程时应该注意的问题点
在使用INLINE HOOK API实现对系统API的拦截时,正常情况下并没有太大问题,但一旦涉及到多线程,不管是修改IAT还是JMP,2种方法均会出现不可预料的问题,特别是在HOOK一些复杂的大型系 ...
- QDialog之屏蔽Esc键
简述 Qt中Esc键会在一些控件中默认的进行一些事件的触发,比如:QDialog,按下Esc键窗口消失.大多数情况下,我们不需要这么做,那么就需要对默认事件进行屏蔽. 简述 源码分析 事件过滤器 事件 ...
- MFC非模态对话框中屏蔽ESC键
个人的编程经验认为:对于非模态对话框,按下ESC键和点击红叉都会响应OnCancel()函数,而不会去响应OnClose()函数. 我们都知道,如果想屏蔽Enter键,只须重写OnOK()函数即可(重 ...
- 【Qt】QDialog之屏蔽Esc键【转】
简述 Qt中Esc键会在一些控件中默认的进行一些事件的触发,比如:QDialog,按下Esc键窗口消失.大多数情况下,我们不需要这么做,那么就需要对默认事件进行屏蔽. 简述 源码分析 事件过滤器 事件 ...
- 汇编Ring 3下实现 HOOK API
[文章标题]汇编ring3下实现HOOK API [文章作者]nohacks(非安全,hacker0058) [作者主页]hacker0058.ys168.com [文章出处]看雪论坛(bbs.ped ...
- Andorid4.x 流氓式屏蔽HOME键
转载请列明出处 http://blog.csdn.net/steelychen/article/details/37757341 应用项目须要要屏蔽HOME键. 项目本身的要求是让按下HOME键后程序 ...
随机推荐
- .net Asp AdRotator(广告控件)
1.新建项目名称AdRotator 2.右键项目名称添加一个xml文件命名为AdRotator.xml <?xml version="1.0" encoding=" ...
- angularJS的过滤器!
angularJS过滤器: filter currency date filter json limitTo lowercase number orderBy uppercase ...... Fil ...
- 神奇的随机数rand()
随机数在统计理论中占有很重要的地位,很多应用都需要用到他,系统自带的rand()函数产生的是伪随机数,所以该如何真正的随机数呢? 1.c语言中的时间函数 关于c语言我查到的两个比较好的博文是:http ...
- 170623、springboot编程之JdbcTemplate操作数据库
使用JdbcTemplate操作mysql数据库! 1.在pom中引入jpa包 <dependency> <groupId>org.springframework.boot&l ...
- Java类集框架——List接口
学习目标 掌握List接口与Collection接口的关系. 掌握List接口的常用子类:ArrayList.Vector. 掌握ArrayList与Vector类的区别. Collection ...
- python threading.thread
Thread 是threading模块中最重要的类之一,可以使用它来创建线程.有两种方式来创建线程:一种是通过继承Thread类,重写它的run方法:另一种是创建一个threading.Thread对 ...
- Ora-1157 ora-1110错误解决案例一枚
1.数据库打开报错如下: SQL> alter database open; alter database open * ERROR at line 1: ORA-01157: cannot i ...
- Web开发:URL编码与解码(转)
原文:http://www.cnblogs.com/greatverve/archive/2011/12/12/URL-Encoding-Decoding.html 通常如果一样东西需要编码,说明这样 ...
- Git学习-->GitLab如何修改时区?
一.背景 今天有同事在GitLab上查看时间的时候,发现GitLab上显示的时间和提交的时间不一致. 本地时间现在为:2017-11-28 11:43 查看本地代码提交的时间为:2017-11-28 ...
- 【云安全与同态加密_调研分析(8)】同态加密技术及其应用分析——By Me
◆同态加密技术(Homomorphic Encryption, HE)及其应用◆ ◆加密方案◆ ◆应用领域◆ ◆厂商◆ ◆同态加密现有产品形态和工程实现◆ ◆参考链接◆ ◆备注(其他参考信息)◆ 同态 ...