转载: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和微信默认热键截屏的更多相关文章

  1. HOOK API (一)——HOOK基础+一个鼠标钩子实例

    HOOK API (一)——HOOK基础+一个鼠标钩子实例 0x00 起因 最近在做毕业设计,有一个功能是需要实现对剪切板的监控和进程的防终止保护.原本想从内核层实现,但没有头绪.最后决定从调用层入手 ...

  2. 数据防泄漏 | 禁止PrintScreen键

    在数据防泄漏软件,通常会禁止 PrintScreen 键,防止通过截屏来将数据保存为图片而导致泄密. 这类软件如果想要实现是比较简单的,但是想要将功能做的强大些,还是需要下功夫的.以前使用过一款数据防 ...

  3. Android系统onKeyDown监控/拦截/监听/屏蔽返回键、菜单键和Home键

    在Android系统中用来显示界面的组件(Component)为Activity,也就是说只有重写Activity的onKeyDown方法来监控/拦截/屏蔽系统的返回键(back).菜单键(Menu) ...

  4. HOOK API 在多线程时应该注意的问题点

    在使用INLINE HOOK API实现对系统API的拦截时,正常情况下并没有太大问题,但一旦涉及到多线程,不管是修改IAT还是JMP,2种方法均会出现不可预料的问题,特别是在HOOK一些复杂的大型系 ...

  5. QDialog之屏蔽Esc键

    简述 Qt中Esc键会在一些控件中默认的进行一些事件的触发,比如:QDialog,按下Esc键窗口消失.大多数情况下,我们不需要这么做,那么就需要对默认事件进行屏蔽. 简述 源码分析 事件过滤器 事件 ...

  6. MFC非模态对话框中屏蔽ESC键

    个人的编程经验认为:对于非模态对话框,按下ESC键和点击红叉都会响应OnCancel()函数,而不会去响应OnClose()函数. 我们都知道,如果想屏蔽Enter键,只须重写OnOK()函数即可(重 ...

  7. 【Qt】QDialog之屏蔽Esc键【转】

    简述 Qt中Esc键会在一些控件中默认的进行一些事件的触发,比如:QDialog,按下Esc键窗口消失.大多数情况下,我们不需要这么做,那么就需要对默认事件进行屏蔽. 简述 源码分析 事件过滤器 事件 ...

  8. 汇编Ring 3下实现 HOOK API

    [文章标题]汇编ring3下实现HOOK API [文章作者]nohacks(非安全,hacker0058) [作者主页]hacker0058.ys168.com [文章出处]看雪论坛(bbs.ped ...

  9. Andorid4.x 流氓式屏蔽HOME键

    转载请列明出处 http://blog.csdn.net/steelychen/article/details/37757341 应用项目须要要屏蔽HOME键. 项目本身的要求是让按下HOME键后程序 ...

随机推荐

  1. <转>主成分分析(Principal components analysis)-最大方差解释,最小平方差解释

    转自http://www.cnblogs.com/jerrylead/archive/2011/04/18/2020209.html http://www.cnblogs.com/jerrylead/ ...

  2. Eclipse版GoogleI/O2014开源项目

    https://github.com/google/iosched谷歌原版是Gradle工程,用Eclipse开发的导入不了,所以搞了一个Elicpse工程,依赖的jar.库比较多,也比较难找... ...

  3. [转]C++结构体|类 内存对齐详解

    内存地址对齐,是一种在计算机内存中排列数据(表现为变量的地址).访问数据(表现为CPU读取数据)的一种方式,包含了两种相互独立又相互关联的部分:基本数据对齐和结构体数据对齐 . 为什么需要内存对齐?对 ...

  4. fabric入门

    author: headsen  chen date: 2018-08-12  23:13:16 1,安装 yum -y install epel-releaseyum -y install fabr ...

  5. Lucene中最简单的索引和搜索示例

    package com.jiaoyiping.lucene; import org.apache.lucene.analysis.standard.StandardAnalyzer; import o ...

  6. Android数据存储之SQLite 数据库学习

    Android提供了五种存取数据的方式 (1)SharedPreference,存放较少的五种类型的数据,只能在同一个包内使用,生成XML的格式存放在设备中 (2) SQLite数据库,存放各种数据, ...

  7. zabbix debug and vulnerability https://www.zabbix.com/documentation/3.0/manual/concepts/sender

    https://www.zabbix.com/documentation/3.0/manual/concepts/sender zabbix--- zabbix_sender -vv -z 172.2 ...

  8. 人工智能(Machine Learning)—— 机器学习

    https://blog.csdn.net/luyao_cxy/article/details/82383091 转载:https://blog.csdn.net/qq_27297393/articl ...

  9. iOS定位原理和使用建议(转)

    原文:http://ibbs.91.com/thread-1548870-1-1.html 看到很多网友讨论iOS设备定位的问题,这里将我们所了解的关于iPhone.iPad.iPod等的定位原理做详 ...

  10. 数据库SQL优化大总结之百万级数据库优化方案(转)

    add by zhj: 作者没有指定是哪个数据库,这只是一个近似通用的总结.对于某个特定的数据库,有些条目可能并不适用. 原文:http://www.cnblogs.com/yunfeifei/p/3 ...