这两天真是不顺利,首先是昨天模块软件的事情,今天结果又是对方人员说我们组成的数据帧正确,她测试也OK,结果我们自己无论怎么发送就是不行。

然后又是那个传真软件的事情,简直令我抓狂。好端端的一个程序,外部调用后再内部调用打印,结果WIN2K就是报告找不到打印机,WINXP就是可以,还有一个头疼的,我的是WINXP,测试OK,让同事WIN2K帮我测试,告诉我OK,然后我就气势汹汹地冲到报告人那里,以为重装软件,重装打印机驱动,或者SFC /SCANNOW /SCANNOW        立即扫描所有受保护的系统文件。 应该可以解决,结果折腾了半天还是屡次出现,唯一的收获是找到一个不同之处:

如果先运行软件,那么无论是外部调用打印还是内部调用打印,均OK,但是一旦先外部调用,那么内部调用肯定失败。

然后回来再到同事那里一运行,也是一样的效果,我简直无话可说。一问他为什么刚才说可以,他就说我也不知道啊。什么世道?!又不是刚出道的学生,好歹也是一个硕士,年纪也不小了,只好把火气憋住了。不禁怀念那个辞职的同事。

所谓内部调用,就是软件本身模拟了一个资源管理器,选择文件进行发送;外部调用是指直接从外部程序如WORD打印到传真打印机。

做了三个测试版本,非常奇怪的是:显示代码走到PRINTERS.COUNT判断的时候就说明数目为0。可是系统明明有两个打印机。使用COMMONDIALOG.SHOWPRINTER显示却有两个打印机。

回来自己安装了一个WIN2K,调试了一下,的确一外部调用,从程序运行开始就是0了。

Printers 集合可用来查询可用的打印机,这样就可以为应用程序指定一台缺省打印机。例如也许要找出哪些可用打印机用了指定的打印驱动程序。下面的代码查找所有的可用打印机,定位在第一个将页码方向设置为纵向的打印机,然后将其设置为 Portrait。

Dim X As Printer
For Each X In Printers
   If X.Orientation = vbPRORPortrait Then
      \’设定为系统缺省打印机。
      Set Printer = X
      \’ 终止查找打印机。
      Exit For
   End If
Next
dim i as integer
for i=0 to Printers.count-1
  debug.print printer(i).devicename
next
printers.count显示打印机的数目

调用方式:WINWinExec(strExe,SW_SHOW);

The WinExec function runs the specified application.

This function is provided for compatibility with 16-bit Windows. Win32-based applications should use the CreateProcess function
In Win32, the WinExec function returns when the started process calls the GetMessage function or a time-out limit is reached. To avoid waiting for the time out delay, call the GetMessage function as soon as possible in any process started by a call to WinExec
 
Private Sub Form_Load()
    MsgBox Str(Printers.Count)

     If Printers.Count > 0 Then
            End If
    MsgBox "BPrns  " + Str(BPrns)
    If Not BPrns Then \’找不到打印机
        MsgBox "Can not Find  printer,please install the software again!", vbCritical
    End If
    Exit Sub
ee:
    MsgBox Err.Description, vbCritical

调试结果就是报告数目为0,BRNS为FALSE,然后自然就是报告找不到打印机。活活郁闷~~~~~

历史博文

标签:, , ,
七月 22, 2005 at 8:53 下午 by yippee 1,010 次
Category: Dev
Tags: , , ,