Revista MSDN Magazine Edição 27 - Imprimindo em impressoras matriciais com .NET
Em tempos de impressoras jato de tinta e laser, ainda temos a necessidade de imprimir nas boas e velhas impressoras matriciais, seja por economia ou por necessidade, já que para emitir notas fiscais, elas são consideradas a opção mais econômica.
Clique aqui para ler todos os artigos desta edição
Imprimindo em impressoras matriciais com .NET
Carlos Dos Santos
|
Este artigo discute |
Este artigo usa as seguintes tecnologias |
|
·Impressão matricial; ·Programação com API. |
·Visual Studio 2003, C#. |
Em tempos de impressoras jato de tinta e laser, ainda temos a necessidade de imprimir nas boas e velhas impressoras matriciais, seja por economia ou por necessidade, já que para emitir notas fiscais, elas são consideradas a opção mais econômica.
O problema
O Microsoft .NET Framework não dispõe de uma classe nativa para acessar a porta da impressora diretamente (LPT), e para quem já tentou abrir a porta como se fosse um arquivo, deve ter tido uma grande decepção, pois o ambiente gerenciado não permite acesso direto ao hardware.
Na versão 2.0 do Microsoft .NET Framework, a porta serial ganhou uma classe para acesso, mas a porta paralela ainda não tem acesso nativo. Então como resolver o problema? Como fazer minha aplicação imprimir direto na porta paralela, estando em um ambiente gerenciado?
A solução
Como o Microsoft .NET Framework não permite acesso diretamente à porta paralela (LPT1, LPT2), teremos que usar duas funções da API do Windows que permitem a abertura e fechamento da porta, sendo elas: CreateFileA() e CloseHandle(), que serão declaradas em nossa classe da seguinte maneira:
using System.Runtime.InteropServices;
...
...
[DllImport("kernel32.dll",EntryPoint="CreateFileA")]
static extern int CreateFileA(string lpFileName,int dwDesiredAccess, int dwShareMode,
int lpSecurityAttributes,
int dwCreationDisposition, int dwFlagsAndAttributes,
int hTemplateFile);
[DllImport("kernel32.dll",EntryPoint="CloseHandle")]
static extern int CloseHandle(int hObject);
Dica: Através da diretiva DllImport, podemos acessar rotinas presentes em DLLs, tais como a Kernel32.dll, onde estão algumas das rotinas que controlam as funcionalidades do Windows. Essa é uma boa dica se você precisa acessar alguma funcionalidade presente em uma DLL, e não tiver uma interface pronta em .NET. Para fazer isso você deverá conhecer os métodos presentes na DLL.
" [...] continue lendo...
Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo