HOOT ExtTextOut的问题,如何取出字符内容

TONY 2013-06-12 11:06:18
我HOOK一个程序的ExtTextOutW成功,直接输出参数lpString,大部分时间是乱码,有网友说lpString这个参数是glyph index而不是文字。不知道大家有什么解决方法没有?
...全文
477 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
baiyizhujian 2015-09-23
  • 打赏
  • 举报
回复
glyph index 指的是字体文件的 字符索引。 具体字符编码信息需要到 指定的字体文件中获得。
TONY 2013-06-15
  • 打赏
  • 举报
回复
引用 5 楼 CWangChao 的回复:
查了一下资料,这种情况是在ExtTextout之前调用了GetCharacterPlacement,进入ExtTextout之后又没有对象的反向API,所以这种情况你需要Hook GetCharacterPlacement这个函数来解决了,GetCharacterPlacement函数的位置是gdi32.dll中,祝你幸运,另附赠两个相关资料: http://baike.baidu.com/view/1080759.htm http://bbs.csdn.net/topics/350027731
调用的是ScriptStringAnalyse,感谢了
能哥 2013-06-14
  • 打赏
  • 举报
回复
查了一下资料,这种情况是在ExtTextout之前调用了GetCharacterPlacement,进入ExtTextout之后又没有对象的反向API,所以这种情况你需要Hook GetCharacterPlacement这个函数来解决了,GetCharacterPlacement函数的位置是gdi32.dll中,祝你幸运,另附赠两个相关资料: http://baike.baidu.com/view/1080759.htm http://bbs.csdn.net/topics/350027731
TONY 2013-06-14
  • 打赏
  • 举报
回复
引用 3 楼 CWangChao 的回复:
BOOL  WINAPI MyExtTextOutW( HDC hdc, int cx, int cy, UINT ui, CONST RECT *rc, 
						   LPCWSTR lpString, UINT nCount, CONST INT *pi)
{
	static bool bSend=0;
	static PQQINFO pQQInfo=NULL;
	static char szMsgName[64];
	static char szMsgAccount[32];
	static char szName[64]={0};
	static int  nVer=2009;
	static int  nLastX=0,nLastY=0;

	if(nCount>0)
	{
	    char szText[MSGLEN]={0};
		char szCaption[64]={0};
		char szClassName[32]={0};
		int  nTextLen=0;
		bool bExists=false;
		HWND hWnd,hValidateHwnd=0;
		
		int i=0;
	    nTextLen=WideCharToMultiByte( CP_ACP,0,lpString,nCount,szText,MSGLEN, NULL, NULL );
		if(nTextLen<=0)
			goto exit;
                   //。。。。。。。。。。写你的代码
}
谢谢CWangChao的提示,但是当参数ui的值为ETO_GLYPH_INDEX时,使用这种方法获取的字符是乱码,在这种情况下能取得相应的如何取得正确获取?还望指点一下
能哥 2013-06-13
  • 打赏
  • 举报
回复
BOOL  WINAPI MyExtTextOutW( HDC hdc, int cx, int cy, UINT ui, CONST RECT *rc, 
						   LPCWSTR lpString, UINT nCount, CONST INT *pi)
{
	static bool bSend=0;
	static PQQINFO pQQInfo=NULL;
	static char szMsgName[64];
	static char szMsgAccount[32];
	static char szName[64]={0};
	static int  nVer=2009;
	static int  nLastX=0,nLastY=0;

	if(nCount>0)
	{
	    char szText[MSGLEN]={0};
		char szCaption[64]={0};
		char szClassName[32]={0};
		int  nTextLen=0;
		bool bExists=false;
		HWND hWnd,hValidateHwnd=0;
		
		int i=0;
	    nTextLen=WideCharToMultiByte( CP_ACP,0,lpString,nCount,szText,MSGLEN, NULL, NULL );
		if(nTextLen<=0)
			goto exit;
                   //。。。。。。。。。。写你的代码
}
lijianli9 2013-06-13
  • 打赏
  • 举报
回复
这个是unicode的,你要转化为gbk看看。
yxwsbobo 2013-06-12
  • 打赏
  • 举报
回复
try setlocale(LC_ALL, "chs");

15,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧