VC++屏幕抓词的技术实现

本文介绍了如何使用VC++实现屏幕抓词的技术,关键在于截获gdi32.dll中显示文字的函数调用,如TextOutA。通过设置鼠标钩子获取位置,发送重画消息,然后在DLL中替换系统函数为自定义函数,从而实现屏幕文字的捕捉。
摘要由CSDN通过智能技术生成
屏幕上的文字大都是由gdi32.dll的以下几个函数显示的:TextOutA、TextOutW、ExtTextOutA、 ExtTextOutW。实现屏幕抓词的关键就是截获对这些函数的调用,得到程序发给它们的参数。

  我的方法有以下三个步骤:

  一、得到鼠标的当前位置

  通过SetWindowsHookEx实现。

  二、向鼠标下的窗口发重画消息,让它调用系统函数重画

  通过WindowFromPoint,ScreenToClient,InvalidateRect 实现。

  三、截获对系统函数的调用,取得参数(以TextOutA为例)

   1.仿照TextOutA作成自己的函数MyTextOutA,与TextOutA有相同参数和返回
值,放在系统钩子所在
的DLL里。

   SysFunc1=(DWORD)GetProcAddress(GetModuleHandle( /"gdi32.dll/"),/"TextO
utA/");

   BOOL WINAPI MyTextOutA(HDC hdc, int nXStart, int nYStart, LPCSTR l
pszString,int cbString)

   { //输出lpszString的处理

return ((FARPROC)SysFunc1)(hdc,nXStart,nYStart,lpszString,cbString);}
   2.由于系统鼠标钩子已经完成注入其它GUI进程的工作,我们不需要为注入再
做工作。

  如果你知道所有系统钩子的函数必须要在动态库里ÿ
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值