首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

,关于HOOK StartDocA/StartDocW的一个有关问题

2012-04-25 
求救,关于HOOK StartDocA/StartDocW的一个问题我要做一个监控打印的功能,即在打印的时候把打印的内容或文

求救,关于HOOK StartDocA/StartDocW的一个问题
我要做一个监控打印的功能,即在打印的时候把打印的内容或文件上传到文件服务器进行备份,但是要不影响打印功能,我是用的《windows 核心编程》中的一个APIHook的一个类,具体做法:
CAPIHook g_StartDocA("gdi32.dll","StartDocA",(PROC)KApiFunc::CDBStartDocA,TRUE); 
CAPIHook g_StartDocW("gdi32.dll","StartDocW",(PROC)KApiFunc::CDBStartDocW,TRUE);

……
……
……

int KApiFunc::CDBStartDocA(HDC hdc,CONST DOCINFOA* lpdi)
{
  ……// 备份功能
  ……
  ……

  // 正常打印
nRet = StartDocA(hdc, lpdi); 
return nRet;
}

int KApiFunc::CDBStartDocW(HDC hdc,CONST DOCINFOW* lpdi)
{
……// 备份功能
  ……
  ……

  // 正常打印
nRet = StartDocW(hdc, lpdi); 
return nRet;
}

……
……
……

我现在这样做,是可以HOOK到StartDoc这个API的,但是我在打印Excel的时候出问题了,Excel报了一个错,说是office发生了错误,问是否重新启动Excel,点击确定后就自动关闭了,我跟踪了代码,发现代码是正常的,是在CDBStartDocW这个函数执行之后的出现的错误,好像是在Excel内部,我跟踪不到那,但是在使用Word打印时,都是正常的,就是Excel比较奇怪,不知道是不是他们两个API的内部机制不一样,请各位仁兄帮我看看,在线急等……


[解决办法]
你好,我们可以交流下,我也在做打印监控的项目
和你的要求一样

你是不是在备份的时候缓冲区溢出了呢!

热点排行