转载: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. stringstream读入每行数据

    做了下阿里的编程测试题,就30分钟,不是正常的输入输入,直接给一个数组作为输入. 于是带想题和处理数据花了20分钟,最后10分钟搞一个dij模版, 竟然只过了66%,应该是我数组开小了. 题目数据量没 ...

  2. LeetCode——Search a 2D Matrix II

    Description: Write an efficient algorithm that searches for a value in an m x n matrix. This matrix ...

  3. [Bootstrap] install Bootstrap framework in window 7 by npm

    Install with npm You can also install Bootstrap using npm: $ npm install bootstrap require('bootstra ...

  4. HDCMS做异步加载!

    控制器的写法: //ajax 请求新闻列表 public function ajaxnewsList(){ $data = Q('sum'); $newsList = M('xinwen')-> ...

  5. 用CMAKE编译配置的项目进行调试的方法

    在Linux 下用CMAKE编译的项目进行Debug 需进行设置: 1.在未设置之前 进行调试可能会出现错误报告:No source available for ...等一系列错误,这些错误可能就是你 ...

  6. CentOS7.4使用yum安装MySQL5.6

    CentOS默认数据库为mariadb可以使用yum安装MySQL5.6 系统版本查看 下载yum源安装 wget http://dev.mysql.com/get/mysql-community-r ...

  7. pta 习题集 数列求和-加强版

    给定某数字AA(1≤A≤91≤A≤9)以及非负整数NN(0≤N≤1000000≤N≤100000),求数列之和S=A+AA+AAA+⋯+AA⋯AS=A+AA+AAA+⋯+AA⋯A(NN个AA).例如A ...

  8. 修改Docker默认存储位置的方法

    在日常使用中由于我们的根目录通常都比较小,如果想大量存储容器镜像的话很容易导致根目录写满 docker 默认的数据目录是/var/lib/docker 我们想要移动数据目录可以按照下面说明操作即可. ...

  9. 聪明的打字员---poj1184(bfs)

    题目链接:http://poj.org/problem?id=1184 分析:首先可以发现有6*10^6种状态,比较多,不过搜索的时候可以去除一些无用的状态, 可以发现一个点的值(2-5)如果想要改变 ...

  10. Python开发【模块】:matplotlib 绘制折线图

    matplotlib 1.安装matplotlib ① linux系统安装 # 安装matplotlib模块 $ sudo apt-get install python3-matplotlib # 如 ...