您的位置:首页 > 编程语言

模拟发送鼠标消息示例代码

2015-08-19 13:13 429 查看
CDialogEx* g_pDlg = nullptr;
HHOOK hhookMs = NULL;
LRESULT CALLBACK LowLevelMouseProc (INT nCode, WPARAM wParam, LPARAM lParam);
BOOL UninstallHook();
BOOL InstallHook();

BOOL InstallHook( )
{

if (hhookMs )
UninstallHook();

hhookMs = SetWindowsHookEx(WH_MOUSE_LL,
(HOOKPROC)LowLevelMouseProc, AfxGetApp()->m_hInstance, NULL);

return(hhookMs != NULL);

}

BOOL UninstallHook()
{

BOOL fOk = FALSE;
if (hhookMs ) {
fOk = UnhookWindowsHookEx(hhookMs );
hhookMs = NULL;
}

return(fOk);
}

LRESULT CALLBACK LowLevelMouseProc (INT nCode, WPARAM wParam, LPARAM lParam)
{
MSLLHOOKSTRUCT *pkbhs = (MSLLHOOKSTRUCT *)lParam;
char strMsg[100] = {0};

switch (nCode)
{
case HC_ACTION:
{
//鼠标左击
if(wParam == WM_LBUTTONUP)
{
sprintf(strMsg, "WM_LBUTTONUP: x= %d, y= %d\n", pkbhs->pt.x, pkbhs->pt.y);
OutputDebugStringA(strMsg);
if (g_pDlg!=nullptr)
{
CRect rect;
g_pDlg->GetWindowRect(&rect);

POINT pt;
pt.x = pkbhs->pt.x - rect.left ;
pt.x = kagula::Clamp(0,rect.Width(),pt.x);

pt.y = pkbhs->pt.y - rect.top;
pt.y = kagula::Clamp(0,rect.Height(),pt.y);

g_pDlg->SendMessage(WM_LBUTTONUP,0,MAKELONG(pt.x, pt.y));
}
}
else if (wParam == WM_MOUSEMOVE)
{
if (g_pDlg!=nullptr)
{
CRect rect;
g_pDlg->GetWindowRect(&rect);

POINT pt;
pt.x = pkbhs->pt.x - rect.left ;
pt.x = kagula::Clamp(0,rect.Width(),pt.x);

pt.y = pkbhs->pt.y - rect.top;
pt.y = kagula::Clamp(0,rect.Height(),pt.y);

g_pDlg->SendMessage(WM_MOUSEMOVE,pkbhs->flags,MAKELONG(pt.x, pt.y));
}
}

}
default:
break;
}
return CallNextHookEx (NULL, nCode, wParam, lParam);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: