【已解决】关于在win32_printer匹配两个属性的问题
本帖最后由 ila 于 2015-12-4 16:28 编辑目标:
根据Caption匹配得到的信息里获取Attributes的值。
需要获取现有已安装打印机的Attributes值。
我现在是这样子写,不知道是否正确。$StrComputer="."
$obj=ObjGet("winmgmts:\\"&$StrComputer&"\root\CIMV2")
$colitems=$obj.ExecQuery("Select * from Win32_Printer")
For $objitem In $colitems
If $objitem.Caption=="SHARP AR-1808S" Then MsgBox (0,0,$objitem.Attributes)
Next 我这边测试是OK的,但是不晓得你要进行什么操作~~
添加tcp/ip打印端口,设置默认打印机这些操作貌似不需要你说的这个属性~ 本帖最后由 ila 于 2015-12-3 16:40 编辑
回复 2# 虫子樱桃
实在受不了部分员工操作时把打印机搞的脱机,想找代码判断状态,然后把打印机恢复联机。
有些打印机如果把数据弄掉了,立马变脱机,插回去还是一样脱机。
为了检测某个打印机的状态是联机还是脱机,
理论上可以这样:
$StrComputer="."
$obj=ObjGet("winmgmts:\\"&$StrComputer&"\root\CIMV2")
$colitems=$obj.ExecQuery("Select * from Win32_Printer")
For $objitem In $colitems
If $objitem.Caption=="SHARP AR-1808S" Then
$a=Int($objitem.Attributes / 1024)
If Mod($a, 2)=0 Then
MsgBox(0,0,"联机",8)
ElseIf Mod($a, 2)=1 Then
MsgBox(0,0,"脱机",8)
Else
MsgBox(0,0,"谁知道",8)
EndIf
EndIf
next
ps:请问把打印机恢复联机的代码从哪里来实现? 回复 2# 虫子樱桃
樱桃你知道SCIT自动补充括号和双引号的代码是什么嘛!!! 回复 3# ila
已经测试成功,望对你有所帮助,请修改标题为【已解决】
$StrComputer="."
$obj=ObjGet("winmgmts:\\"&$StrComputer&"\root\CIMV2")
$colitems=$obj.ExecQuery("Select * from Win32_Printer")
For $objitem In $colitems
If $objitem.Caption=="SHARP AR-1808S" Then
$a=Int($objitem.Attributes / 1024)
If Mod($a, 2)=0 Then
MsgBox(0,0,"打印机当前状态为联机",8)
ElseIf Mod($a, 2)=1 Then
MsgBox(0,0,"打印机当前状态为脱机,点确定后将设置为联机",8)
;核心代码
$objitem.WorkOffline = False
$objitem.Put_
;~~~~~~~~~~~~~~~~~~~~~~
MsgBox(0,'','已经设置打印机为联机状态')
Else
MsgBox(0,0,"不晓得",8)
EndIf
EndIf
next 回复 4# cfanpc
这个不是很清楚了,好久没改配置文件了~~ 本帖最后由 ila 于 2015-12-4 14:06 编辑
回复ila
已经测试成功,望对你有所帮助,请修改标题为【已解决】
虫子樱桃 发表于 2015-12-4 11:23 http://www.autoitx.com/images/common/back.gif
很感谢回复。
请问$objitem.Put_这句是把$objitem.WorkOffline = False运行?
即把WorkOffline 状态改成False? 回复 7# ila
是的,WorkOffline属性,分别使用true和false来标识是否离线使用打印机 回复ila
是的,WorkOffline属性,分别使用true和false来标识是否离线使用打印机
虫子樱桃 发表于 2015-12-4 14:42 http://www.autoitx.com/images/common/back.gif
请问 $objitem.Put_是只针对WorkOffline还是其他情况也适用?
在那些wmi查询工具里找不到这个资料。 回复 9# ila
其他情况也适用 本帖最后由 ila 于 2015-12-5 14:25 编辑
用python的wmi模块写了一遍,发现编译器提示最后一行的Put_方法出错。
在一个python群看到你的qq,也请你有空看看这那里出错。Traceback (most recent call last):
File "C:\1.py", line 10, in <module>
printt.WorkOffLine=False
File "C:\Python27\lib\site-packages\wmi.py", line 576, in __setattr__
raise AttributeError (attribute)
AttributeError: WorkOffLine附上py的代码:import wmi
c=wmi.WMI()
wql="Select * from Win32_Printer where Caption='Adobe PDF'"
for printt in c.query(wql):
(x,y)=divmod(int(printt.Attributes /1024),2)
if y==0:
print "lianji"
else:
print "tuoji"
printt.WorkOffLine=False
printt.Put_
win3com.client模块也一样,Put_无法实现。import win32com.client
strComputer="."
obj=win32com.client.Dispatch("WbemScripting.SwbemLocator")
objj=obj.ConnectServer(strComputer,"root\cimv2")
colItems=objj.ExecQuery("Select * from Win32_Printer where Caption='Adobe PDF'")
for objItem in colItems:
(x,y)=divmod(int(objItem.Attributes / 1024),2)
if y==0:
print "lianji"
else:
print "tuoji"
objItem.WorkOffline=False
objItem.Put_
顺手把恢复打印也贴上:
bat代码cscript prnqctl.vbs -m-p "Adobe PDF"
回复 12# ila
python我也不是很熟悉,只是才学,有个模块,估计可以,但是我还不懂怎么样正确使用,研究的代码只有下面的这些了#!/usr/bin/python34
# -*- coding: utf-8 -*-
import win32print
#pdfFactory Pro
objprinter = win32print.OpenPrinter('pdfFactory Pro')
print(objprinter)
dget = win32print.GetPrinter(objprinter,2)
print(dget)
win32print.SetPrinter(objprinter,2,dget,win32print.PORT_STATUS_OFFLINE)
参考
http://timgolden.me.uk/pywin32-docs/win32print__SetPrinter_meth.html
http://timgolden.me.uk/pywin32-docs/win32print__GetPrinter_meth.html
http://timgolden.me.uk/pywin32-docs/win32print__OpenPrinter_meth.html 回复ila
python我也不是很熟悉,只是才学,有个模块,估计可以,但是我还不懂怎么样正确使用,研究的代 ...
虫子樱桃 发表于 2015-12-5 18:16 http://www.autoitx.com/images/common/back.gif
感谢回复,忘记win32print这个模块了,我试试。
页:
[1]