Hi All,
I'm coding for program capture control to get information of that control;
My program will draw highlight control under cursor position and i will get info of that control
when i click on it. So :
1. Using hook to prevent 'click event' to windows when user click on another program.
2. when press and hold Ctrl key, the hook will allow 'click event' is sent to window.
My problem:
1. I press and hold Ctrl key to click on menu of a
Wpf application to open list of menuitem.
2. Release Ctrl key and click on menuitem.
=>at that time, althought the hook prevented 'click event' so that it is not sent to Window, but 'click event' still affect on menuitem.
Code of my hook:
static LRESULT CALLBACK InternalMouseHookCallback(int code, WPARAM wparam, LPARAM lparam)
{
if (code < 0)
{
return CallNextHookEx(hookMouse, code, wparam, lparam);
}
bool bForwardMessage = true;
if(code==HC_ACTION) {
MOUSEHOOKSTRUCT* pStruct = (MOUSEHOOKSTRUCT*)lparam;
switch(wparam) {
case WM_LBUTTONDOWN:
case WM_LBUTTONUP:
if (gCtrlPressed == false){
bForwardMessage = false;
}
break;
default:
break;
}
}
if (bForwardMessage){
return CallNextHookEx(hookMouse, code, wparam, lparam);
}
return 1;
}
static LRESULT CALLBACK InternalKeyboardHookCallback(int code, WPARAM wParam, LPARAM lParam)
{
if (code < 0){
return CallNextHookEx(hookKeyboard, code, wParam, lParam);
}
bool bForwardMessage = true;
KBDLLHOOKSTRUCT* p = (KBDLLHOOKSTRUCT *)lParam;
switch(wParam) {
case WM_KEYDOWN:
case WM_SYSKEYDOWN:
if(p->vkCode==VK_LCONTROL || p->vkCode==VK_RCONTROL)
{
gCtrlPressed = true;
}
break;
default:
break;
}
if (bForwardMessage){
return CallNextHookEx(NULL,code,wParam,lParam);
}
return -1;
}
With this code, It operate good on window or Win32 App, but WPF is not.
Why the hook can not prevent click event on menuItem in WPF App? and what solution for this issue?
Any help in this matter would be appreciated
Thanks and regards,
Sugia