PurplePen.BasicPrinting.PrinterSupportsPostScript C# (CSharp) Method

PrinterSupportsPostScript() static private method

static private PrinterSupportsPostScript ( string printername ) : bool
printername string
return bool
        static bool PrinterSupportsPostScript(string printername)
        {
            List<Int32> PSChecks = new List<Int32>();
            PSChecks.Add(POSTSCRIPT_PASSTHROUGH);
            PSChecks.Add(ENCAPSULATED_POSTSCRIPT);
            PSChecks.Add(POSTSCRIPT_IDENTIFY);
            PSChecks.Add(POSTSCRIPT_INJECTION);
            PSChecks.Add(POSTSCRIPT_DATA);
            PSChecks.Add(POSTSCRIPT_IGNORE);

            IntPtr hDC = IntPtr.Zero;
            IntPtr BLOB = IntPtr.Zero;

            try {
                hDC = CreateDC(null, printername, null, IntPtr.Zero);

                int isz = 4;
                BLOB = Marshal.AllocCoTaskMem(isz);
                Marshal.WriteInt32(BLOB, GETTECHNOLOGY);

                int test = ExtEscape(hDC, QUERYESCSUPPORT, 4, BLOB, 0, IntPtr.Zero);
                if (test == 0) return false; // printer driver does not support GETTECHNOLOGY Checks.

                foreach (Int32 val in PSChecks) {
                    Marshal.WriteInt32(BLOB, val);
                    test = ExtEscape(hDC, QUERYESCSUPPORT, isz, BLOB, 0, IntPtr.Zero);
                    if (test != 0) return true; // if any of the checks pass, return true
                }
            }
            catch (Exception) {
                return false;
            }
            finally {
                if (hDC != IntPtr.Zero) DeleteDC(hDC);
                if (BLOB != IntPtr.Zero) Marshal.FreeCoTaskMem(BLOB);
            }

            return false;
        }