基于AutoIt3的打印机安装

#Region ;**** 编译指令由 AutoIt3Wrapper 选项编译窗口创建 ****
#AutoIt3Wrapper_Icon=favicon.ico
#AutoIt3Wrapper_Compile_Both=y
#EndRegion ;**** 编译指令由 AutoIt3Wrapper 选项编译窗口创建 ****
#cs ----------------------------------------------------------------------------

 Version: 1.0
 Author:         MaJunyi

#ce ----------------------------------------------------------------------------
#include <StringConstants.au3> ; for 正则表达式
#include <GUIConstantsEx.au3> ; for GUI
#include <WinAPIShellEx.au3>; for winShell
#include <InetConstants.au3>; for download
; CPL文件,又叫控制面板项(Control Panel Item),多保存于系统安装目录的system32文件夹下,它们分别对应着控制面板中的项目

; 优化:
; 1. 可以添加一号楼绝大部分打印机
; 2. 可添加二号楼3.4.5楼打印机
; 3. 可进入---控制面板所有控制面板项设备和打印机(control printers)
; 不足:
; 1. 暂未添加用户名至网络打印机
; 2. 打印楼层单一


$headlabel = "打印机添加和安装"
GUICreate($headlabel, 400, 280)
$okbutton = GUICtrlCreateButton("确认安装", 30, 200, 70, 30)
$localPrintBtn = GUICtrlCreateButton("已安装的打印机", 120, 200, 100, 30)
$printDriverBtn = GUICtrlCreateButton("打印机驱动", 240, 200, 100, 30)


$guiTop = 20

GUICtrlCreateLabel("请选择您的位置:", 30, $guiTop)
$guiTop+=20
Local $idRadio1 = GUICtrlCreateRadio("一号楼", 40, $guiTop)
$guiTop1 = $guiTop
$guiTop+=20
Local $idRadio231 = GUICtrlCreateRadio("二号楼-3楼1", 40, $guiTop)
$guiTop231 = $guiTop
$guiTop+=20
Local $idRadio232 = GUICtrlCreateRadio("二号楼-3楼2", 40, $guiTop)
$guiTop232 = $guiTop
$guiTop+=20
Local $idRadio241 = GUICtrlCreateRadio("二号楼-4楼1", 40, $guiTop)
$guiTop241 = $guiTop
$guiTop+=20
Local $idRadio242 = GUICtrlCreateRadio("二号楼-4楼2", 40, $guiTop)
$guiTop242 = $guiTop
$guiTop+=20
Local $idRadio25 = GUICtrlCreateRadio("二号楼-5楼", 40, $guiTop)
$guiTop25 = $guiTop



; 检测是否云桌面
isCloudOrNot()
GUISetState(@SW_SHOW)
Sleep(200)
; 下载驱动
$printDriverIp = "\xxx.xxx.xxx.xxx"
; GUICtrlCreateLabel("连接及下载打印机驱动,从" & $printDriverIp, 30, 30)
; Sleep(200)
; $openNetPrint = _WinAPI_ShellExecute ($printDriverIp)
; GUICtrlCreateLabel("尝试连接打印机(会显示打印机任务,需去打印机刷卡才会打印)", 30, 50)
; Sleep(200)



; GUICtrlCreateLabel("打开 " & $ctrlPrintShow, 30, 70)


; net use \xxx.xxx.xxx.xxxeFollow_Printer  /user:HEM100


; Script Start - Add your code below here
; 检测是否云
Func isCloudOrNot()
    Local $string0 = StringRegExp(@IPAddress1, '(172.xx.)(d+.d+)', $STR_REGEXPARRAYMATCH)
    If Not @error Then
        $isYun = 0
        MsgBox(0,'', '您是尊贵的云用户,不能添加打印机')
    Else
        If @error==1 Then
            ; Return "您不是云用户"
            Return "正在为您添加打印机"
        Else
            Return "请联系开发人员,错误代码:" & @error
            ; 2: 正则表达式错误, 数组无效.
        EndIf
    EndIf
EndFunc



Global $chooseRadio
Global $driverIp
Global $driverIpFile
$LianJieTipsLeft = 200

While 1
  $msg = GUIGetMsg()
  Select
    Case $msg = $idRadio1 And BitAND(GUICtrlRead($idRadio1), $GUI_CHECKED) = $GUI_CHECKED
        $chooseRadio = 1
        ; MsgBox($MB_SYSTEMMODAL, 'Info', $chooseRadio)
        GUICtrlCreateLabel("驱动服务器" & canConnectOrNot('xxx.xxx.xxx.xxx'), $LianJieTipsLeft, $guiTop1+5)
    Case $msg = $idRadio231 And BitAND(GUICtrlRead($idRadio231), $GUI_CHECKED) = $GUI_CHECKED
        $chooseRadio = 231 ;ok
        $driverIpFile = "UNIV_driverSetup.exe"
        $driverIp = "\172.16.11.234"
        GUICtrlCreateLabel("驱动服务器" & canConnectOrNot('xxx.xxx.xxx.xxx'), $LianJieTipsLeft, $guiTop231+5)
    Case $msg = $idRadio232 And BitAND(GUICtrlRead($idRadio232), $GUI_CHECKED) = $GUI_CHECKED
        $chooseRadio = 232 ;ok
        $driverIpFile = "UNIV_driveressetup.exe"
        $driverIp = "\172.16.11.220"
        GUICtrlCreateLabel("驱动服务器" & canConnectOrNot('xxx.xxx.xxx.xxx'), $LianJieTipsLeft, $guiTop232+5)
    Case $msg = $idRadio241 And BitAND(GUICtrlRead($idRadio241), $GUI_CHECKED) = $GUI_CHECKED
        $chooseRadio = 241 ;ok
        $driverIpFile = "UNIV_driverSetup.exe"
        $driverIp = "\172.16.242.245"
        GUICtrlCreateLabel("驱动服务器" & canConnectOrNot('xxx.xxx.xxx.xxx'), $LianJieTipsLeft, $guiTop241+5)
    Case $msg = $idRadio242 And BitAND(GUICtrlRead($idRadio242), $GUI_CHECKED) = $GUI_CHECKED
        $chooseRadio = 242 ;ok
        $driverIpFile = "UNIV_driveressetup.exe"
        $driverIp = "\172.16.11.228"
        GUICtrlCreateLabel("驱动服务器" & canConnectOrNot('xxx.xxx.xxx.xxx'), $LianJieTipsLeft, $guiTop242+5)
    Case $msg = $idRadio25 And BitAND(GUICtrlRead($idRadio25), $GUI_CHECKED) = $GUI_CHECKED
        $chooseRadio = 25 ;ok
        $driverIpFile = "UNIV_driverSetup.exe"
        $driverIp = "\172.16.241.172"
        GUICtrlCreateLabel("驱动服务器" & canConnectOrNot('xxx.xxx.xxx.xxx'), $LianJieTipsLeft, $guiTop25+5)
    Case $msg = $okbutton
        If $chooseRadio == 1 Then
            MsgBox(0,"","尝试连接打印机(会显示打印机任务,需去打印机刷卡才会打印)")
            $openNetPrintFile = _WinAPI_ShellExecute ("\xxx.xxx.xxx.xxxeFollow_Printer")
        ElseIf $chooseRadio > 1 Then
            $mLink = $driverIp  & $driverIpFile
            $openNetPrintFile = _WinAPI_ShellExecute ($mLink)
            ; downloadFile('printDriver.exe', "file://xxx.xxx.xxx.xxx/UNIV_driver/Setup.exe")
        Else
            MsgBox(0,"","请选择您的位置")
        EndIf
        ; ExitLoop
    Case $msg = $localPrintBtn
        ; $ctrlPrintShow = "控制面板硬件和声音设备和打印机"
        ; $openPrintDir = _WinAPI_ShellExecute("::{2227A280-3AEA-1069-A2DE-08002B30309D}")
        $openPrintDir = Run(@SystemDir & "control.exe printers")
    Case $msg = $printDriverBtn
        $openNetPrintFile = _WinAPI_ShellExecute ("\xxx.xxx.xxx.xxx")
    Case $msg = $GUI_EVENT_CLOSE
        ; 关闭对话框事件
        ExitLoop
  EndSelect
WEnd


; 检测是否能连接上指定IP
Func canConnectOrNot($testIP)
    ; Ping网站,超时时间为 1000 毫秒.
    Local $iPing = Ping($testIP, 1000)
    If $iPing Then
        Return "连接成功"
    Else
        ;当函数执行失败时(返回 0)@error 包含数值的具体信息:
        If @error == 1 Then
            Return "离线"
        ElseIf @error == 2 Then
            Return "无法到达"
        ElseIf @error == 3 Then
            Return "目标错误"
        ElseIf @error == 4 Then
            Return "其他错误-连接超时"
        Else
            Return "连接超时"
        EndIf
    EndIf
EndFunc



Func downloadFile($mFile, $link)
    ProgressOn("下载新版本:"&$mFile, "正在更新版本,请稍候...", "0%")
    Local $i = 0
    Do
        Sleep(100)
        ;$i = $i+1
        $i = Round(FileGetSize($mFile)/1024/10)
        ; Update the progress value of the progress bar window.
        ProgressSet($i, $i & "%")
    Until InetGetInfo($link, $INET_DOWNLOADCOMPLETE)
    ; Set the "subtext" and "maintext" of the progress bar window.
    ProgressSet(100, "更新完成", "Complete")
    Sleep(1000)
    ; Close the progress window.
    ProgressOff()
EndFunc
 
原文地址:https://www.cnblogs.com/mjy2wxy/p/11468528.html