我需要通过win32 api获取特定打印机的可用支持打印机文档功能。是否有获取高级打印机设备设置的API?
我所指的选项在下图中为示例打印机显示。您可以通过右键单击打印机图标和单击首选项并单击对话框中的高级选项卡来获得此对话框。
谁能告诉我需要的API我需要调用,并在其他什么?
我针对的是Windows XP +并使用vb6。
我需要通过win32 api获取特定打印机的可用支持打印机文档功能。是否有获取高级打印机设备设置的API?
我所指的选项在下图中为示例打印机显示。您可以通过右键单击打印机图标和单击首选项并单击对话框中的高级选项卡来获得此对话框。
谁能告诉我需要的API我需要调用,并在其他什么?
我针对的是Windows XP +并使用vb6。
我认为你正在寻找的是winspool.drv的DeviceCapabilities
。来自Microsoft的代码Sample。大部分文档的在线现在天是对于.NET,所以我在VB6定义类型从Dan Appleman's Visual Basic Programmer's Guide to the Win32 API
VB6的声明是:基于您的评论
Declare Function DeviceCapabilities& Lib "winspool.drv" Alias "DeviceCapabilitiesA" (ByVal lpDeviceName as String, ByVal lpPort as String, ByVal iIndex as Long, ByVal lpOutput as String, ByVal lpDeviceMode as Long)
,你将需要使用DocumentProperties
它可用于检索或修改DevMode
结构。它可能会或可能不会有你在找什么。你最好的选择是获得上面的书,第12章有丰富的信息。同样看着你的照片,看起来你正在使用某种POS打印,你应该咨询制造商有关打印机可能支持的特定api的文档。
Declare Function DocumentProperties& Lib "winspool.drv" Alias "DocumentPropertiesA" (ByVal hwnd as Long, ByVal hPrinter as Long, ByVal pDeviceName as String, ByVal pDeviceModeOutput as Long, ByVal pDeviceModelInput as Long, ByVal fMode as Long)
DEVMODE结构
Public Const CCHDEVICENAME = 32
Public Const CCHFORMNAME = 32
Type DEVMODE
dmDeviceName as String * CCHDEVICENAME
dmSpecVersion as Integer
dmDriverVersion as Integer
dmSize as Integer
dmDriverExtra as Integer
dmFields as Long
dmOrientation as Integer
dmPaperSize as Integer
dmPaperLength as Integer
dmPaperWidth as Integer
dmScale as Integer
dmCopies as Integer
dmDefaultSource as Integer
dmPrintQuality as Integer
dmColor as Integer
dmDuplex as Integer
dmYResolution as Integer
dmTTOption as Integer
dmCollate as Integer
dmFormName as String * CCHFORMNAME
dpBitsPerPixel as Integer
dmBitsPerPel as Long
dmPelWidth as Long
dmPelHeight as Long
dmDisplayFlags as Long
dmDisplayFrequency as Long
dmICMMethod as Long
dmICMIntent as Long
dmMediaType as Long
dmDitherType as Long
dmReserved1 as Long
dmReserved2 as Long
End Type
的DeviceCapabilities函数是只读的。你要找的是DocumentProperties function。 DeviceCapabilities实际上是相当过时的,因为它假定只有一个用户和一个应用程序正在使用打印机,所以应该早已过时。您不想为每个打印作业设置打印机属性;您要为当前打印作业设置文档属性。 DocumentProperties函数将为您做到这一点,但请密切关注上面链接中有关如何进行更改的说明。这是一个不必要的复杂功能。
感谢您的回答,但我可以修改这些属性吗? – Smith 2012-07-05 21:15:59