CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  Windows SDK/API

鼠标钩子的细节问题

楼主hansome(连环)2002-11-25 09:17:24 在 Delphi / Windows SDK/API 提问

我定义了一个全局的鼠标钩子  
  基本上的功能是没有什么问题的  
  但是,现在还想解决两个细节问题:  
  1、我想让只鼠标消息发送到我的窗口,然后把它丢掉,该怎么办?  
        (关键是如何让消息不发送到它原来的窗体,直接丢掉)  
  2、我想让鼠标的光标形状变成手型光标,该怎么做?  
        (我试过用Screen.Cursor:=crHandPoint是不行的) 问题点数:100、回复次数:6Top

1 楼hansome(连环)回复于 2002-11-25 15:49:57 得分 0

怎么,没有高手在吗?Top

2 楼stanely(俺是邢她汉子)回复于 2002-11-26 11:50:10 得分 50

1。用鼠标钩子,在回调函数里面监测鼠标下面的窗口是不是你的窗口,如果不是,那么result:=-1否则:=0  
   
  监测鼠标下的窗口,可以使用getcursorpos,windowfrompoint来得到窗口句柄,然后跟findwindow的结果比较。Top

3 楼hansome(连环)回复于 2002-11-26 15:19:26 得分 0

还有鼠标的光标形状如何改变Top

4 楼Fzgta(蝈蝈)回复于 2002-11-26 17:55:17 得分 10

hCursor:=LoadCursorFromFile(...)  
  SetCursor(hCursor);  
  一切OK!  
  Top

5 楼lxlzq(石头)回复于 2002-11-27 14:31:04 得分 40

result的值不要设为0  
  比如:result:=1;Top

6 楼zhangleivip(coolbee)回复于 2003-03-27 17:48:38 得分 0

我也做了一个鼠标钩子,但是只有在鼠标经过当前程序窗体的时候才有效  
  感觉并不是全局的,我的钩子函数和过程是写在DLL里的,帮忙看看  
  //处理MouseHOOK的函数  
  function   MouseHookHandler(icode:integer;wparam:wparam;lparam:lparam):lresult;stdcall;export;  
  var  
      MP:PMouseHookStruct;  
  begin  
      if   iCode   <   0   then  
          Result   :=   CallNextHookEx(MouseNextHookProc,   iCode,   wParam,   lParam)  
      else   begin  
              if   (wParam=WM_MOUSEMOVE)   then     begin         //只处理鼠标移动消息  
                  MP   :=   PMouseHookStruct(lparam);  
                  Form1.Caption   :=   inttostr(MP^.pt.X)+'       '+inttostr(MP^.pt.Y);  
                  //PostMessage(GlobalData.hHandle,WM_MOUSEHOOK,MP^.pt.X,MP^.pt.Y);       //把坐标传过去  
              end;  
              iCode:=-1;  
              Result   :=   CallNextHookEx(MouseNextHookProc,   iCode,   wParam,   lParam);         //调用下一个函数  
      end;  
  end;  
   
  function   SetMouseHook:bool;export;  
  begin  
      Result   :=   False;  
      if   MouseNextHookProc   <>   0   then   Exit;  
      MouseNextHookProc   :=   SetWindowsHookEx(WH_MOUSE,MouseHookHandler,HInstance,0);  
      Result   :=   MouseNextHookProc   <>   0;  
   
      Form1   :=   TForm1.Create(nil);  
      Form1.Show;  
  end;  
   
  function   EndMouseHook:bool;export;  
  begin  
      if   MouseNextHookProc   <>   0   then  
      begin  
          UnhookWindowshookEx(MouseNextHookProc);  
          MouseNextHookProc   :=   0;  
          MessageBeep(0);  
      end;  
      Result   :=   MouseNextHookProc   =   0;  
      Form1.Close;  
      Form1.Free;      
  end;Top

相关问题

  • 鼠标钩子的问题
  • 谁有鼠标钩子BCB源代码
  • 鼠标钩子~~~~谁能解答???
  • 键盘,鼠标钩子的问题?
  • 帮帮小弟(关于鼠标钩子)
  • 真诚请教鼠标钩子高手
  • 求一鼠标全局钩子
  • 鼠标钩子问题, 谢谢!!
  • 请教关于鼠标钩子
  • 鼠标钩子截获鼠标滚轴信息?

关键词

  • 鼠标
  • 函数
  • 钩子
  • mousenexthookproc
  • 问题
  • result
  • begin
  • form

得分解答快速导航

  • 帖主:hansome
  • stanely
  • Fzgta
  • lxlzq

相关链接

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

广告也精彩

反馈

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