社区
Delphi
帖子详情
关于键盘hook的问题
yansea
2002-06-03 09:07:30
关于键盘hook的问题
在使用键盘hook的过程中,我有这样的问题。
已经能够拦截到按下的键,但是对于.'[=\等字符总是得到半个字符,就是乱码,并且小键盘输入数字时得到的竟然是abcd之类的字母而不是数字,这是怎么回事,怎么解决呢?另外怎么处理那些按住shift后得到的字符呢?
谢谢各位!
...全文
61
10
打赏
收藏
关于键盘hook的问题
关于键盘hook的问题 在使用键盘hook的过程中,我有这样的问题。 已经能够拦截到按下的键,但是对于.'[=\等字符总是得到半个字符,就是乱码,并且小键盘输入数字时得到的竟然是abcd之类的字母而不是数字,这是怎么回事,怎么解决呢?另外怎么处理那些按住shift后得到的字符呢? 谢谢各位!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
yansea
2002-06-03
打赏
举报
回复
快来看看啊~~~~~
yansea
2002-06-03
打赏
举报
回复
to xmlord(护戒使者)
这个问题应该可以解决。利用hook链合作特性的机制,在输入密码时挂上你的hook(保证你的hook是最好一个挂上的),并且不调用callnexthook,这样hook链就短了,别人也就无法取得你的键盘输入了。但是在win2000下好象不行,2000下都是由系统维护的~~~~
我的问题有没有人解决啊~~~~~~~~~~~
xmlord
2002-06-03
打赏
举报
回复
我也有个问题
就是要在输密码的时候检查是否有人在使用hook监视我的击键动作
或者直接也用hook临时接管键盘,可否实现?
yansea
2002-06-03
打赏
举报
回复
怎么没有人理我~~~~~~~~帮帮忙啊
yansea
2002-06-03
打赏
举报
回复
我倒!这段代码看来是人人都有啊~~~~~~~不过它也有我遇到的问题!另外这段代码有非常严重的问题,它不能维持hook链的完整!!
请大家帮帮忙啊~~~~~~~~~
naughtyboy
2002-06-03
打赏
举报
回复
利用hook实现键盘监控
一、Hook(钩子)的实现:
---- Hook是应用程序在Microsoft Windows 消息处理过程中设置的用来监控消息流并且
处理系统中尚未到达目的窗口的某一类型消息过程的机制。如果Hook过程在应用程序中
实现,若应用程序不是当前窗口时,该Hook就不起作用;如果Hook在DLL中实现,程序在
运行中动态调用它,它能实时对系统进行监控。根据需要,我们采用的是在DLL中实现H
ook的方式。
---- 1.新建一个导出两个函数的DLL文件,在hookproc.pas中定义了钩子具体实现过程
。代码如下:
library keyspy;
uses
windows, messages, hookproc in 'hookproc.pas';
exports
setkeyhook,
endkeyhook;
begin
nexthookproc:=0;
procsaveexit:=exitproc;
exitproc:=@keyhookexit;
end.
2.在Hookproc.pas中实现了钩子具体过程:
unit hookproc;
interface
uses
Windows, Messages, SysUtils, Controls, StdCtrls;
var
nexthookproc:hhook;
procsaveexit:pointer;
function keyboardhook(icode:integer;wparam:wparam;
lparam:lparam):lresult;stdcall;export;
function setkeyhook:bool;export;//加载钩子
function endkeyhook:bool;export;// 对 钩子
procedure keyhookexit;far;
const
afilename='c:\debug.txt';//将键盘输入动作写入文件中
var
debugfile:textfile;
implementation
function keyboardhookhandler(icode:integer;wparam:wparam;
lparam:lparam):lresult;stdcall;export;
begin
if icode<0 then
begin
result:=callnexthookex(hnexthookproc,icode,wparam,lparam);
exit;
end;
assignfile(debugfile,afilename);
append(debugfile);
if getkeystate(vk_return)<0 then
begin
writeln(debugfile,'');
write(debugfile,char(wparam));
end
else
write(debugfile,char(wparam));
closefile(debugfile);
result:=0;
end;
function endkeyhook:bool;export;
begin
if nexthookproc<>0 then begin
unhookwindowshookex(nexthookproc);
nexthookproc:=0;
messagebeep(0); end;
result:=hnexthookproc=0;
end;
procedure keyhookexit;far;
begin
if nexthookproc<>0 then endkeyhook;
exitproc:=procsaveexit; end;
end.
---- 二、Win95/98使用任务栏右方指示区来显示应用程序或工具图标对指示区图标的操
作涉及了一个API函数Shell_NotifyIcon,它有两个参数,一个是指向TnotifyIconData
结构的指针,另一个是要添加、删除、改动图标的标志。通过该函函数将应用程序的图
标添加到指示区中,使其作为图标运行,增加专业特色。当程序起动后,用鼠标右键点击
图标,则弹出一个菜单,可选择sethook或endhook。
unit kb;
interface
uses
Windows, Messages, SysUtils, Classes,
Graphics, Controls, Forms,
Dialogs,
StdCtrls, Menus,shellapi;
const
icon_id=1;
MI_iconevent=wm_user+1;//定义一个用户消息
type
TForm1 = class(TForm)
PopupMenu1: TPopupMenu;
sethook1: TMenuItem;
endhook1: TMenuItem;
N1: TMenuItem;
About1: TMenuItem;
Close1: TMenuItem;
Gettext1: TMenuItem;
procedure FormCreate(Sender: TObject);
procedure sethook1Click(Sender: TObject);
procedure endhook1Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Close1Click(Sender: TObject);
private
{ Private declarations }
nid:tnotifyicondata;
normalicon:ticon;
public
{ Public declarations }
procedure icontray(var msg:tmessage);
message mi_iconevent;
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
function setkeyhook:bool;external 'keyspy.dll';
function endkeyhook:bool;external 'keyspy.dll';
procedure tform1.icontray(var msg:tmessage);
var
pt:tpoint;
begin
if msg.lparam=wm_lbuttondown then
sethook1click(self);
if msg.LParam=wm_rbuttondown then
begin
getcursorpos(pt);
setforegroundwindow(handle);
popupmenu1.popup(pt.x,pt.y);
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
normalicon:=ticon.create;
application.title:=caption;
nid.cbsize:=sizeof(nid);
nid.wnd:=handle;
nid.uid:=icon_id;
nid.uflags:=nif_icon or nif_message or nif_tip;
nid.ucallbackmessage:=mi_iconevent;
nid.hIcon :=normalicon.handle;
strcopy(nid.sztip,pchar(caption));
nid.uFlags:=nif_message or nif_icon or nif_tip;
shell_notifyicon(nim_add,@nid);
SetWindowLong(Application.Handle,
GWL_EXSTYLE,WS_EX_TOOLWINDOW);
end;
procedure TForm1.sethook1Click(Sender: TObject);
begin
setkeyhook;
end;
procedure TForm1.endhook1Click(Sender: TObject);
begin
endkeyhook;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
nid.uFlags :=0;
shell_notifyicon(nim_delete,@nid);
end;
procedure TForm1.Close1Click(Sender: TObject);
begin
application.terminate;
end;
东方小黑
2002-06-03
打赏
举报
回复
好像我有过这个问题,up一下吧
linyin
2002-06-03
打赏
举报
回复
我也收藏!!!
dy_kiss
2002-06-03
打赏
举报
回复
收藏先
yansea
2002-06-03
打赏
举报
回复
还是我用土办法解决吧~唉,这分都不知道该怎么给了。
算了,结贴。
键盘
钩子
hook
键盘
钩子
键盘
钩子
hook
键盘
钩子
hook
键盘
钩子
hook
键盘
钩子
hook
键盘
钩子
hook
键盘
钩子
hook
键盘
钩子
hook
键盘
钩子
hook
键盘
HOOK
DLL简单模板
学习制作
键盘
HOOK
DLL是总结的一个简单模板
C++全局
键盘
鼠标
Hook
C++全局
键盘
鼠标钩子程序
HOOK
,也可以注入到单一程序.。C++全局
键盘
鼠标钩子程序
HOOK
,也可以注入到单一程序.。
hook
入门,带
键盘
hook
源代码与学习资料
hook
入门,带
键盘
hook
源代码与学习资料
VB 鼠标、
键盘
HOOK
VB 鼠标、
键盘
HOOK
VB 鼠标、
键盘
HOOK
Delphi
5,386
社区成员
262,729
社区内容
发帖
与我相关
我的任务
Delphi
Delphi 开发及应用
复制链接
扫一扫
分享
社区描述
Delphi 开发及应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章