获取打印机名称
;获取已连接到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)) 又学到有用的知识了。感谢分享。
页:
[1]