我的鼠标钩子为什么不是全局的?

dageming 2003-08-19 09:22:13
我已经做在DLL里了,但是只有鼠标自己的程序内移动的时候才会收到消息,移出自己的窗口就收不到了,何解?
请看源码

版本1:
function MouseProc(iCode: Integer;wParam: WPARAM;lParam: LPARAM): LRESULT; stdcall;
var
MyMsg : ^Msg;
pPnt:TPoint;
begin
if iCode=0 then
begin
MyMsg:=Pointer(lParam);
if MyMsg.message=WM_MOUSEMOVE then
begin
GetCursorPos(pPnt);
PostMessage(iHandle,WM_APP+$100,pPnt.x,pPnt.y);
end;
end;
result:=CallNextHookEx(iHook,iCode,wParam,lParam);
end;

function SetMouseHook(h:THandle): BOOL; export;
begin
if iHook=0 then
begin
iHandle:=h;
iHook:=SetWindowsHookEx(WH_GETMESSAGE,MouseProc,HInstance,0);
Result:=true;
end
else
begin
Result:=false;
end;
end;

版本2
function MouseProc(iCode: Integer;wParam: WPARAM;lParam: LPARAM): LRESULT; stdcall;
var
MouseStruct:^MOUSEHOOKSTRUCT;
x,y:integer;
begin
result:=0;
if iCode>-1 then
begin
if wParam=WM_MOUSEMOVE then
begin
MouseStruct:=pointer(lParam);
x:=MouseStruct^.pt.X;
y:=MouseStruct^.pt.Y;
PostMessage(iHandle,WM_APP+$100,pPnt.x,pPnt.y);
end;
end
else
result:=CallNextHookEx(iHook,iCode,wParam,lParam);
end;

function SetMouseHook(h:THandle): BOOL; export;
begin
if iHook=0 then
begin
iHandle:=h;
iHook:=SetWindowsHookEx(WH_MOUSE,MouseProc,HInstance,0);
Result:=true;
end
else
begin
Result:=false;
end;
end;

帮忙看看,谢谢
...全文
42 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
DWGZ 2003-08-19
  • 打赏
  • 举报
回复
不是说窗口句柄没有, 你存储的窗口句柄是有效的, 但是存储这个窗口句柄的变量是在两个不同的进程空间;
你可以创建一个这样的全局结构

PShareData = ^TShareData;
TShareData =
h: HWND;
.....
end;
发送时
PostMessage(pShare^.iHandle,WM_APP+$100,pPnt.x,pPnt.y);
dageming 2003-08-19
  • 打赏
  • 举报
回复
DWGZ() ,为什么鼠标在自己的程序上就能收到消息啊?你的意思说我传给DLL的iHandle没用吗?拜托稍微详细,我找起来也方便
ul10 2003-08-19
  • 打赏
  • 举报
回复
大侠 DWGZ 说的很有道理啊!
你可以参考<<Delphi 7 windodws 核心编程>>
DWGZ 2003-08-19
  • 打赏
  • 举报
回复
DLL 是不没有数据区的, 你需要建立了一个全局的变量来存储你数据
问题就在这里
PostMessage(iHandle,WM_APP+$100,pPnt.x,pPnt.y);

具体创建你自己找书看吧, 要用到下面几个
CreateFileMapping
FlushViewOfFile
MapViewOfFile
MapViewOfFileEx
OpenFileMapping
UnmapViewOfFile
dageming 2003-08-19
  • 打赏
  • 举报
回复
ShareMem单元到底加不加?
dageming 2003-08-19
  • 打赏
  • 举报
回复
谢谢,搞定,放分,长知识

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧