找回密码
 加入
搜索
查看: 6852|回复: 13

[系统综合] 要添加网络打印机,请问如何判断打印机已存在

  [复制链接]
发表于 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"
先谢过!
发表于 2012-5-24 18:48:20 | 显示全部楼层
路过帮忙顶起!
发表于 2012-5-24 19:25:04 | 显示全部楼层
XP的话可以考虑WMI,添加打印机要跳出界面?你是模拟操作?
发表于 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  '设置默认打印机
 楼主| 发表于 2012-5-25 09:23:49 | 显示全部楼层
回复 3# 502762378

直接用的批处理,start \\10.100.140.1\hp_5f
所以会跳
 楼主| 发表于 2012-5-25 09:25:54 | 显示全部楼层
回复 4# fpquenya


    NAME倒是没关系,打印机都在服务器上,都是可知的
这个VBS怎么样才能不设默认打印机呢,因为个别用户本地已经安装了打印机并且设为默认的,添加的网络打印机只是备用的
发表于 2012-5-25 10:32:45 | 显示全部楼层
本帖最后由 fpquenya 于 2012-5-25 10:58 编辑
回复  fpquenya
    NAME倒是没关系,打印机都在服务器上,都是可知的
这个VBS怎么样才能不设默认打 ...
pandy05 发表于 2012-5-25 09:25

写一个可以判断的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
                If  LCase(oNetwork.EnumPrinterConnections.Item(S+1)) = LCase(sPrnName) Then
                        isInstalled = True '标记已经安装了此打印机
                        Exit For '找到后即退出For循环,提高性能,后面不能再枚举其他情况了.
                End If 
        Next
End Function

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2012-5-25 11:22:26 | 显示全部楼层
回复 7# fpquenya


    强悍,多谢多谢!
发表于 2012-5-25 13:00:33 | 显示全部楼层
写一个可以判断的Vbs,请自己修改打印机实际共享名和Name
fpquenya 发表于 2012-5-25 10:32


这个是vbs呀!
发表于 2012-5-25 15:54:29 | 显示全部楼层
都是牛人啊……学习下。
发表于 2012-5-25 16:42:05 | 显示全部楼层
回复 8# pandy05

请楼主修改下标题[已解决]
 楼主| 发表于 2012-5-25 16:53:44 | 显示全部楼层
本帖最后由 pandy05 于 2012-5-25 16:55 编辑

回复 11# fpquenya


    因为要脚本还叫判断不能IP段安装不同打印机,故vbs脚本已经修改成au3,在XP上运行没问题,WIN7上会提示 安装驱动,手动确认“安装驱动程序”后程序会出错,
发表于 2012-5-25 21:15:28 | 显示全部楼层
回复 12# pandy05


    WMI中Win32_PrinterDriver的addprinterdrive应该r可以安装打印机驱动程序
 楼主| 发表于 2012-6-9 16:29:08 | 显示全部楼层
回复 13# 502762378


    这个是什么东东,不懂
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-23 23:32 , Processed in 0.256820 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表