Pregunta
驱动牛犊
驱动牛犊
  • 注册日期2004-10-09
  • 最后登录2006-10-26
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
阅读:3627回复:15

请教一个打印驱动的初级问题,请各位大佬多多指教

楼主#
更多 发布于:2005-01-29 11:28
我是驱动的新手,可能很多问题说不清楚,请进来帮助我的各位多多指教,对于有帮助的回答,分数一定送出。

我安装的是win2kddk。
目前我想通过以下步骤实现打印机的监控,主要是截获打印内容,参考了一些资料,大概思路是这样的:修改oemdll的输出为bitmap,然后在调用真正的打印接口。
1。修改oemdll的输出为bitmap
   首先要编译oemdll,我把ddk下的oemdll文件拷贝到其他目录,并进行编译,具体目录为“G:DriverDemosoemdll”,然后build,
现生成的i386文件目录下有一堆lib,dll,esp文件。
   现在我想知道,生成的dll怎么跟虚拟打印机关联,说白了,我做到这一步,下面应该怎么做,请指教!
2,怎么修改oemdll使其输出的是bitmap?
   我参考了一些资料,也在oemuni和oemui目录下的源文件中找到了控制输出的部分(但不知是否正确)
在class IOemUni的pubic声明部分
  STDMETHOD(TextOutAsBitmap)(THIS_        SURFOBJ    *pso,
                                            STROBJ     *pstro,
                                            FONTOBJ    *pfo,
                                            CLIPOBJ    *pco,
                                            RECTL      *prclExtra,
                                            RECTL      *prclOpaque,
                                            BRUSHOBJ   *pboFore,
                                            BRUSHOBJ   *pboOpaque,
                                            POINTL     *pptlOrg,
                                            MIX         mix);



在HRESULT __stdcall IOemUni::GetImplementedMethod(PSTR pMethodName)函数里面
   case 'T':
            if (!strcmp(NAME_TextOutAsBitmap, pMethodName))
            {
                Result = S_OK;
            }
            else if (!strcmp(NAME_TTDownloadMethod, pMethodName))
            {
                Result = S_OK;
            }
            else if (!strcmp(NAME_TTYGetInfo, pMethodName))
            {
                Result = S_OK;
            }
            break;

我想TextOutAsBitmap函数就是我要找的了,但是他具体是怎么操作的,或者说在哪个部分可以调用这个函数来改变输出格式就不知道了,在interface.cpp文件里有
HRESULT __stdcall IOemUni::TextOutAsBitmap(
    SURFOBJ    *pso,
    STROBJ     *NAME_o,
    FONTOBJ    *pfo,
    CLIPOBJ    *pco,
    RECTL      *prclExtra,
    RECTL      *prclOpaque,
    BRUSHOBJ   *pboFore,
    BRUSHOBJ   *pboOpaque,
    POINTL     *pptlOrg,
    MIX         mix)
{
    VERBOSE(DLLTEXT("IOemUni::TextOutAsBitmap() entry.rn"));

    return E_NOTIMPL;
}

具体怎么来实现这个输出还请给予帮助



3。实现输出后,怎么继续调用原来的打印接口(不知道我这句话描述的是不是清楚)


以上是我的问题的具体描述,有不当之处,敬请指教,感激不尽!

[编辑 -  1/31/05 by  Pregunta]
多交流,多学习,共同提高。
snowStart
驱动老牛
驱动老牛
  • 注册日期2004-04-06
  • 最后登录2011-06-02
  • 粉丝0
  • 关注0
  • 积分95分
  • 威望19点
  • 贡献值177点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-01-29 11:45
具体安装请看一看目录内的inf
学习,关注,交流中... [email=fengyu@163.com]Email:snowstarth@163.com[/email] [url]http://bbs.zndev.com/?a=snowStart[/url]
snowStart
驱动老牛
驱动老牛
  • 注册日期2004-04-06
  • 最后登录2011-06-02
  • 粉丝0
  • 关注0
  • 积分95分
  • 威望19点
  • 贡献值177点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-01-29 11:48
这种方法能实现你的功能吗
学习,关注,交流中... [email=fengyu@163.com]Email:snowstarth@163.com[/email] [url]http://bbs.zndev.com/?a=snowStart[/url]
Pregunta
驱动牛犊
驱动牛犊
  • 注册日期2004-10-09
  • 最后登录2006-10-26
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-01-29 11:51
应该能实现,我是参考FinePrint的思路做的,inf文件是一种摸版吧?你的意思是安装dll要用到inf文件?好的,我先看一下,顺便问一下,为什么我只能给出20分?谢谢你的回答!
多交流,多学习,共同提高。
peirose
驱动牛犊
驱动牛犊
  • 注册日期2005-01-08
  • 最后登录2005-03-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-01-29 12:33
inf里面有很多注册表的选项.....安装时系统通过inf文件才能找到你的驱动.......分数是发贴和回贴都会增加
Pregunta
驱动牛犊
驱动牛犊
  • 注册日期2004-10-09
  • 最后登录2006-10-26
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-01-29 12:37
inf里面有很多注册表的选项.....安装时系统通过inf文件才能找到你的驱动.......分数是发贴和回贴都会增加


谢谢你的回答,inf文件具体怎么安装呢?
多交流,多学习,共同提高。
peirose
驱动牛犊
驱动牛犊
  • 注册日期2005-01-08
  • 最后登录2005-03-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-01-29 13:03
你可以手动安装....inf文件..然后系统就会找到你的驱动...也可以通过函数调用....封装到installsheild中
Pregunta
驱动牛犊
驱动牛犊
  • 注册日期2004-10-09
  • 最后登录2006-10-26
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2005-01-29 13:22
你可以手动安装....inf文件..然后系统就会找到你的驱动...也可以通过函数调用....封装到installsheild中


老兄,照顾一下新手,有没有手动安装的资料可参考,封装到installsheild暂时就不用这个方法了,我还初在摸索阶段
多交流,多学习,共同提高。
Pregunta
驱动牛犊
驱动牛犊
  • 注册日期2004-10-09
  • 最后登录2006-10-26
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2005-01-29 15:15
ok,安装的问题已经解决了,我测试了一下,可以截获打印的文本,word,以及图片保存成.pdf格式到本地







[编辑 -  1/31/05 by  Pregunta]
多交流,多学习,共同提高。
peirose
驱动牛犊
驱动牛犊
  • 注册日期2005-01-08
  • 最后登录2005-03-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2005-01-29 15:47
哈哈.......兄弟具体怎么做的.....说说看么....

挺不错的....这么快呀
Pregunta
驱动牛犊
驱动牛犊
  • 注册日期2004-10-09
  • 最后登录2006-10-26
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2005-01-31 08:36
目前能实现的是本地打印的截获,共享和远程的还没测试,如果也可以,这倒是个简单易行的方法  :)

你可以试一下,编译oemdll,安装他自带的inf文件即可~~

输出bitmap格式的文件我还没实现,但我想基本的效果是达到了
多交流,多学习,共同提高。
caesun
驱动小牛
驱动小牛
  • 注册日期2001-12-10
  • 最后登录2006-12-01
  • 粉丝0
  • 关注0
  • 积分290分
  • 威望30点
  • 贡献值393点
  • 好评度21点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2005-02-02 18:36
感觉应该用language monitor  or  port monitor 来做
Pregunta
驱动牛犊
驱动牛犊
  • 注册日期2004-10-09
  • 最后登录2006-10-26
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2005-02-03 08:08
感觉应该用language monitor  or  port monitor 来做


这个倒没有接触过,据说这个也不好实现 :(
现在我想对虚拟打印的过程跟踪调试一下,各位有没有好的建议?
多谢了
多交流,多学习,共同提高。
Pregunta
驱动牛犊
驱动牛犊
  • 注册日期2004-10-09
  • 最后登录2006-10-26
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2005-02-18 10:08
现在发现新的问题,用这种方法只能实现以Adobo FDF打印驱动为基础的打印截获,其他驱动则不行,看来好是要按照原定思路进行,哪位有更好的办法吗? 具体如何“修改oemdll的输出为bitmap”还请做过的朋友指点!
多交流,多学习,共同提高。
aqua_aqua
驱动牛犊
驱动牛犊
  • 注册日期2005-01-16
  • 最后登录2005-09-15
  • 粉丝0
  • 关注0
  • 积分48分
  • 威望9点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2005-02-19 21:01
这个倒没有接触过,据说这个也不好实现 :(
现在我想对虚拟打印的过程跟踪调试一下,各位有没有好的建议?
多谢了


我也想呀,兄弟如果找到方法了,麻烦也告诉俺一声.
MSN:aqua_aqua@21cn.com
Pregunta
驱动牛犊
驱动牛犊
  • 注册日期2004-10-09
  • 最后登录2006-10-26
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2005-02-21 08:06
一起讨论吧,现在找参考资料,真是头痛
多交流,多学习,共同提高。
游客

返回顶部