钩子获取鼠标在窗口上的位置
2008-07-07 09:37:37.0
HHOOK hMsgHook;
//钩子函数
LRESULT CALLBACK GetMsgProc(int nCode,WPARAM wParam,LPARAM lParam)
{
   LPMOUSEHOOKSTRUCT  pMouseHook = (MOUSEHOOKSTRUCT FAR *)lParam;
    if(nCode == HC_ACTION)
    {
        if(HIBYTE(GetKeyState(VK_LBUTTON )))
            {
              if(X!=0 && Y!=0)
              {
                Form1->Edit1->Text=(int)pMouseHook->pt.x-Form1->Left;
                Form1->Edit2->Text=(int)pMouseHook->pt.y-Form1->Top;
                Form1->Shape1->Left=(int)pMouseHook->pt.x-Form1->Left-4-Form1->Shape1->Width/2 ;
                Form1->Shape1->Top=(int)pMouseHook->pt.y-Form1->Top-30-Form1->Shape1->Height/2 ;
                Form1->Controls[a]->Left=Form1->Shape1->Left+2;
                Form1->Controls[a]->Top=Form1->Shape1->Top+2;
              }
            }
     }
    return CallNextHookEx(hMsgHook,nCode,wParam,lParam);
}
//安装钩子
void __fastcall TForm1::FormShow(TObject *Sender)
{
  hMsgHook=SetWindowsHookEx(WH_MOUSE,(HOOKPROC)GetMsgProc,NULL,GetCurrentThreadId());
}
//卸载钩子
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
  if(hMsgHook!=NULL)
  {
    UnhookWindowsHookEx(hMsgHook);
  }
}

文章评论
[以下网友留言只代表其个人观点,不代表中华网的观点或立场]
发表评论
昵 称:
主 页:
内 容:
表 情: