コード例 #1
0
        /// <summary>
        /// Eseguo una azione su di una stampante (server di stampa).
        /// Devo usare i ManagementObject perché le classi apposite non vanno.
        /// </summary>
        /// <param name="azione"></param>
        /// <param name="printerName"></param>
        public void azioneSuSingolaStampante(PrnAzione azione, string printerName)
        {
            string query = string.Format("SELECT * from Win32_Printer WHERE Name LIKE '%{0}'", printerName);

            ManagementObjectSearcher   searcher = new ManagementObjectSearcher(query);
            ManagementObjectCollection coll     = searcher.Get();

            foreach (ManagementObject printer in coll)
            {
                printer.InvokeMethod(azione.ToString(), null);
            }
        }
コード例 #2
0
        // private void azioneSuTutteLeStampanti__NON_VA( PrnAzione azione ) {

        private void azioneSuTutteLeStampanti(PrnAzione azione)
        {
            foreach (var stampanteAbbinata in stampantiAbbinate)
            {
                var prn = stampanteAbbinata.StampanteInstallata.NomeStampante;

                try {
                    azioneSuSingolaStampante(azione, prn);
                    _giornale.Info("Azione: " + azione + " su stampante " + prn + " riuscita");
                } catch (Exception ee) {
                    _giornale.Error("Azione " + azione + " su stampante " + prn + " non riuscita", ee);
                }
            }
        }
コード例 #3
0
        /// <summary>
        /// Questa implementazione che è quella più intelligente, non mi funziona.
        /// Mi solleva una eccezione che dice che non sono autorizzato, non ho i permessi ????
        /// Nonostante io richieda i permessi di amministrare il server di stampa
        /// </summary>
        /// <param name="azione"></param>
        private void azioneSuSingolaStampante__NON__VA__access_denied(PrnAzione azione, String nomeStampante)
        {
            var         match       = Regex.Match(nomeStampante, @"(?<machine>\\\\.*?)\\(?<queue>.*)");
            PrintServer printServer = null;

            if (match.Success)
            {
                // Come print-server uso il server di rete
                printServer = new PrintServer(match.Groups ["machine"].Value, PrintSystemDesiredAccess.AdministrateServer);
            }
            else
            {
                // Come print-server uso me stesso
                printServer = new PrintServer(PrintSystemDesiredAccess.AdministrateServer);
            }

            using ( printServer ) {
                PrintQueue printQueue = null;
                if (match.Success)
                {
                    printQueue = printServer.GetPrintQueue(match.Groups ["queue"].Value);
                }
                else
                {
                    printQueue = printServer.GetPrintQueue(nomeStampante);
                }

                // Ricavo la coda di stampa (cioè la stampante) e le sue capacità.
                using ( printQueue ) {
                    if (azione == PrnAzione.Pause)
                    {
                        printQueue.Pause();
                    }

                    if (azione == PrnAzione.Resume)
                    {
                        printQueue.Resume();
                    }
                }
            }
        }