pxr201419 发表于 2022-8-24 16:07:48

获取打印机名称

;获取已连接到USB口的打印机名称列表
(setq path   "HKEY_CURRENT_CONFIG\\System\\CurrentControlSet\\Control\\Print\\Printers"
      printers (vl-remove-if
               '(lambda (x) (= 0 (vl-registry-read (strcat path "\\" x) "PrinterOnLine")))
               (vl-registry-descendents path)))
;获取网络打印机名称列表
(mapcar
'car
(vl-remove-if-not
    '(lambda (y) (wcmatch (cadr y) "192.*"))
    (vl-remove-if
      '(lambda (z) (= (cadr z) nil))
      (mapcar
        '(lambda (x)
           (list
             x
             (vl-registry-read
             (strcat
               "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Print\\Printers\\"
               x)
             "Port")))
        (vl-registry-descendents
          "HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Devices"
          "")))))

;功能:获取已连接到USB口的打印机或网络打印机
;返回:可用打印机名称或nil
;USB口连接有打印机时返回USB口连接的打印机名称
;USB口未连接打印机,有网络打印机时返回网络打印机名称,无网络打印机时返回nil
(defun getCurrentprinter(/ path printers)
(setq        path       "HKEY_CURRENT_CONFIG\\System\\CurrentControlSet\\Control\\Print\\Printers"
        printers (vl-remove-if
                   '(lambda (x)
                      (= 0 (vl-registry-read (strcat path "\\" x) "PrinterOnLine")))
                   (vl-registry-descendents path))
        printers (append
                   printers
                   (list
                     (caar
                     (vl-remove-if-not
                       '(lambda (y) (wcmatch (cadr y) "192.*"))
                       (vl-remove-if
                           '(lambda (z) (= (cadr z) nil))
                           (mapcar
                             '(lambda (x)
                                (list
                                  x
                                  (vl-registry-read
                                  (strcat
                                      "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Print\\Printers\\"
                                      x)
                                  "Port")))
                             (vl-registry-descendents
                             "HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Devices"
                             ""))))))))
(car printers))

happyending 发表于 6 天前

又学到有用的知识了。感谢分享。
页: [1]
查看完整版本: 获取打印机名称