~~~wince5.0下怎样实现类似的鼠标钩子函数的?

时间:2021-12-07 17:28:17
   
   如题;

   请问各位大侠:听说WINCE下没有支持鼠标的钩子函数,而我先实现拦截鼠标(即光笔)的输入信息,以此来屏蔽光笔的 点击功能,有哪些好方案呢?

   另外我在PC机上可以很容易实现WIN32的拦截鼠标输入信息的功能,因为XP,WIN32有支持鼠标的钩子函数。

12 个解决方案

#1


搜这个 MyKeyBbdHook_CE 的源码,是键盘的,鼠标的话应该自己改一下就行了

#2


 1)在WINCE下只支持以下三种钩子

 #define WH_JOURNALRECORD 0
 #define WH_JOURNALPLAYBACK 1
 #define WH_KEYBOARD_LL 20

2)wince下可以通过 coredll库调用在WINXP下通用的安装,卸载钩子函数的地址,就可以间接调用了
   SetWindowsHookExW
   CallNextHookEx、
   UnhookWindowsHookEx
3)以上两个可以实现,最后关键是钩子WH_JOURNALRECORD只是记录鼠标、键盘的输入信息,而    WH_JOURNALPLAYBACK只是回放WH_JOURNALRECORD记录的鼠标、键盘的输入信息,但是就是不能够
拦截鼠标的输入信息啊?
  
  所以给我们一个疑问是:在WINCE下不能够通过钩子函数来实现拦截鼠标信息吗?
  
  那我们只有WINCE的消息机制来拦截鼠标信息吗?请问各位实现的思路怎样呢?

#3


不可能支持,只你的程序不在前台没有焦点就没有MOUSE的消息。

#4


引用 3 楼 beyondma 的回复:
不可能支持,只你的程序不在前台没有焦点就没有MOUSE的消息。

HOOK就是干这个事的,怎么不可能呢?

从鼠标有这么两个钩子,就可看出微软的意图
HOOK可以,就是不让你拦截.....

#5



to :hudaweikevin 

  你说的方案 搜这个 MyKeyBbdHook_CE 的源码,是键盘的,鼠标的话应该自己改一下就行了,我有个疑问:在wince 有键盘钩子的定义,
#define WH_KEYBOARD_LL 20 
  而鼠标却没有啊,即WINCE中没有鼠标 WH_MOUSE_LL 的定义啊?

#6


引用 4 楼 luver 的回复:
引用 3 楼 beyondma 的回复:
不可能支持,只你的程序不在前台没有焦点就没有MOUSE的消息。

HOOK就是干这个事的,怎么不可能呢?

从鼠标有这么两个钩子,就可看出微软的意图
HOOK可以,就是不让你拦截.....


TO :luver
是的,微软这样做,有其目的,为了节省WINCE的资源,增加wince的实时性能

#7


我查找了有关资料
WH_JOURNALPLAYBACK Hook使应用程序可以插入消息到系统消息队列。可以使用这个

Hook回放通过使用WH_JOURNALRECORD Hook记录下来的连续的鼠标和键盘事件。只要

WH_JOURNALPLAYBACK Hook已经安装,正常的鼠标和键盘事件就是无效的


所以我在wince下利用QASetWindowsJournalHook函数安装WH_JOURNALPLAYBACK钩子
代码如下:
安装函数:
hHookMouse = QASetWindowsJournalHook(WH_JOURNALPLAYBACK, MouseHookCallback, &msg);

钩子处理函数
LRESULT CALLBACK MouseHookCallback(int nCode, WPARAM wParam, LPARAM lParam) {
    if(nCode >= HC_ACTION)                        
 {
      AfxMessageBox(L"已触发鼠标Hook",MB_ICONINFORMATION,0); 
 
                PEVENTMSGMSG pMsg = (PEVENTMSGMSG)lParam;
                if(pMsg)
                {
             if(pMsg->message == WM_LBUTTONDOWN || pMsg->message == WM_LBUTTONUP)
                        {
                              
 AfxMessageBox(L"已触发鼠标Hook",MB_ICONINFORMATION,0); 
return (1);
                        }
                }
        }

     AfxMessageBox(L"不能够触发鼠标Hook",MB_ICONINFORMATION,0); 
return 1;
 //return CallNextHook(hHookMouse, nCode, wParam, lParam);

}

以上代码可以捕抓到鼠标信号,但是不能拦截鼠标信号

也有资料说 用WH_JOURNALRECORD 钩子,不用WH_JOURNALPLAYBACK钩子,而当我用WH_JOURNALRECORD

 钩子时候,就根本不能捕抓到鼠标信号,因为WH_JOURNALRECORD 只是记录,而WH_JOURNALPLAYBACK回放

鼠标的点击动作。所以我认为用 WH_JOURNALPLAYBACK钩子是对的。

现在问题是可以捕抓到信号,而不能拦截信号?

#8



补充一下:

只要 WH_JOURNALPLAYBACK Hook已经安装,正常的鼠标和键盘事件就是无效的 

 这句话,我不明白,我上面代码已经安装了WH_JOURNALPLAYBACK Hook但是却不能现实

正常的鼠标和键盘事件就是无效的的功能。

#9


自己顶一下,要不就沉下去了,请问哪位好心的大侠给些建议,谢谢了!!!

#10


俺是来学习的

#11


结贴了,虽然在WINCE下貌似不能实现拦截鼠标信息的功能……

#12


不太懂啊?按键事件怎么写

#1


搜这个 MyKeyBbdHook_CE 的源码,是键盘的,鼠标的话应该自己改一下就行了

#2


 1)在WINCE下只支持以下三种钩子

 #define WH_JOURNALRECORD 0
 #define WH_JOURNALPLAYBACK 1
 #define WH_KEYBOARD_LL 20

2)wince下可以通过 coredll库调用在WINXP下通用的安装,卸载钩子函数的地址,就可以间接调用了
   SetWindowsHookExW
   CallNextHookEx、
   UnhookWindowsHookEx
3)以上两个可以实现,最后关键是钩子WH_JOURNALRECORD只是记录鼠标、键盘的输入信息,而    WH_JOURNALPLAYBACK只是回放WH_JOURNALRECORD记录的鼠标、键盘的输入信息,但是就是不能够
拦截鼠标的输入信息啊?
  
  所以给我们一个疑问是:在WINCE下不能够通过钩子函数来实现拦截鼠标信息吗?
  
  那我们只有WINCE的消息机制来拦截鼠标信息吗?请问各位实现的思路怎样呢?

#3


不可能支持,只你的程序不在前台没有焦点就没有MOUSE的消息。

#4


引用 3 楼 beyondma 的回复:
不可能支持,只你的程序不在前台没有焦点就没有MOUSE的消息。

HOOK就是干这个事的,怎么不可能呢?

从鼠标有这么两个钩子,就可看出微软的意图
HOOK可以,就是不让你拦截.....

#5



to :hudaweikevin 

  你说的方案 搜这个 MyKeyBbdHook_CE 的源码,是键盘的,鼠标的话应该自己改一下就行了,我有个疑问:在wince 有键盘钩子的定义,
#define WH_KEYBOARD_LL 20 
  而鼠标却没有啊,即WINCE中没有鼠标 WH_MOUSE_LL 的定义啊?

#6


引用 4 楼 luver 的回复:
引用 3 楼 beyondma 的回复:
不可能支持,只你的程序不在前台没有焦点就没有MOUSE的消息。

HOOK就是干这个事的,怎么不可能呢?

从鼠标有这么两个钩子,就可看出微软的意图
HOOK可以,就是不让你拦截.....


TO :luver
是的,微软这样做,有其目的,为了节省WINCE的资源,增加wince的实时性能

#7


我查找了有关资料
WH_JOURNALPLAYBACK Hook使应用程序可以插入消息到系统消息队列。可以使用这个

Hook回放通过使用WH_JOURNALRECORD Hook记录下来的连续的鼠标和键盘事件。只要

WH_JOURNALPLAYBACK Hook已经安装,正常的鼠标和键盘事件就是无效的


所以我在wince下利用QASetWindowsJournalHook函数安装WH_JOURNALPLAYBACK钩子
代码如下:
安装函数:
hHookMouse = QASetWindowsJournalHook(WH_JOURNALPLAYBACK, MouseHookCallback, &msg);

钩子处理函数
LRESULT CALLBACK MouseHookCallback(int nCode, WPARAM wParam, LPARAM lParam) {
    if(nCode >= HC_ACTION)                        
 {
      AfxMessageBox(L"已触发鼠标Hook",MB_ICONINFORMATION,0); 
 
                PEVENTMSGMSG pMsg = (PEVENTMSGMSG)lParam;
                if(pMsg)
                {
             if(pMsg->message == WM_LBUTTONDOWN || pMsg->message == WM_LBUTTONUP)
                        {
                              
 AfxMessageBox(L"已触发鼠标Hook",MB_ICONINFORMATION,0); 
return (1);
                        }
                }
        }

     AfxMessageBox(L"不能够触发鼠标Hook",MB_ICONINFORMATION,0); 
return 1;
 //return CallNextHook(hHookMouse, nCode, wParam, lParam);

}

以上代码可以捕抓到鼠标信号,但是不能拦截鼠标信号

也有资料说 用WH_JOURNALRECORD 钩子,不用WH_JOURNALPLAYBACK钩子,而当我用WH_JOURNALRECORD

 钩子时候,就根本不能捕抓到鼠标信号,因为WH_JOURNALRECORD 只是记录,而WH_JOURNALPLAYBACK回放

鼠标的点击动作。所以我认为用 WH_JOURNALPLAYBACK钩子是对的。

现在问题是可以捕抓到信号,而不能拦截信号?

#8



补充一下:

只要 WH_JOURNALPLAYBACK Hook已经安装,正常的鼠标和键盘事件就是无效的 

 这句话,我不明白,我上面代码已经安装了WH_JOURNALPLAYBACK Hook但是却不能现实

正常的鼠标和键盘事件就是无效的的功能。

#9


自己顶一下,要不就沉下去了,请问哪位好心的大侠给些建议,谢谢了!!!

#10


俺是来学习的

#11


结贴了,虽然在WINCE下貌似不能实现拦截鼠标信息的功能……

#12


不太懂啊?按键事件怎么写