[DllImport("winspool.drv", SetLastError = true), DefaultDllImportSearchPaths(DllImportSearchPath.SafeDirectories)]
public static extern bool GetPrinterDriver(IntPtr hPrinter,
[MarshalAs(UnmanagedType.LPTStr)] string environment,
uint level,
IntPtr driverInfo,
int cbBuf,
out uint pcbNeeded);
Declare Function GetPrinterDriver Lib "winspool.dll" (TODO) As TODO
See https://www.pinvoke.net/default.aspx/winspool.DRIVER_INFO_8
Do you know one? Please contribute it!
None.
Please add some!
public const uint DRIVER_INFO_8 = 8;
public const uint PRINTER_DRIVER_XPS = 0x00000002;
private String GetPrinterDriver(string printerName)
{
IntPtr hPrinter = new IntPtr(0);
DocInfo1 di = new DocInfo1();
if (OpenPrinter(printerName.Normalize(), out hPrinter, 0))
{
DriverInfo8 driverInfo = new DriverInfo8();
IntPtr pDriverInfo = IntPtr.Zero;
uint bytesNeeded;
// assume type 3 driver
di.pDataType = "RAW";
GetPrinterDriver(hPrinter, null, DRIVER_INFO_8, pDriverInfo, 0, out bytesNeeded);
pDriverInfo = Marshal.AllocHGlobal((int)bytesNeeded);
if (GetPrinterDriver(hPrinter, null, DRIVER_INFO_8, pDriverInfo, (int)bytesNeeded, out bytesNeeded))
{
driverInfo = (DriverInfo8) Marshal.PtrToStructure(pDriverInfo, typeof(DriverInfo8));
// if type 4 driver
if ((driverInfo.dwPrinterDriverAttributes & PRINTER_DRIVER_XPS) != 0)
{
di.pDataType = "XPS_PASS";
}
}
Marshal.FreeHGlobal(pDriverInfo);
}
}