You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python修改默认打印机后,win32api.ShellExecute仍用初始打印机打印的问题

问题解决:修改默认打印机后ShellExecute仍使用初始打印机

问题原因

ShellExecute的print动作可能缓存程序启动时的默认打印机配置,系统默认打印机的变更无法被该API即时感知,导致打印任务始终发送到初始默认打印机。此外,循环内重复导入模块、依赖短暂修改默认打印机再恢复的逻辑也存在时序不可靠的问题。

解决方案

直接在打印命令中指定目标打印机,无需修改系统默认打印机,这种方式更高效且能避免时序问题。同时优化代码结构,将模块导入移到函数外部。

修改后的代码示例(推荐)

import win32print
import win32api
import time

def printfile(filename):
    while True:
        printername = input("printername: ")
        try:
            # 通过/d参数直接指定目标打印机,无需修改系统默认打印机
            win32api.ShellExecute(
                0,
                "print",
                filename,
                f"/d:{printername}",
                ".",
                0
            )
            time.sleep(3)  # 等待打印任务提交完成
        except Exception as err:
            print(err)

printfile('Black.pdf')

备选方案:使用win32print直接处理打印任务

如果ShellExecute方式仍有问题,可尝试用win32print API直接创建打印任务(注意:此方式适合打印机原生支持的文件格式,如文本;打印PDF需额外处理):

import win32print
import win32api
import time

def printfile(filename):
    while True:
        printername = input("printername: ")
        try:
            hprinter = win32print.OpenPrinter(printername)
            try:
                # 初始化打印任务
                win32print.StartDocPrinter(hprinter, 1, (filename, None, "RAW"))
                win32print.StartPagePrinter(hprinter)
                # 读取文件内容并发送至打印机
                with open(filename, "rb") as f:
                    win32print.WritePrinter(hprinter, f.read())
                win32print.EndPagePrinter(hprinter)
                win32print.EndDocPrinter(hprinter)
            finally:
                win32print.ClosePrinter(hprinter)
            time.sleep(2)
        except Exception as err:
            print(err)

printfile('Black.pdf')

打印PDF补充说明:若打印机不支持直接解析PDF,可借助Adobe Acrobat Reader的命令行打印:
win32api.ShellExecute(0, "open", "AcroRd32.exe", f"/t \"{filename}\" \"{printername}\"", ".", 0)

内容的提问来源于stack exchange,提问作者MASOOD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 01:21:17