pandy05 发表于 2012-5-24 18:12:52

要添加网络打印机,请问如何判断打印机已存在

请教高手们一个问题:
域内用户登录运行添加网络打印机脚本,请问如何判断打印机已存在,存在就不运行添加打印机脚本,以避免每次开机都跳出打印机界面?
开机脚本就一条命令:start \\10.100.140.1\hp_5f
PS:虽然以下命令可以解决这个问题,但是却更改了默认打印机,所以不可取:
rundll32 printui.dll,PrintUIEntry /y /n "\\10.100.140.1\hp_5f"
先谢过!

jxfa0086768 发表于 2012-5-24 18:48:20

路过帮忙顶起!

502762378 发表于 2012-5-24 19:25:04

XP的话可以考虑WMI,添加打印机要跳出界面?你是模拟操作?

fpquenya 发表于 2012-5-24 20:57:03

本帖最后由 fpquenya 于 2012-5-25 10:53 编辑

回复 1# pandy05

网络打印机判断起来比较麻烦,因为打印机共享名和Name通常不一样.(可以判断的见7楼)
给你一个vbs脚本不用去判断的' Add a Printer Connection vbs script
On Error Resume Next
Dim oNetwork
Set oNetwork = CreateObject("WScript.Network")
Dim sPrnShare
sPrnShare = "\\10.100.140.1\hp_5f"

oNetwork.AddWindowsPrinterConnection sPrnShare'添加打印机
'oNetwork.SetDefaultPrinter sPrnShare'设置默认打印机

pandy05 发表于 2012-5-25 09:23:49

回复 3# 502762378

直接用的批处理,start \\10.100.140.1\hp_5f
所以会跳

pandy05 发表于 2012-5-25 09:25:54

回复 4# fpquenya


    NAME倒是没关系,打印机都在服务器上,都是可知的
这个VBS怎么样才能不设默认打印机呢,因为个别用户本地已经安装了打印机并且设为默认的,添加的网络打印机只是备用的

fpquenya 发表于 2012-5-25 10:32:45

本帖最后由 fpquenya 于 2012-5-25 10:58 编辑

回复fpquenya
    NAME倒是没关系,打印机都在服务器上,都是可知的
这个VBS怎么样才能不设默认打 ...
pandy05 发表于 2012-5-25 09:25 http://www.autoitx.com/images/common/back.gif
写一个可以判断的Vbs,请自己修改打印机实际共享名和Name

'----------------------------------------
'添加windows打印机="\\xcprn\XC_EPSON9450"
'单引号是注释,要启用取消行首的单引号即可.
'----------------------------------------
Option Explicit

Dim oNetwork
Set oNetwork = CreateObject("WScript.Network")

'绝对打印机共享名(注意可能和枚举出来的Item打印机名不同)
Dim sPrnShareName        '打印机共享名
sPrnShareName = "\\xcprn\XC_EPSON9450"

Dim sPrnName                '打印机Name(自己更改)
sPrnName = "\\xcprn\EPSON Stylus Pro 9450"

'如果没有安装,执行添加windows打印机
If isInstalled = False Then
        oNetwork.AddWindowsPrinterConnection(sPrnShareName)        '添加打印机
        'oNetwork.SetDefaultPrinter(sPrnShareName)                        '设置默认打印机
        MsgBox"成功添加了打印机: " & sPrnShareName,vbInformation,"完成"
'Else
'        MsgBox "已经添加过打印机: " & sPrnShareName,vbExclamation,"提示:"
End If
'----------------------------------------
'当Item(S=0)为打印机端口号或IP地址;
'当Item(S=1)为打印机名(可能不是共享名,建议手动改成一致)
'0和1代表一个打印机对象,所以step为2

'当S=N(count)为总的索引数(不代表任何打印机对象),所以要count-1
'----------------------------------------
Function isInstalled()
        Dim S '定义枚举打印机collection返回的索引数
        isInstalled = False
        For S = 0 To oNetwork.EnumPrinterConnections.Count-1 Step 2
                IfLCase(oNetwork.EnumPrinterConnections.Item(S+1)) = LCase(sPrnName) Then
                        isInstalled = True '标记已经安装了此打印机
                        Exit For '找到后即退出For循环,提高性能,后面不能再枚举其他情况了.
                End If
        Next
End Function

pandy05 发表于 2012-5-25 11:22:26

回复 7# fpquenya


    强悍,多谢多谢!

redapple2008 发表于 2012-5-25 13:00:33

写一个可以判断的Vbs,请自己修改打印机实际共享名和Name
fpquenya 发表于 2012-5-25 10:32 http://www.autoitx.com/images/common/back.gif

这个是vbs呀!

onepc 发表于 2012-5-25 15:54:29

都是牛人啊……学习下。

fpquenya 发表于 2012-5-25 16:42:05

回复 8# pandy05

请楼主修改下标题[已解决]

pandy05 发表于 2012-5-25 16:53:44

本帖最后由 pandy05 于 2012-5-25 16:55 编辑

回复 11# fpquenya


    因为要脚本还叫判断不能IP段安装不同打印机,故vbs脚本已经修改成au3,在XP上运行没问题,WIN7上会提示 安装驱动,手动确认“安装驱动程序”后程序会出错,

502762378 发表于 2012-5-25 21:15:28

回复 12# pandy05


    WMI中Win32_PrinterDriver的addprinterdrive应该r可以安装打印机驱动程序

pandy05 发表于 2012-6-9 16:29:08

回复 13# 502762378


    这个是什么东东,不懂
页: [1]
查看完整版本: 要添加网络打印机,请问如何判断打印机已存在