gpt4 book ai didi

python - 使用 pywin32 更改打印机托盘

转载 作者:行者123 更新时间:2023-11-30 23:43:03 27 4
gpt4 key购买 nike

我尝试使用 Python win32print 模块更改打印机托盘,但没有成功。打印机支持两个“容器”:7=自动和4=手动。我想从“手动”纸箱开始打印作业。这是一些代码:

import win32print
import win32gui

# Constants from wingdi.h
DM_OUT_BUFFER = 0x02
DM_IN_BUFFER = 0x08
DM_IN_PROMPT = 0x04
DM_DEFAULT_SOURCE = 0x200

# Get a handle for the default printer
device_name = win32print.GetDefaultPrinter()
handle = win32print.OpenPrinter(device_name)

# Get the default properties for the printer
properties = win32print.GetPrinter(handle, 2)
devmode = properties['pDevMode']

# Print the default paper source (prints '7' for 'Automatically select')
print(devmode.DefaultSource)

# Change the default paper source to '4' for 'Manual feed'
devmode.DefaultSource = 4
devmode.Fields = devmode.Fields | DM_DEFAULT_SOURCE

# Write these changes back to the printer
win32print.DocumentProperties(None, handle, device_name, devmode, devmode, DM_IN_BUFFER | DM_OUT_BUFFER)

# Confirm the changes were updated
print(devmode.DefaultSource) # Aaargh! Prints '7' again!

# Start printing with the device
hdc = win32gui.CreateDC('', device_name, devmode)
win32print.StartDoc(hdc, ('Test', None, None, 0))
win32print.StartPage(hdc)

# ... GDI drawing commands ...

win32print.EndPage(hdc)
win32print.EndDoc(hdc)

显然,要么 PyDEVMODE 结构未更新,要么驱动程序以某种方式拒绝了我的更改。

如果下面一行:

win32print.DocumentProperties(None, handle, device_name, devmode, devmode, DM_IN_BUFFER | DM_OUT_BUFFER)

更改为:

win32print.DocumentProperties(None, handle, device_name, devmode, devmode, DM_IN_PROMPT | DM_IN_BUFFER | DM_OUT_BUFFER)

然后会显示“打印”对话框,我可以从那里更改纸张来源。然后,这些更改会被正确复制到 devmode 结构,并且从手动进纸托盘按预期进行打印。

所以我认为我的问题是对 PyDEVMODE 结构的更改不会重新编码,因此当结构重新提交到 DocumentProperties 时会丢失。有任何想法吗?非常感谢。

最佳答案

某些旧版本的 Pywin32 中存在一个错误,可能会导致该行为。尝试安装最新版本 (217)。

关于python - 使用 pywin32 更改打印机托盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11045704/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com