又是mouse hook 的问题。(100分)

  • 主题发起人 主题发起人 hubdog
  • 开始时间 开始时间
H

hubdog

Unregistered / Unconfirmed
GUEST, unregistred user!
为什么我在hook.dll中用x:=pmousehookstruct(lparam)^.pt.x
PostMessage(HookRec^.Receiver,MOUSE_EVENT,x,y);
就可以得到x,y,而用
PostMessage(HookRec^.Receiver,MOUSE_EVENT,wParam,lParam);发出
用下面过程接收
procedure TForm1.CXHook1Mouse(Sender: TObject; appname: String; wParam,
lparam: Integer);
var
x,y:integer;
begin
x:=PMouseHookStruct(lparam)^.pt.x;//非法读取错误
y:=PMouseHookStruct(lparam)^.pt.y;//非法读取

listbox1.items.add('x:'+inttostr(x)+'y:'+inttostr(y));
end;
 
谁调用TForm1.CXHook1Mouse了?
没见你贴这部分代码.
如果直接作为callback function的, 那么您错了. 作为callback function的只能
是静态函数(过程), 不能是类中的方法. 除非用makeobjectinstance取得一个
指向运行时某个对象中方法的指针, 并将这个指针作为callback function.
 
事实上我是写了个控件,Hook.dll是另外写的(我已用它成功的截取了keyboard,和Shellhook,若在mousehookproc中处理lparam就无问题)由它给我的控件发消息,控件定义了 OnMouse事件,但在OnMouse里用PmousehookStruct(lparam)^.pt.x就有问题。
 
呵呵, 当然不行. lparam指向的结构(一块内存)只在hookproc中有效, 退出
hookproc之后这块内存就释放了. 这时你的控件接受到的lparam只是一个
Cardinal而已, 没有任何意义了.
 
多谢,有没有好的解决方法。
 
试试用sendmessage代替postmessage
 
已经改好了,多谢。
 
请问谁能发mouse_event的使用方法给我呀?sz_y@163.net
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部