0
我正在嘗試使用Windows API創建鼠標鉤。目前,我有以下代碼,但我努力使其工作。也許一些示例代碼可以幫助我更好地理解這些概念。使用Windows API創建鼠標鉤的問題
LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam)
{
HWND hWindow , hEntryWnd;
HRESULT hResult;
ztcEvents pEvent;
ztcField *p_click_field;
ztcInterfaceContext *p_context_interface;
TCHAR className [32];
HWND hWnd;
if (nCode < 0) // do not process message
return CallNextHookEx(hook, nCode, wParam, lParam);
MOUSEHOOKSTRUCT *msg = (MOUSEHOOKSTRUCT *)lParam;
switch (nCode)
{
case HC_ACTION:
{
hWnd = msg->hwnd;
p_click_field = pEvent.GetMatchField(hWnd);
p_context_interface = pEvent.getMarkInterface();
if(p_click_field == NULL || p_context_interface == NULL)
{
break;
}
GetClassName(p_click_field->Widget()->WindowHandle() , className , sizeof (className) - 1);
if(p_click_field->Widget()->IsKindOf(RUNTIME_CLASS(ztcOleWdgt)))
{
switch(wParam)
{
case WM_LBUTTONDOWN:
hWindow = p_click_field->Widget()->Parent()->WindowHandle();
hEntryWnd = p_click_field->Widget()->WindowHandle();
::PostMessage(hWindow , OLE_NOTIFY , (WPARAM)hEntryWnd , OLE_LCLICK);
/*pEvent.SetVariables(p_click_field , evClick ,etFormField , true , p_context_interface);
SetEvent(hEventWnd);*/
fprintf(trace_event , "buttonClick\t%x\n" , msg->hwnd);
fflush(trace_event);
break;
case WM_RBUTTONDOWN:
fprintf(trace_event , "RightClick\n");
fflush(trace_event);
break;
case WM_LBUTTONDBLCLK:
fprintf(trace_event , "ButtonDoubleClick\n");
fflush(trace_event);
break;
}
}
}
break;
default:
break;
}
return CallNextHookEx(hook, nCode, wParam, lParam);
}
的同時單擊鼠標左鍵,上面的代碼進入的情況下WM_LBUTTONDOWN
超過30倍。我的代碼有問題嗎?如果是這樣,我該如何解決它?
你可以只是谷歌,如果你只是想看到任何隨便舉個例子。你有更具體的問題嗎?你有什麼嘗試?最重要的是:什麼樣的鉤子?出於什麼目的? – tenfour 2011-02-11 11:40:49
我有ole小部件的句柄,並使用該句柄,我必須跟蹤鼠標單擊事件和setfocus並殺死焦點事件。 – karthik 2011-02-11 11:43:03
因爲我需要一些鉤子程序的基本思想 – karthik 2011-02-11 11:43:21