zoukankan      html  css  js  c++  java
  • 如何屏蔽ctrl + v 粘贴事件,鼠标右键粘贴事件

    通常在自己的APP里的密码框,验证码框需要屏蔽复制,粘贴,怎么办呢?

    有三种方法:

    1 hook 此方法是最完全的,但由于hook是全局的,容易影响到其它代码。

    2 子类化文本框, 重写OnPaste函数,拦截WM_Paste消息

    3 在PreTranslateMessage里判断键盘扫描码和虚拟码

    前两种方法都不能在一个函数里搞定,比较麻烦。这里就介绍第三个方法,具体代码如下:

    [cpp] view plain copy

    1. BOOL CMyDlg::PreTranslateMessage(MSG* pMsg)   
    2. {  
    3.     if (pMsg->message == WM_APPCOMMAND) return TRUE; // win 2000 以上api, 多媒体键盘 Fn + F1, f2, ...  
    4.     
    5.     if (pMsg->message == WM_RBUTTONDOWN) return TRUE;  
    6.     
    7.     if (pMsg->message == WM_KEYDOWN)  
    8.     {  
    9.         while (pMsg->wParam >= VK_F1 && pMsg->wParam <= VK_F24) return TRUE;  
    10.     
    11.         switch (pMsg->wParam)  
    12.         {  
    13.         case VK_CAPITAL:  
    14.             //0x8000 是键有否按下  
    15.             //0x0001 是键的翻转状态  
    16.             if (GetKeyState(VK_CAPITAL) & 0x0001)  
    17.             {  
    18.                 GetDlgItem(IDC_STC_CAPS)->ShowWindow(TRUE);  
    19.                 GetDlgItem(IDC_STC_CAPS)->SetWindowText(_T("大写状态己开启!"));  
    20.             }  
    21.             else GetDlgItem(IDC_STC_CAPS)->ShowWindow(FALSE);  
    22.             break;  
    23.         // ctrl + v, shift + ins, 鼠标右键paste, 菜单键(VK_APPS)paste      
    24.         case VK_LAUNCH_APP1:  
    25.         case VK_LAUNCH_APP2:  
    26.         case VK_LCONTROL:  
    27.         case VK_RCONTROL:  
    28.         case VK_SHIFT:  
    29.         case VK_LSHIFT:  
    30.         case VK_RSHIFT:  
    31.         case VK_MENU:  
    32.         case VK_LMENU:  
    33.         case VK_RMENU:  
    34.         case VK_LWIN:  
    35.         case VK_RWIN:  
    36.         case VK_RBUTTON:  
    37.         case VK_EXECUTE:  
    38.         case VK_RETURN:  
    39.         case VK_SNAPSHOT:  
    40.         case VK_INSERT:  
    41.         case VK_APPS:  
    42.             this->SetFocus(); // 让文本框失去焦点,就无法弹出菜单栏  
    43.             return TRUE;  
    44.         case 'V':  
    45.             static int n = 0; // 第一、二次可以复制  
    46.             while (++n > 2 && (::GetKeyState(VK_CONTROL) & 0x8000)) return TRUE;  
    47.                 break;  
    48.         }  
    49.     }  
    50.     
    51.     while (::GetKeyState(VK_MENU) & 0x8000)   
    52.     {  
    53.         return TRUE; // Alt 不会响应 WM_KEYDOWN  
    54.     }  
    55.         
    56.     return CDialog::PreTranslateMessage(pMsg);  
    57. }  

    以上只是大体的流程,还有考虑不周的地方,欢迎补充。

    From: http://blog.csdn.net/tiandyoin/article/details/39474569

  • 相关阅读:
    转 Hystrix超时实现机制
    Hystrix实现ThreadLocal上下文的传递 转
    MongoDB里做表间关联
    转载:mongodb的两阶段提交实战
    MongoDB中的读写锁
    Mongodb中的 原子性 隔离性
    web服务优化
    MongoDB分片(Sharding)技术
    MongoDB复制集
    consul分布式集群搭建
  • 原文地址:https://www.cnblogs.com/time-is-life/p/8158369.html
Copyright © 2011-2022 走看看