前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >au3 创建打印机

au3 创建打印机

作者头像
py3study
发布2020-01-08 16:57:44
5670
发布2020-01-08 16:57:44
举报
文章被收录于专栏:python3

#include <GUIConstants.au3>

Opt("traymenumode", 1) TraySetClick(8) Opt("TrayAutoPause", 0) Opt("trayOnEventMode", 1)

$g_szVersion = "打印机添加助手 Beta 1.0 作者:xrbenbeba" If WinExists($g_szVersion, "当前打印机列表") Then Exit AutoItWinSetTitle($g_szVersion)

;定义常量 $TRAY_EVENT_PRIMARYDOUBLE = -13 $TRAY_DISABLE = 128 $TRAY_ENABLE = 64 $LBS_STANDARD = 0xA00003 $BS_FLAT = 0x8000 $WS_CHILD = 0x40000000

$mainwindow = GUICreate("打印机添加助手 Beta 1.0 作者:xrbenbeba ", 500, 370, @DesktopWidth / 2 - 500 / 2, @DesktopHeight / 2 - 370 / 2)

;创建GUI ;GUI当前打印机列表 ;MsgBox(0, "注意", "1.此软件仅用于当前工作环境." & @CRLF & "2.此软件不作于商业用途以及其他不良行为." & @CRLF & "3.此软件仅用于添加标准TCP/IP端口的打印机." & @CRLF & "5.此软件不提供删除打印机的功能." & @CRLF & "6.未经制作者允许,不要传播和修改此软件." & @CRLF & "7.如有建议和问题请联系我们.")

$InputInfo = "请正确输入机器名或IP!" $strComputer = InputBox("请输入", "提示:" & @CRLF & @CRLF & "1.请正确输入需要管理的机器的IP或者机" & @CRLF & "  器名." & @CRLF & @CRLF & "2.不要输入127.0.0.1的IP这样会导致出现" & @CRLF & "  无法正常选择驱动的错误!" & @CRLF & @CRLF & "3.如果不输入或者为空默认为本机." & @CRLF & @CRLF & "4.取消则退出.", $InputInfo, "", -1, 235) If @error = 0 Then If $strComputer = "" Or $strComputer = $InputInfo Then $objSWbemServices = ObjGet("winmgmts:\\.\root\cimv2") ;获取默认机器名 $colSWbemObjectSet = $objSWbemServices.ExecQuery("Select * from Win32_ComputerSystem") For $objSWbemObject In $colSWbemObjectSet $strComputer = $objSWbemObject.Name Next EndIf Else Exit EndIf

FileCopy(@HomeDrive & "\WINDOWS\inf\ntprint.inf", @ScriptDir & "\ntprint.ini", 1) $group1 = GUICtrlCreateGroup("当前打印机列表:", 10, 15, 255, 165) $List1 = GUICtrlCreateList("", 92, 35, 161, 135, $LBS_STANDARD) _PrinterCount()

$DelPrinter = GUICtrlCreateButton("删   除", 20, 35, 68, 30, $BS_FLAT) $Findconfig = GUICtrlCreateButton("察看配置", 20, 68, 68, 30, $BS_FLAT) $CancelAllJobs = GUICtrlCreateButton("清除作业", 20, 101, 68, 30, $BS_FLAT) $Refresh = GUICtrlCreateButton("刷新列表", 20, 134, 68, 30, $BS_FLAT)

;GUI当前打印机器信息 $group2 = GUICtrlCreateGroup("当前打印机器信息", 280, 15, 210, 165) GUICtrlCreateLabel("打印机IP:", 295, 35, 60, 15) $currentPrinterName = GUICtrlCreateInput("", 355, 32, 125, 20) GUICtrlCreateLabel("驱动型号:", 295, 63, 60, 15) $DriverName = GUICtrlCreateInput("", 355, 60, 125, 20) GUICtrlCreateLabel("是否默认:", 295, 91, 60, 15) $IsDefultPrinter = GUICtrlCreateInput("", 355, 88, 125, 20) GUICtrlCreateLabel("接口类型:", 295, 119, 60, 15) $InterfaceType = GUICtrlCreateInput("", 355, 115, 125, 20) $PrintTestPage = GUICtrlCreateButton("打印测试页", 295, 147, 68, 28, $BS_FLAT) $ResetIP = GUICtrlCreateButton("重置IP", 410, 147, 68, 28, $BS_FLAT) GUICtrlCreateGroup("", -99, -99, 1, 1)

;GUI添加打印机 $group3 = GUICtrlCreateGroup("添加打印机", 10, 190, 255, 165) GUICtrlCreateLabel("打印机名:", 40, 220, 60, 15) $PrinterName = GUICtrlCreateInput("", 115, 215, 125, 20) GUICtrlCreateLabel("打印机IP:", 40, 245, 60, 15) $PrinterIP = GUICtrlCreateInput("", 115, 240, 125, 20) GUICtrlCreateLabel("驱动型号:", 40, 270, 60, 15) $HP = GUICtrlCreateRadio("HP", 115, 270, 50, 20) GUICtrlSetState(-1, $GUI_CHECKED) $Xerox = GUICtrlCreateRadio("Xerox", 190, 270, 50, 20) $FujiXerox = GUICtrlCreateRadio("Fuji Xerox", 115, 290, 60, 20) $AddPrinter = GUICtrlCreateButton("添加", 25, 320, 60, 30, $BS_FLAT) $Other = GUICtrlCreateButton("添加向导", 105, 320, 60, 30, $BS_FLAT) $Reset = GUICtrlCreateButton("清空", 185, 320, 60, 30, $BS_FLAT) GUICtrlCreateGroup("", -99, -99, 1, 1)

;GUI打印机驱动 $group4 = GUICtrlCreateGroup("请选择打印机驱动", 280, 190, 210, 165) $List2 = GUICtrlCreateList("", 285, 215, 200, 95, $LBS_STANDARD) _ReadIniHP()

GUICtrlCreateLabel("联系我们:", 290, 315, 195, 15) $label_url = GUICtrlCreateLabel("", 290, 330, 175, 20) GUICtrlSetFont(-1, 9, -1, 4) GUICtrlSetCursor(-1, 0) GUICtrlCreateGroup("", -99, -99, 1, 1) GUISetState(@SW_SHOW)

;建立托盘信息 TraySetToolTip("打印机添加助手 Beta 1.0 作者:xrbenbeba") $Helpitem = TrayCreateItem("帮助") TrayItemSetOnEvent($Helpitem, "_Helpitem") TrayCreateItem("") $aboutitem = TrayCreateItem("关于") TrayItemSetOnEvent($aboutitem, "_Aboutitem") TrayCreateItem("") $exititem = TrayCreateItem("退出") TrayItemSetOnEvent($exititem, "_Exit") TraySetOnEvent($TRAY_EVENT_PRIMARYDOUBLE, "_Restore") TraySetState()

$mouseon = 0 ;鼠标经过控件的标记 While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE ;关闭程序 DllCall("user32.dll", "int", "AnimateWindow", "hwnd", $mainwindow, "int", 500, "long", 0x00090000) Exit Case $DelPrinter ;删除 $SetDefultPrinterName = "'" & GUICtrlRead($List1) & "'" _DelPrinter($SetDefultPrinterName) _PrinterCount() Case $Findconfig ;察看配置 $SetDefultPrinterName = "'" & GUICtrlRead($List1) & "'" _FindConfig($SetDefultPrinterName) Case $ResetIP ;_SetIP() $strComputerNew = InputBox("请输入", "提示:" & @CRLF & @CRLF & "1.请正确输入需要管理的机器的IP或者机" & @CRLF & "  器名." & @CRLF & @CRLF & "2.不要输入127.0.0.1的IP这样会导致出现" & @CRLF & " 无法正常选择驱动的错误!" & @CRLF & @CRLF & "3.如果不输入或为空,默认为本机." & @CRLF & @CRLF & "4.取消不改变当前设置.", $InputInfo, "", -1, 235) If @error = 0 Then $strComputer = $strComputerNew If $strComputerNew = "" Or $strComputerNew = $InputInfo Then $objSWbemServices = ObjGet("winmgmts:\\.\root\cimv2") ;获取默认机器名 $colSWbemObjectSet = $objSWbemServices.ExecQuery("Select * from Win32_ComputerSystem") For $objSWbemObject In $colSWbemObjectSet $strComputer = $objSWbemObject.Name Next EndIf EndIf _PrinterCount() Case $CancelAllJobs ;清除所有作业 $SetDefultPrinterName = "'" & GUICtrlRead($List1) & "'" _CancelAllJobs($SetDefultPrinterName) Case $Reset ;重置(清空输入) GUICtrlSetData($PrinterName, "") GUICtrlSetData($PrinterIP, "") Case $HP _ReadIniHP() Case $Xerox _ReadIniXerox() Case $FujiXerox _ReadIniFujiXerox() Case $Other GUICtrlSetData($PrinterName, "") GUICtrlSetData($PrinterIP, "") _AddOther() _PrinterCount() Case $AddPrinter ;添加打印机 $SetPrinterDriver = GUICtrlRead($List2) $SetPrinterName = GUICtrlRead($PrinterName) $SetPrinterIP = GUICtrlRead($PrinterIP) If $SetPrinterDriver <> "" And $SetPrinterName <> "" And $SetPrinterIP <> "" Then $Flag = MsgBox(1, "提示", "打印机名为:" & $SetPrinterName & @CRLF & "打印机IP为:" & $SetPrinterIP & @CRLF & "打印驱动为:" & $SetPrinterDriver & @CRLF & @CRLF & "确认添加?") If $Flag = 1 Then _AddPrinter() _PrinterCount() EndIf Else MsgBox(0, "警告", "IP,名称,驱动不能为空!" & @CRLF & "请重新输入!") EndIf Case $Refresh _PrinterCount() Case $PrintTestPage $SetDefultPrinterName = "'" & GUICtrlRead($List1) & "'" _PrintTestPage($SetDefultPrinterName) EndSwitch $mousepos = GUIGetCursorInfo($mainwindow) If $mousepos[4] == $label_url Then If $mouseon Then $mouseon = 0 GUICtrlSetPos($label_url, 292, 328, 175, 20) GUICtrlSetColor($label_url, 0x0000FF) EndIf If $mousepos[2] Then RunWait(@ComSpec & ' /c Adviceforyou.msg', "", @SW_HIDE) Sleep(100) EndIf Else If Not $mouseon Then $mouseon = 1 GUICtrlSetPos($label_url, 290, 330, 175, 20) GUICtrlSetColor($label_url, 0x000000) EndIf EndIf WEnd

Func _DelPrinter($SetDefultPrinterName) $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2") $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Printer Where DeviceID = " & $SetDefultPrinterName) For $objNetAdapter In $colItems $objNetAdapter.Delete_ MsgBox(0, "提示", "删除成功!") Next EndFunc   ;==>_DelPrinter

Func _FindConfig($SetDefultPrinterName) $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2") $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Printer Where DeviceID = " & $SetDefultPrinterName) For $objNetAdapter In $colItems GUICtrlSetData($DriverName, $objNetAdapter.DriverName) If $objNetAdapter.Default = 0 Then GUICtrlSetData($IsDefultPrinter, "True") Else GUICtrlSetData($IsDefultPrinter, "False") EndIf If $InterfaceType = $objNetAdapter.Network Then GUICtrlSetData($InterfaceType, "Network Printer") Else GUICtrlSetData($InterfaceType, "Local Standard Interface") EndIf If StringUpper(StringLeft($objNetAdapter.PortName, 3)) = "IP_" Then GUICtrlSetData($currentPrinterName, StringTrimLeft($objNetAdapter.PortName, 3)) Else GUICtrlSetData($currentPrinterName, "Local Printer") EndIf Next EndFunc   ;==>_FindConfig

Func _CancelAllJobs($SetDefultPrinterName) $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2") $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Printer Where DeviceID = " & $SetDefultPrinterName) For $objNetAdapter In $colItems $objNetAdapter.CancelAllJobs() MsgBox(0, "提示", "清除作业成功") Next EndFunc   ;==>_CancelAllJobs

Func _ReadIniHP() GUICtrlSetData($List2, "") $SectionNames = IniReadSection(@ScriptDir & "\ntprint.ini", "HP") If @error Then MsgBox(0, "", "发生错误,缺少标准的INI文件.") Else For $i = 1 To $SectionNames[0][0] $Temp1 = StringTrimLeft($SectionNames[$i][0], 1) $Temp2 = StringTrimRight($Temp1, 1) $Temp3 = StringUpper($Temp2) If StringLeft($Temp3, 11) = "HP LASERJET" And Not StringIsAlpha(StringMid($Temp3, 13, 1)) And StringMid($Temp3, 13, 1) <> "" Then GUICtrlSetData($List2, $Temp3) EndIf Next EndIf EndFunc   ;==>_ReadIniHP

Func _ReadIniXerox() GUICtrlSetData($List2, "") $SectionNames = IniReadSection(@ScriptDir & "\ntprint.ini", "Xerox") If @error Then MsgBox(0, "", "发生错误,缺少标准的INI文件.") Else For $i = 1 To $SectionNames[0][0] $Temp1 = StringTrimLeft($SectionNames[$i][0], 1) $Temp2 = StringTrimRight($Temp1, 1) $Temp3 = StringUpper($Temp2) GUICtrlSetData($List2, $Temp3) Next EndIf EndFunc   ;==>_ReadIniXerox

Func _ReadIniFujiXerox() GUICtrlSetData($List2, "") $SectionNames = IniReadSection(@ScriptDir & "\ntprint.ini", "Fuji_Xerox") If @error Then MsgBox(0, "", "发生错误,缺少标准的INI文件.") Else For $i = 1 To $SectionNames[0][0] $Temp1 = StringTrimLeft($SectionNames[$i][0], 1) $Temp2 = StringTrimRight($Temp1, 1) $Temp3 = StringUpper($Temp2) GUICtrlSetData($List2, $Temp3) Next EndIf EndFunc   ;==>_ReadIniFujiXerox

Func _PrinterCount() GUICtrlSetData($List1, "") $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2") $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Printer") For $objNetAdapter In $colItems GUICtrlSetData($List1, $objNetAdapter.DeviceID) Next EndFunc   ;==>_PrinterCount Func _AddPrinter() ProgressOn("处理中,请稍候...", "", "", -1, -1, 2 + 16) ProgressSet(0, "已完成 0%", "正在创建变量...") Sleep(300) $Patch = "\\" & $strComputer & "\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\" $Patch001 = "\\" & $strComputer & "\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Print\Monitors\Standard TCP/IP Port\Ports\" $i = 1 $s = "" ProgressSet(10, "已完成 10%", "正在检测端口信息...") Sleep(300) Do $Var = RegEnumKey($Patch, $i) $i = $i + 1 $s = $s & $Var & "/" ProgressSet(10 + $i, "已完成 " & 10 + $i & "%", "正在检测端口信息...") Sleep(300) Until StringLeft($Var, 3) <> "IP_"

$x = StringInStr($s, "IP_" & $SetPrinterIP)

$PortName = "IP_" & $SetPrinterIP $NewPatch = $Patch & $PortName $NewPatch001 = $Patch001 & $PortName ProgressSet(30, "已完成 30%", "正在检测端口是否存在...") Sleep(300) If $x = 0 Then ProgressSet(40, "已完成 40%", "端口不存在,在正在创建端口...") Sleep(300) RegWrite($NewPatch) RegWrite($NewPatch, "Protocol", "REG_DWORD", "00000001") RegWrite($NewPatch, "Version", "REG_DWORD", "00000001") RegWrite($NewPatch, "HostName", "REG_SZ", "") RegWrite($NewPatch, "IPAddress", "REG_SZ", $SetPrinterIP) RegWrite($NewPatch, "HWAddress", "REG_SZ", "") RegWrite($NewPatch, "PortNumber", "REG_DWORD", "9100") RegWrite($NewPatch, "SNMP Community", "REG_SZ", "public") RegWrite($NewPatch, "SNMP Enabled", "REG_DWORD", "00000001") RegWrite($NewPatch, "SNMP Index", "REG_DWORD", "00000001") ProgressSet(60, "已完成 60%", "端口不存在,正在创建端口...") Sleep(300) RegWrite($NewPatch001) RegWrite($NewPatch001, "Protocol", "REG_DWORD", "00000001") RegWrite($NewPatch001, "Version", "REG_DWORD", "00000001") RegWrite($NewPatch001, "HostName", "REG_SZ", "") RegWrite($NewPatch001, "IPAddress", "REG_SZ", $SetPrinterIP) RegWrite($NewPatch001, "HWAddress", "REG_SZ", "") RegWrite($NewPatch001, "PortNumber", "REG_DWORD", "9100") RegWrite($NewPatch001, "SNMP Community", "REG_SZ", "public") RegWrite($NewPatch001, "SNMP Enabled", "REG_DWORD", "00000001") RegWrite($NewPatch001, "SNMP Index", "REG_DWORD", "00000001") ProgressSet(70, "已完成 70%", "正在停止打印服务...") RunWait(@ComSpec & " /c sc \\" & $strComputer & " stop spooler", "", @SW_HIDE) ProgressSet(75, "已完成 80%", "正在启动打印服务...") RunWait(@ComSpec & " /c sc \\" & $strComputer & " start spooler", "", @SW_HIDE) ProgressSet(80, "已完成 80%", "准备添加打印机...") Sleep(300) Else ProgressSet(60, "已完成 60%", "端口已经存在,准备添加打印机...") Sleep(300) EndIf ProgressSet(90, "已完成 90%", "正在添加打印机...") RunWait(@ComSpec & ' /c rundll32 printui.dll,PrintUIEntry /if /b "' & $SetPrinterName & '" /c \\'& $strComputer & ' /f %windir%\inf\ntprint.inf /r "' & $PortName & '" /m "' & $SetPrinterDriver & '"', "", @SW_HIDE) ;MsgBox (0,"注意","添加打印机完毕!") Sleep(300) ProgressSet(100, "已完成 100%", "添加打印机完毕!") ProgressOff() MsgBox(0, "", "添加完毕!") EndFunc   ;==>_AddPrinter

Func _PrintTestPage($SetDefultPrinterName) $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2") $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Printer Where DeviceID = " & $SetDefultPrinterName) For $objNetAdapter In $colItems $objNetAdapter.PrintTestPage() MsgBox(0, "提示", "请检查是否打印成功!") Next EndFunc   ;==>_PrintTestPage

Func _AddOther() RunWait(@ComSpec & " /c rundll32 printui.dll,PrintUIEntry /il /c \\" & $strComputer, "", @SW_HIDE) EndFunc   ;==>_AddOther

Func _Exit() ;托盘退出事件 DllCall("user32.dll", "int", "AnimateWindow", "hwnd", $mainwindow, "int", 500, "long", 0x00090000) Exit EndFunc   ;==>_Exit

Func _Helpitem() ;托盘帮助事件 ShellExecute(@ScriptDir & "\readme.txt", @SW_MAXIMIZE) EndFunc   ;==>_Helpitem

Func _Aboutitem() ;托盘关于事件 MsgBox(0, "关于", "xrbenbeba制作" & @CRLF & @CRLF & "") EndFunc   ;==>_Aboutitem

Func _Restore() ;托盘双击事件 WinSetState($mainwindow, "", @SW_SHOW) WinSetState($mainwindow, "", @SW_RESTORE) EndFunc   ;==>_Restore

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/09/03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档