通常在自己的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

如何屏蔽ctrl + v 粘贴事件,鼠标右键粘贴事件的更多相关文章

  1. Javascript和jquery事件--鼠标右键事件,contextmenu

    右键点击触发是浏览器的默认菜单事件contextmenu,你可以选择阻止它,使用event.preventDefault();或者return false;. 想要定义右键点击事件,关注的是mouse ...

  2. Vue 框架-02-事件:点击, 双击事件,鼠标移上事件

    Vue 框架-02-事件:点击, 双击事件,鼠标移上事件 1.单击事件:v-on:click 源码 app2.js : //实例化 vue 对象 new Vue({ //注意代码格式 //el:ele ...

  3. JS事件 鼠标移开事件(onmouseout)鼠标移开事件,当鼠标移开当前对象时,执行onmouseout调用的程序。

    鼠标移开事件(onmouseout) 鼠标移开事件,当鼠标移开当前对象时,执行onmouseout调用的程序. 当把鼠标移动到"登录"按钮上,然后再移开时,触发onmouseout ...

  4. Javascript和jquery事件-鼠标移入移出事件

    javascript使用mouseover和mouseout,只在css中支持hover jquery支持mouseover和mouseout,封装了mouseenter.mouseleave事件函数 ...

  5. richtextbox Ctrl+V只粘贴纯文本格式

    只能粘贴剪切板中的TXT内容 并且 不能改变 剪切板的内容1 当用户按下Ctrl+V屏蔽系统的粘贴功能,然后添加自己的功能2019年12月19日 19:34:38 private void richT ...

  6. jquery鼠标右键事件

    $('body').live("mousedown",function(e){ $('body').bind("contextmenu",function(e) ...

  7. 解决vim中鼠标右键无法复制的问题

    转:http://www.cnblogs.com/jianyungsun/archive/2011/03/19/1988855.html 这是我的vim配置文件:jeffy-vim-v2.4.tar ...

  8. word2010 ctrl v not work

    终于解决了word 2010中ctrl v 不能用的问题. 0 word ctrl c 可以用,右键粘贴可以正常使用,快捷键ctrl v不能用. 1 在excel中ctrl c 和ctrl v,可以正 ...

  9. 13-vim-复制和粘贴-01-复制和粘贴

    1.vi中提供有一个被复制文本的缓冲区 复制命令会将选中的文字保存在缓冲区. 删除命令删除的文字会被保存在缓冲区 在需要的位置,使用粘贴命令可以将缓冲区的文字插入到光标所在位置. vi中的文本缓冲区同 ...

随机推荐

  1. 百度离线下载Tampermonkey脚本

    https://greasyfork.org/zh-CN/scripts/23635-%E7%99%BE%E5%BA%A6%E7%BD%91%E7%9B%98%E7%9B%B4%E6%8E%A5%E4 ...

  2. bash编程之xargs实用技巧

    xargs结合管道操作符|,可以完成很多看似复杂的问题: 1.快速删除所有.log日志文件 机器运行久了,就会有各式各样的日志文件,散落在各个目录下,可以利用下面的方法: find ./ -name ...

  3. Codeforces 235E. Number Challenge DP

    dp(a,b,c,p) = sigma ( dp(a/p^i,b/p^j,c/p^k) * ( 1+i+j+k) ) 表示用小于等于p的素数去分解的结果有多少个 E. Number Challenge ...

  4. dotNetSpider 手记

    准备工作: 从github上download工程. 安装VS2017. 安装 .net core 2.0. 编译通过. 基础架构: 调度器 Scheduler 从根site开始,向 Downloade ...

  5. code.google.com/p/log4go 下载失败

    用 glide 下载 goim 的依赖包时报错,提示: code.google.com/p/log4go 找不到,即下载失败 主要是 code.google.com 网站已关闭导致的, 有人把它 fo ...

  6. gnu--libc

    https://www.gnu.org/software/libc/manual/html_node/index.html

  7. List、Set、Map 和 Queue 之间的区别

    list 和set 有共同的父类 它们的用法也是一样的 唯一的不太就是set中不能有相同的元素 list中可以list和set的用途非常广泛 list可以完全代替数组来使用map 是独立的合集 它使用 ...

  8. chrome主页被hao123篡改,怎么改回来?

    这两天因为下载个别小程序又把我的chrome的主页给篡改了,由于我现在使用的是任务栏快捷方式,没法右键属性,但我想应该和桌面快捷方式是一个道理,于是我找到任务栏文件夹C:\Users\Administ ...

  9. 在后台运行rtorrent

    本来一直是用transmission做PT的客户端的,但是transmission的功能实在是太弱了,web-gui显示的信息也实在是太有限.在别人的推荐下,总算下定决心换rtorrent+wtorr ...

  10. 【python】python读取文件报错UnicodeDecodeError: 'gbk' codec can't decode byte 0xac in position 2: illegal multibyte sequence

    python读取文件报错UnicodeDecodeError: 'gbk' codec can't decode byte 0xac in position 2: illegal multibyte ...