C# 从.NET打印API检索设备上下文
我正在开发一个.NET应用程序来控制DataCard桌面卡打印机,我偶然发现了一个问题。为了执行磁条和芯片编码,我必须调用本机打印机API dll中的函数以启用打印机交互模式 我已经设法创建了p/Invoke代码来调用这个本机函数。但问题是,此方法将打印机设备上下文句柄作为参数,必须在调用Gdi32 StartDoc函数之前调用 在.NET打印API中,我确实可以从图形对象访问hDC。但据我所知,图形对象只有在调用StartDoc函数后才可用C# 从.NET打印API检索设备上下文,c#,.net,printing,pinvoke,C#,.net,Printing,Pinvoke,我正在开发一个.NET应用程序来控制DataCard桌面卡打印机,我偶然发现了一个问题。为了执行磁条和芯片编码,我必须调用本机打印机API dll中的函数以启用打印机交互模式 我已经设法创建了p/Invoke代码来调用这个本机函数。但问题是,此方法将打印机设备上下文句柄作为参数,必须在调用Gdi32 StartDoc函数之前调用 在.NET打印API中,我确实可以从图形对象访问hDC。但据我所知,图形对象只有在调用StartDoc函数后才可用 因此,我的问题是,在调用StartDoc之前,是否有
因此,我的问题是,在调用StartDoc之前,是否有人知道检索上下文的方法?您可以执行
OpenPrinter
来检索打印机句柄(handle
),然后调用CreateDC
,通过传入此句柄随时(在StartDoc
之前)获取打印机DC.您可以执行一个打开打印机
来检索打印机句柄(句柄
),然后通过传入此句柄来调用CreateDC
,以便随时(在开始DC
之前)获取打印机DC。我假设您指的是“winspool.drv”和“gdi32.dll”函数?我知道使用本机C API做到这一点并不困难。但是我的应用程序是一个.NET应用程序,所以我希望我能尽可能使用.NET api。你已经在使用P/Invoke了,这就是为什么我要冒险回答这个问题。在问题中清楚地提到您的需求。我想我清楚地提到了我的问题是.NET打印API。然而,为Gdi32编写自己的p/invoke包装似乎是实现这一点的唯一方法。我想您指的是“winspool.drv”和“Gdi32.dll”函数?我知道使用本机C API做到这一点并不困难。但是我的应用程序是一个.NET应用程序,所以我希望我能尽可能使用.NET api。你已经在使用P/Invoke了,这就是为什么我要冒险回答这个问题。在问题中清楚地提到您的需求。我想我清楚地提到了我的问题是.NET打印API。然而,为Gdi32编写自己的p/invoke包装器似乎是实现这一点的唯一方法。