示例#1
0
        protected static void SetDeviceInfo4(string name, PRINTER_INFO_4 newInfo)
        {
            IntPtr          printerHandle;
            PrinterDefaults defaults = new PrinterDefaults {
                DesiredAccess = PRINTER_ACCESS.PrinterAllAccess
            };

            if (!PrintPort.OpenPrinter(name, out printerHandle, ref defaults))
            {
                throw new Win32Exception(Marshal.GetLastWin32Error());
            }
            try
            {
                IntPtr infoHandle = Marshal.AllocHGlobal(Marshal.SizeOf(newInfo));
                Marshal.StructureToPtr(newInfo, infoHandle, false);
                try
                {
                    if (!SetPrinter(printerHandle, 4, infoHandle, 0))
                    {
                        throw new Win32Exception(Marshal.GetLastWin32Error());
                    }
                }
                catch { throw; }
                finally { Marshal.FreeHGlobal(infoHandle); }
            }
            catch { throw; }
            finally { PrintPort.ClosePrinter(printerHandle); }
        }
示例#2
0
        public static void Uninstall(string name)
        {
            if (!name.EndsWith("\0"))
            {
                name += "\0";
            }
            IntPtr          handle   = IntPtr.Zero;
            PrinterDefaults defaults = new PrinterDefaults {
                DesiredAccess = PRINTER_ACCESS.PrinterAllAccess
            };

            try
            {
                if (!PrintPort.OpenPrinter(name, out handle, ref defaults))
                {
                    int errorCode = Marshal.GetLastWin32Error();
                    if (errorCode != ERROR_INVALID_PRINTER_NAME)
                    {
                        throw new Win32Exception(errorCode);
                    }
                }
                if (!DeletePrinter(handle))
                {
                    throw new Win32Exception(Marshal.GetLastWin32Error());
                }
            }
            catch { throw; }
            finally
            {
                PrintPort.ClosePrinter(handle);
            }
        }
示例#3
0
        public static SmartPrintPort Install(string name)
        {
            IntPtr          printerHandle;
            PrinterDefaults defaults = new PrinterDefaults {
                DesiredAccess = PRINTER_ACCESS.ServerAdmin
            };

            try
            {
                if (!PrintPort.OpenPrinter(",XcvMonitor " + PrintMonitor.DEFAULT_MONITOR_NAME, out printerHandle, ref defaults))
                {
                    throw new Win32Exception(Marshal.GetLastWin32Error());
                }
                try
                {
                    if (!name.EndsWith("\0"))
                    {
                        name += "\0";
                    }
                    uint   size    = (uint)(name.Length * 2);
                    IntPtr pointer = Marshal.AllocHGlobal((int)size);
                    Marshal.Copy(name.ToCharArray(), 0, pointer, name.Length);
                    IntPtr pOutputData = IntPtr.Zero;
                    UInt32 outputNeeded, status;
                    try
                    {
                        if (!PrintPort.XcvDataW(printerHandle, "AddPort", pointer, size, pOutputData, 0, out outputNeeded, out status))
                        {
                            throw new Win32Exception((int)status);
                        }
                    }
                    catch { throw; }
                    finally
                    {
                        Marshal.FreeHGlobal(pointer);
                    }
                }
                catch { throw; }
                finally
                {
                    PrintPort.ClosePrinter(printerHandle);
                }
            }
            catch { throw; }
            return((new SmartPrintPort(name)).saveAllProperties());
        }
示例#4
0
        protected static PRINTER_INFO_4 GetDeviceInfo4(string name)
        {
            IntPtr          pHandle;
            PrinterDefaults defaults = new PrinterDefaults {
                DesiredAccess = PRINTER_ACCESS.PrinterUse
            };

            try
            {
                if (!PrintPort.OpenPrinter(name, out pHandle, ref defaults))
                {
                    throw new Win32Exception(Marshal.GetLastWin32Error());
                }
                try
                {
                    Int32  cbNeeded = 0;
                    IntPtr pAddr    = IntPtr.Zero;
                    if (!GetPrinter(pHandle, 4, IntPtr.Zero, 0, out cbNeeded) || 0 > cbNeeded)
                    {
                        throw new Win32Exception(Marshal.GetLastWin32Error());
                    }
                    pAddr = Marshal.AllocHGlobal((int)cbNeeded);
                    try
                    {
                        if (!GetPrinter(pHandle, 4, pAddr, cbNeeded, out cbNeeded))
                        {
                            throw new Win32Exception(Marshal.GetLastWin32Error());
                        }
                        return((PRINTER_INFO_4)Marshal.PtrToStructure(pAddr, typeof(PRINTER_INFO_4)));
                    }
                    catch { throw; }
                    finally { Marshal.FreeHGlobal(pAddr); }
                }
                catch { throw; }
                finally { PrintPort.ClosePrinter(pHandle); }
            }
            catch { throw; }
        }