通常在自己的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. The STM32 SPI and FPGA communication

    The STM32 SPI and FPGA communication STM32 spi bus communication SPI bus in the study, the protocol ...

  2. 微软收购跨平台移动开发公司Xamarin

    摘要:北京时间2月25日早间消息,微软周三宣布收购创业公司Xamarin,这也是该公司为了吸引更多软件工程师为其云计算服务编写程序而采取的最新举措.古斯里表示,总部位于旧金山的Xamarin创立于20 ...

  3. VC 中 编译 boost 1.34.1 或者 1.34.0

    c++boost正则表达式的安装方法 (cy163已成功完成实验 基于宽字节 wstring 解决 "南日" 错误 匹配"12日" expression = & ...

  4. 在ASP.NET MVC下实现单个图片上传, 客户端服务端双重限制图片大小和格式, 服务端裁剪图片

    在"MVC文件图片ajax上传轻量级解决方案,使用客户端JSAjaxFileUploader插件01-单文件上传"一文中,使用JSAjaxFileUploader这款插件实现了单文 ...

  5. delphi 合并两个 Wav 文件流的函数

    合并两个 Wav 文件的函数 实例一 unit Unit1; interface usesWindows, Messages, SysUtils, Variants, Classes, Graphic ...

  6. INDY10的IDHttpServer应答客户端

    INDY10的IDHttpServer应答客户端 首先贴源码: procedure TIdHTTPResponseInfo.WriteContent; begin if not HeaderHasBe ...

  7. ibatis.net:惯用法

    使用<![CDATA[]]>保持SQL格式 IN 查询

  8. 架构:The Onion Architecture : part 1(洋葱架构:第一篇)(转载)

    原文地址:http://jeffreypalermo.com/blog/the-onion-architecture-part-1/. I've spoken several times about ...

  9. MySQL递归查询树状表的子节点、父节点具体实现

    mysql版本(5.5.6等等)尚未支持循环递归查询,和sqlserver.oracle相比,mysql难于在树状表中层层遍历的子节点.本程序重点参考了下面的资料,写了两个sql存储过程,子节点查询算 ...

  10. SpringBoot扫描包提示找不到mapper的问题

    SpringBoot扫描包问题 报错信息:Consider defining a bean of type in your configuration 方法一: 使用注解 @ComponentScan ...