【问题标题】:Retrieving Device Context from .NET print API从 .NET 打印 API 检索设备上下文
【发布时间】:2012-05-30 15:08:39
【问题描述】:

我正在开发一个 .NET 应用程序来控制 DataCard 桌面卡片打印机,但我偶然发现了一个问题。为了执行磁条和芯片编码,我必须调用本机打印机 API dll 中的一个函数来启用打印机交互模式。

我已经设法创建了 P/Invoke 代码来调用这个本机函数。但问题是这个方法以打印机设备上下文句柄为参数,必须在调用 Gdi32 StartDoc 函数之前调用。

在 .NET 打印 API 中,我确实可以从 Graphics 对象访问 hDC。但据我所知,Graphics 对象仅在调用 StartDoc 函数后可用。

所以我的问题是,是否有人知道在调用 StartDoc 之前检索上下文的方法?

【问题讨论】:

    标签: c# .net printing pinvoke


    【解决方案1】:

    您可以通过 OpenPrinter 检索打印机句柄 (HANDLE),然后通过传入此句柄调用 CreateDC 随时获取打印机 DC(在 StartDoc 之前)。

    【讨论】:

    • 我假设您的意思是“winspool.drv”和“gdi32.dll”函数?我知道使用本机 C api 做到这一点并不难。但是我的应用程序是一个.NET应用程序,所以我希望我可以尽可能使用.NET api。
    • 您已经在使用 P/Invoke,这就是我冒险回复的原因。在问题中明确提及您的需求。
    • 我想我清楚地提到我的问题出在 .NET 打印 API 上。然而,为 Gdi32 编写我自己的 p/invoke 包装器似乎是实现这一目标的唯一方法。
    猜你喜欢
    • 2010-10-19
    • 2012-05-31
    • 2011-04-02
    • 1970-01-01
    • 2011-12-14
    • 2015-02-20
    • 2013-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多