首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • vb中关于打印机编程的几个问题 [已结贴,结贴人:liu_binq63]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • liu_binq63
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 揭帖率:
    发表于:2007-11-09 19:17:25 楼主
    我用的打印机是epson 1600kIII.
    1、如果使用并口直接向打印机发送esc/pk指令,没有任何问题。但是我现在使用一个usb2lpt的转换线,型号是UE-RA15CC,系统显示这个打印端口为“USB000”。这时如果使用open 把这个端口作为一个文件大开的时候,由于这个端口名称后面没有冒号,vb把这个名称就作为一个文件名来处理了,于是程序运行的文件夹下就出现了一个USB000的文件。请问有没有办法使用open 来控制这个usb线上的打印机。
    2、如果使用printer对象,则每次enddoc后打印机都要向前走一页纸,请问怎么让打印机在enddoc命令发出后不向前多走纸。
    3、关于windows的打印api。我在网上找到这么一段代码:
                  option  explicit 
       
                  private  type  docinfo 
                          pdocname  as  string 
                          poutputfile  as  string 
                          pdatatype  as  string 
                  end  type 
       
                  private  declare  function  closeprinter  lib  "winspool.drv"  (byval  _ 
                        hprinter  as  long)  as  long 
                  private  declare  function  enddocprinter  lib  "winspool.drv"  (byval  _ 
                        hprinter  as  long)  as  long 
                  private  declare  function  endpageprinter  lib  "winspool.drv"  (byval  _ 
                        hprinter  as  long)  as  long 
                  private  declare  function  openprinter  lib  "winspool.drv"  alias  _ 
                        "openprintera"  (byval  pprintername  as  string,  phprinter  as  long,  _ 
                          byval  pdefault  as  long)  as  long 
                  private  declare  function  startdocprinter  lib  "winspool.drv"  alias  _ 
                        "startdocprintera"  (byval  hprinter  as  long,  byval  level  as  long,  _ 
                        pdocinfo  as  docinfo)  as  long 
                  private  declare  function  startpageprinter  lib  "winspool.drv"  (byval  _ 
                        hprinter  as  long)  as  long 
                  private  declare  function  writeprinter  lib  "winspool.drv"  (byval  _ 
                        hprinter  as  long,  pbuf  as  any,  byval  cdbuf  as  long,  _ 
                        pcwritten  as  long)  as  long 
       
                  dim  lhprinter  as  long 
       
                  private  sub  command1_click() 
                                dim  lreturn  as  long 
                                dim  lpcwritten  as  long 
                                dim  swrittendata  as  string 
                                swrittendata  =  "hows  that  for  magic  !!!!"  &  vbcrlf 
                                lreturn  =  writeprinter(lhprinter,  byval  swrittendata,  _ 
                                      len(swrittendata),  lpcwritten) 
                  end  sub 
       
                  private  sub  form_load() 
                          dim  lreturn  as  long 
                          dim  ldoc  as  long 
                          dim  mydocinfo  as  docinfo 
       
                          lreturn  =  openprinter(printer.devicename,  lhprinter,  0) 
                          if  lreturn  =  0  then 
                                  msgbox  "the  printer  name  you  typed  wasnt  recognized." 
                                  exit  sub 
                          end  if 
                          mydocinfo.pdocname  =  "aaaaaa" 
                          mydocinfo.poutputfile  =  vbnullstring 
                          mydocinfo.pdatatype  =  vbnullstring 
                          ldoc  =  startdocprinter(lhprinter,  1,  mydocinfo) 
                          call  startpageprinter(lhprinter) 
                  end  sub 
       
                  private  sub  form_unload(cancel  as  integer) 
                          dim  lreturn  as  long 
       
                          lreturn  =  endpageprinter(lhprinter) 
                          lreturn  =  enddocprinter(lhprinter) 
                          lreturn  =  closeprinter(lhprinter) 
                  end  sub 
    但是执行不了,提示我说:
    实时错误“453”,找不到 dll 入口点 openprintera in winspool.drv
    请问这是怎么回事?
    100  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • gyear
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2007-11-09 20:15:391楼 得分:100
    1、没有使用过usb线不清楚。
    2、printer对象的enddoc函数是打印完成一页的标志,是走纸的,printer一般来用于A4的打印,针式打印还是用API吧。
    3、用Microsoft Visual Studio 6.0安装后的工具dependency.exe(在system32目录下)看看你自己机器中的winspool.drv中是否有此函数,此函数别名openprinterw。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • liu_binq63
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2007-11-09 20:34:472楼 得分:0
    晕,我找到第三个问题的答案了:(
    我们用vb写程序,从来不注意大小写问题。
    而且以前使用api的时候都是从api阅览器里copy。
    今天从网上找到的这个代码居然全是小写字母。
    Openprinter这个函数的别名有两个,一个是OpenPrinterA,一个是OpenPrinterW
    改过来就好了:(
    不过还是要谢谢 gyear的热心回答,分全部给你了:)
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • gyear
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2007-11-11 12:35:163楼 得分:0
    没有解决什么问题,还拿了这么多真不好意思。
    以前我总是看见有人问怎么找不到API函数入口的问题,我自己用dependency查看的时候却发现不了问题,看来大小写还是要注意阿,希望此帖可以解决其他为数不多的VB程序员的问题。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • liu_binq63
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2007-11-15 20:06:414楼 得分:0
    不用客气,至少你告诉我用dependency来查看:)我以前还不知道呢:)
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved