我今天在考虑在安排选择打印机的时候该怎么处理.
我在处理某些表格输出的时候,有不同打印机的要求,
1.喷墨  2.针式  3.传真
不要奇怪,的确有很多电脑上都有不同的输出要求的.
还有网络打印机的选择,等等问题.

对于遍历计算机上已连接的打印机,我考虑过很多不同的办法.
但在EXCEL里选择打印机,的确让人头痛.
Application.ActivePrinter= "Canon PIXMA iP1000 在 Ne01:"

要遍历打印机名称,我在EXCEL里翻了半天都没翻到,
然后到VFP里找,原来并不难获得.使用Aprinters( )函数就或以获得数组了.

但用在EXCEL里会出错,为什么?
原来EXCEL还需要一个Ne00:之类的位置说明来充当打印机名称.
郁闷倒.

然后,又去翻WMI,打印机信息里居然也找不到这一数据.
在百度里搜索到了梅子论坛尖嘴狐狸05年发的一张贴:
[quote]使用vfp的ETPRINTER()、APRINTERS( ) 或者APi获取的打印机名称,传递给Excel时都会出错,尤其是网络打印机。

如果前者指定的本地打印机名称为:"张山的打印机-Star AR-3200II"
端口为:"LPT1:"
查询oExl.Application.ActivePrinter的结果却是:"张山的打印机-Star AR-3200II 在 LPT1:"

如果前者指定的网络打印机名称为:"\\文印室\Konica IP-011 Nozomi"
端口为:"LPT1:"
查询oExl.Application.ActivePrinter的结果却是:"\\文印室\Konica IP-011 Nozomi 在 Ne01:"

如何获得Ne01 ?[/quote]
呵呵,幸好,他贴了一张图,成了我的苦海明灯:
[img]http://www.meizvfp.com/bbs/UploadFile/2005-11/20051117971888407.jpg[/img]
知道了注册表的路径,一切都好办了?
----非常郁闷,原来并不好办.注册表归注册表,VFP归VFP,我不可能从VFP获得打印机名称到注册表上去找值吧?
于是乎,又在WMI里钻了大半天,从微软去找,又跑WMI技术指南,终于找齐了这两个命令:
[quote]sub FindPrinter( )
Set objRegistry = GetObject("winmgmts:\\.\root\default:StdRegProv")
objRegistry.EnumValues &H80000001, "Software\Microsoft\Windows NT\CurrentVersion\PrinterPorts", arrSubKeys
For Each subkey In arrSubKeys
    objRegistry.GetStringValue &H80000001, "Software\Microsoft\Windows NT\CurrentVersion\PrinterPorts\", subkey, KK
    Pa = subkey & " 在 " & Mid(KK, InStr(KK, ",") + 1, InStr(KK, ":,") - InStr(KK, ","))
    Debug.Print Pa
Next
Application.ActivePrinter = Pa
End Sub[/quote]
这是VBA代码,简单修整便可以放到VFP中,最后一行的目的是可以证明在EXCEL成功选择这个打印机.