Você está offline; aguardando reconexão

Como ativar e desativar uma impressora usando a função SetPrinter no Visual C#

IMPORTANTE: Este artigo foi traduzido pelo software de tradução automática da Microsoft e eventualmente pode ter sido editado pela Microsoft Community através da tecnologia Community Translation Framework (CTF) ou por um tradutor profissional. A Microsoft oferece artigos traduzidos automaticamente por software, por tradutores profissionais e editados pela comunidade para que você tenha acesso a todos os artigos de nossa Base de Conhecimento em diversos idiomas. No entanto, um artigo traduzido pode conter erros de vocabulário, sintaxe e/ou gramática. A Microsoft não é responsável por qualquer inexatidão, erro ou dano causado por qualquer tradução imprecisa do conteúdo ou por seu uso pelos nossos clientes.

Clique aqui para ver a versão em Inglês deste artigo: 315720
Este artigo refere-se ao seguinte namespace de biblioteca de classes do.NET Framework de Microsoft:
  • System.Runtime.InteropServices

NESTA TAREFA

Sumário
Este artigo passo a passo mostra como programaticamente ativar e desativar a funcionalidade de impressão em uma impressora instalada em um computador que ofereça suporte a interface de programação de aplicativo (API) do Win32 no Visual C#.

Requisitos

Você precisa dos seguintes hardwares e softwares para executar os procedimentos neste artigo:
  • Um Microsoft Windows NT, Microsoft Windows 2000, Microsoft Windows Server 2003 ou computador baseado no Microsoft Windows XP
  • Microsoft Visual Studio .NET ou o Microsoft Visual Studio 2005
Você precisa as seguintes capacidades para executar os procedimentos neste artigo:
  • Experiência em programação C#
  • Conhecimento básico da API do Windows

Criar um aplicativo para controlar a impressora

Para criar um aplicativo para controlar a impressora, execute as seguintes etapas:
  1. Iniciar o Visual Studio 2005 ou o Visual Studio .NET de e, em seguida, crie um novo Visual C# projeto de aplicativo console chamado PrinterControl.
  2. Edite Class1. cs no Visual Studio .NET ou Program.cs no Visual Studio 2005. Após a instrução using System; adicione a instrução a seguir:
    using System.Runtime.InteropServices;					
  3. No início do corpo da classe Class1 no Visual Studio .NET de ou programa no Visual Studio 2005, adicione a seguinte declaração de estrutura:
    unsafe struct PRINTER_DEFAULTS{     public void * pDatatype;     // LPTSTR    public void * pDevMode;      // LPDEVMODE    public uint   DesiredAccess; // ACCESS_MASK};					
  4. Após a declaração de estrutura, adicione as seguintes declarações para funções de API do Windows:
    [DllImport("kernel32", SetLastError=true)]static extern int GetLastError();[DllImport("WinSpool.drv", SetLastError=true)]static extern unsafe bool OpenPrinter(string pPrinterName, int * phPrinter, void * pDefault);[DllImport("WinSpool.drv", SetLastError=true)]static extern bool ClosePrinter(int hPrinter);[DllImport("WinSpool.drv",SetLastError=true)]static extern unsafe bool SetPrinter(int hPrinter, uint Level, void * pPrinter, uint Command);					
  5. Após a declaração de função, adicione as seguintes constantes para uso nas funções de API do Windows:
    const uint PRINTER_ACCESS_ADMINISTER = 0x00000004;const uint PRINTER_STATUS_OFFLINE = 0x00000080;const uint PRINTER_CONTROL_PAUSE = 1;    const uint PRINTER_CONTROL_RESUME = 2;const uint PRINTER_CONTROL_PURGE = 3;const uint PRINTER_CONTROL_SET_STATUS = 4;					
  6. Você pode chamar as funções da API do Windows diretamente em seu código. No entanto, é mais conveniente colocá-las em funções de wrapper que lidar com o código não seguro e fornecem o tratamento de exceções de erro. Adicione as seguintes funções de wrapper Class1:
    // Open a printer for administration operations.static unsafe int CSOpenPrinter(string printerName){    bool bResult;    int hPrinter;    PRINTER_DEFAULTS pd;    pd.pDatatype     = null;    pd.pDevMode      = null;    pd.DesiredAccess = PRINTER_ACCESS_ADMINISTER;        bResult = OpenPrinter(printerName, &hPrinter, &pd);    if (!bResult)    {        throw new ApplicationException("Cannot open printer '" +                                         printerName + "' " +                                         Marshal.GetLastWin32Error());    }    return hPrinter;}// Close the printer.static void CSClosePrinter(int hPrinter){    if (!ClosePrinter(hPrinter))    {        throw new ApplicationException("Cannot close printer " +                                        Marshal.GetLastWin32Error());    }}// Pause printer.static unsafe void CSPausePrinter(int hPrinter){    if (!SetPrinter(hPrinter, 0, null, PRINTER_CONTROL_PAUSE))    {        throw new ApplicationException("Cannot pause printer " +                                         Marshal.GetLastWin32Error());    }}// Resume printer.static unsafe void CSResumePrinter(int hPrinter){    if (!SetPrinter(hPrinter, 0, null, PRINTER_CONTROL_RESUME))    {        throw new ApplicationException("Cannot resume printer " +                                         Marshal.GetLastWin32Error());    }}// Disable printer (offline).static unsafe void CSDisablePrinter(int hPrinter){    if (!SetPrinter(hPrinter, 0,                    (byte*)PRINTER_STATUS_OFFLINE,                     PRINTER_CONTROL_SET_STATUS))    {        throw new ApplicationException("Cannot disable printer " +                                         Marshal.GetLastWin32Error());    }}// Enable printer.static unsafe void CSEnablePrinter(int hPrinter){    if (!SetPrinter(hPrinter, 0, (byte*)0, PRINTER_CONTROL_SET_STATUS))    {        throw new ApplicationException("Cannot enable printer " +                                         Marshal.GetLastWin32Error());    }}					
  7. Adicione o seguinte código na função principal para chamar as funções de wrapper para demonstrar as operações de controle de impressora (você precisará especificar o nome da impressora na chamada da função CSOpenPrinter ):
    [STAThread]static void Main(string[] args){    int hPrinter;    try    {  // Edit the following line to match your printer name.        hPrinter = CSOpenPrinter("YourPrinterName");        CSDisablePrinter(hPrinter);        Console.WriteLine("The printer is disabled");        Console.ReadLine();        CSEnablePrinter(hPrinter);        Console.WriteLine("The printer is enabled");        Console.ReadLine();        CSPausePrinter(hPrinter);        Console.WriteLine("The printer is paused");                Console.ReadLine();        CSResumePrinter(hPrinter);                Console.WriteLine("The printer is resumed");        Console.ReadLine();                CSClosePrinter(hPrinter);    }    catch (ApplicationException e)    {        Console.WriteLine("Exception: {0}", e.Message);    }}					

Criar o aplicativo

Antes de criar o aplicativo, você deve habilitar compilação de código não seguro para o seu projeto.

Para fazer isso, execute as seguintes etapas:
  1. No Solution Explorer, clique com o botão PrinterControle, em seguida, clique em Propriedades no menu de atalho.
  2. Na caixa de diálogo PrinterControl Property Pages , clique em Configuration Propertiese defina Permitir blocos de código desprotegido para True.

    Observação: No 2005 Visual Studio, clique em criar na caixa de diálogo Páginas de propriedades de PrintControl e, em seguida, clique para selecionar a caixa de seleção de código não seguro permitir .
  3. Clique em OK.
  4. Crie o aplicativo.

Verificação

  1. Antes de executar o aplicativo, abra a janela impressoras para exibir o nome e o status de cada impressora no seu computador.

    Para fazer isso no Windows XP, clique em Iniciare, em seguida, clique em Impressoras e aparelhos de fax.

    No Windows Server 2003, Windows 2000, Windows NT, Microsoft Windows Millennium Edition e Microsoft Windows 98, clique em Iniciar, aponte para configuraçõese, em seguida, clique em impressoras.
  2. Execute o aplicativo no Visual Studio .NET de ou no Visual Studio 2005.
  3. O aplicativo exibirá a seguinte mensagem:
    A impressora está desativada
    Verifique se que a impressora está desabilitada olhando na pasta Impressoras. Pressione Enter na janela do aplicativo, para continuar o aplicativo.
    Pressione ENTER.
  4. O aplicativo exibirá a seguinte mensagem:
    A impressora está habilitada
    Verificar se a impressora está habilitada, procurando na pasta Impressoras. Pressione Enter na janela do aplicativo, para continuar o aplicativo.
    Pressione ENTER.
  5. O aplicativo exibirá a seguinte mensagem:
    A impressora está pausada
    Verifique se a impressora está em pausa procurando na pasta Impressoras. Pressione Enter na janela do aplicativo, para continuar o aplicativo.
    Pressione ENTER.
  6. O aplicativo exibirá a seguinte mensagem:
    A impressora é reiniciada
    Verifique se a impressora é retomada procurando na pasta Impressoras. Pressione Enter na janela do aplicativo, para continuar o aplicativo.
    Pressione ENTER. O aplicativo termina.

Solução de Problemas

A função SetPrinter requer permissões apropriadas em sistemas baseados em Windows NT, Windows 2000, Windows Server 2003 e Windows XP. Se você não tem direitos administrativos a impressora especificada, a chamada de função SetPrinter falhará.

Referências
Para obter informações adicionais, clique no número abaixo para ler o artigo na Base de Conhecimento Microsoft:
160129 COMO: Obter o Status de uma impressora e um trabalho de impressão

Propriedades

ID do Artigo: 315720 - Última Revisão: 02/09/2016 01:58:00 - Revisão: 4.0

Microsoft Visual C# .NET 2002 Standard Edition, Microsoft Visual C# 2005 Express Edition

  • kbhowtomaster kbmt KB315720 KbMtpt
Comentários
or(Math.random() * 3)).toString(16)); var m = document.createElement("meta"); m.content = guid; m.name = "ms.dqid"; document.getElementsByTagName("head")[0].appendChild(m);