检测鼠标按钮(左右键)是否交换



假设的应用场景:

  当hook住鼠标按钮被按下的事件时, 要先执行鼠标按钮被按下的自定义处理,再转到处理鼠标被按下的事件.

  假设自定义处理为: 将鼠标光标所在的按钮禁止和隐藏.

  实现流程:

  * 得到鼠标光标所在位置的子窗体句柄, 判断该子窗体(窗口类名,窗口文本, 窗口风格...)是否是我们要处理的按钮.

  * 如果是要处理的按钮, 再判断该鼠标是按下还是弹出菜单, 如果鼠标为按下, 才去执行自定义处理.


  这时遇到的问题是, 用户有可能交换了鼠标的左右键. 如果没交换鼠标左右键, 鼠标左键是按下的动作, 鼠标右键是弹出菜单.

  在msdn上有个例子,可以解决"鼠标左右键是否已经交换"的问题~


  1. /// @file       testMouseSwap.cpp  
  2. /// @brief      判断鼠标键是否被用户设置成"左右键交换"  
  3.   
  4. #include "stdafx.h"  
  5. #include <Windows.h>  
  6. #include <tchar.h>  
  7.   
  8. /// @fn         IsMouseSwap  
  9. /// @brief      测试鼠标左右键是否已经交换  
  10. /// @param      void  
  11. /// @return     boolen, true = 鼠标左右键已经交换, false = 鼠标左右键没有交换  
  12. /// @note       如果鼠标左右键没有交换, 鼠标左键是按下, 鼠标右键是弹出菜单  
  13. bool    IsMouseSwap();  
  14.   
  15. int _tmain(int argc, _TCHAR* argv[])  
  16. {  
  17.     _tprintf(L"IsMouseSwap = %s\n", IsMouseSwap() ? L"TRUE" : L"FALSE");  
  18.   
  19.     /** operating results 
  20.     IsMouseSwap = FALSE 
  21.     */  
  22.   
  23.     /// @note 交换"鼠标左右键"之后的实验已经做过, IsMouseSwap()有效  
  24.   
  25.     getchar();  
  26.     return 0;  
  27. }  
  28.   
  29. bool    IsMouseSwap()  
  30. {  
  31.     int iRc             =   0;  
  32.   
  33.     iRc = GetSystemMetrics(SM_MOUSEPRESENT);  
  34.     if(0 == iRc)  
  35.         return false;   ///< 鼠标没安装  
  36.   
  37.     iRc = GetSystemMetrics(SM_SWAPBUTTON);  
  38.     return (0 == iRc) ? false : true;  
  39. }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值