C# 是否所有打印机都有相同的dmpaper_A4值?

C# 是否所有打印机都有相同的dmpaper_A4值?,c#,windows,winapi,printing,printers,C#,Windows,Winapi,Printing,Printers,我正在处理打印机设置功能。 Microsoft有DeviceCapabilities API,允许您检索打印机设置信息 该函数使用dmPaperSize作为纸张大小,DMPAPER_A4是dmPaperSize中的成员之一。A4纸张定义为在我的打印机中值为9的DMPAPER_A4。我的问题是,对于所有打印机,DMPAPER_A4是否总是9 同样对于dmDefaultSource,dmDefaultSource的所有成员在每个打印机上的值是否相同(如果可以在windows中安装) 谢谢。是的,DM

我正在处理打印机设置功能。 Microsoft有DeviceCapabilities API,允许您检索打印机设置信息

该函数使用dmPaperSize作为纸张大小,DMPAPER_A4是dmPaperSize中的成员之一。A4纸张定义为在我的打印机中值为9的DMPAPER_A4。我的问题是,对于所有打印机,DMPAPER_A4是否总是9

同样对于dmDefaultSource,dmDefaultSource的所有成员在每个打印机上的值是否相同(如果可以在windows中安装)


谢谢。

是的,
DMPAPER\u A4
在Windows SDK头文件中定义为
9
。这意味着所有打印机上的A4纸张大小都将用值9标识。因此,如果您需要在无法使用Windows头文件的平台上检查该值,您可以安全地假设9是A4纸张大小

理论上,微软可以改变这个值,因为他们只保证常量
DMPAPER_A4
代表A4纸,而不是它总是有值9。但实际上,微软不可能做到这一点。这样做会破坏数百个应用程序,因此,如果无法使用官方常量名称,则可以安全地编码值9


对于
dmDefaultSource
,Win32打印子系统中具有文档化名称或值的所有成员对于所有打印机都是相同的。不符合Windows标准的打印机无法在Windows上工作。

我刚刚发现我的打印机HP Officejet Pro 8500 A910的存储箱编号为15、259、258、257,存储箱名称自动选择、打印机自动选择、纸盘1、纸盘2。我的pdf995的存储箱编号为15、157、名称自动选择,只有一个。只有一个人应该是1号。15应该是DMBIN_FORMSOURCE。打印机似乎不符合ms标准。@peter像pdf995这样的虚拟打印机不符合标准并不奇怪,但HP打印机应该符合。我不确定你所说的是否与HP不符。谢谢你的帮助。我认为15号箱子的箱子名称应该是DMBIN_FORMSOURCE或FORMSOURCE。自动选择应为DMBIN_AUTO=7。我不确定我是否正确。@Gábor我理解这一点。它是基本的C++。我认为任何为Win32 API编写代码的人都很可能理解它。