我已经做在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;帮忙看看,谢谢

解决方案 »

  1.   

    DLL  是不没有数据区的,  你需要建立了一个全局的变量来存储你数据
    问题就在这里
    PostMessage(iHandle,WM_APP+$100,pPnt.x,pPnt.y);具体创建你自己找书看吧,  要用到下面几个
    CreateFileMapping
    FlushViewOfFile
    MapViewOfFile
    MapViewOfFileEx
    OpenFileMapping
    UnmapViewOfFile  
      

  2.   

    大侠 DWGZ 说的很有道理啊!
    你可以参考<<Delphi 7 windodws 核心编程>>
      

  3.   

    DWGZ() ,为什么鼠标在自己的程序上就能收到消息啊?你的意思说我传给DLL的iHandle没用吗?拜托稍微详细,我找起来也方便
      

  4.   

    不是说窗口句柄没有,  你存储的窗口句柄是有效的,  但是存储这个窗口句柄的变量是在两个不同的进程空间;  
    你可以创建一个这样的全局结构

       PShareData = ^TShareData;
       TShareData = 
         h: HWND;
         .....
       end;
    发送时
    PostMessage(pShare^.iHandle,WM_APP+$100,pPnt.x,pPnt.y);