C++消息API:屏幕抓词地技术完成

屏幕上的文字大都是由gdi32.dll的以下几个函数显示的:TextOutA、TextOutW、ExtTextOutA、ExtTextOutW。实现屏幕抓词的关键就是截获对这些函数的调用,得到程序发给它们的参数。

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

  一、得到鼠标的当前位置

  通过SetWindowsHookEx实现。

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

  通过WindowFromPoint,ScreenToClient,InvalidateRect 实现。

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

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

  SysFunc1=(DWORD)GetProcAddress(GetModuleHandle("gdi32.dll"),"TextOutA");

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

  { //输出lpszString的处理

return ((FARPROC)SysFunc1)(hdc,nXStart,nYStart,lpszString,cbString);}

  2.由于系统鼠标钩子已经完成注入其它GUI进程的工作,我们不需要为注入再做工作。

  如果你知道所有系统钩子的函数必须要在动态库里,就不会对“注入”感到奇怪。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值