이 KB 기사를 예제로 사용하십시오. http://support.microsoft.com/kb/322091/en-us,
원시 데이터 (바이트 배열)를 감열 식 프린터로 보내려고합니다. 이를 위해 나는 위의 문서에서 다음 방법을 사용하십시오 프린터를 사용할 수WPF 응용 프로그램에서 원시 데이터를 프린터로 보내는 중 예외 처리
bool bSuccess = false;
...
try
{
bSuccess = RawPrinterHelper.SendBytesToPrinter(printerName, pUnmanagedBytes, nLength);
}
catch (Exception ex)
{
failprint = ex.Message;
}
if (bSuccess == true)
{
MessageBox.Show("Text printed");
}
else
{
MessageBox.Show("Printing failed: " + failprint);
}
경우, 모든 확인 간다 내가 실제 인쇄와 함께 MessageBox.Show("Text printed");
를 얻을 :
public static bool SendBytesToPrinter(string szPrinterName, IntPtr pBytes, Int32 dwCount)
{
Int32 dwError = 0, dwWritten = 0;
IntPtr hPrinter = new IntPtr(0);
DOCINFOA di = new DOCINFOA();
bool bSuccess = false; // Assume failure unless you specifically succeed.
di.pDocName = "My C#.NET RAW Document";
di.pDataType = "RAW";
// Open the printer.
if (OpenPrinter(szPrinterName.Normalize(), out hPrinter, IntPtr.Zero))
{
// Start a document.
if (StartDocPrinter(hPrinter, 1, di))
{
// Start a page.
if (StartPagePrinter(hPrinter))
{
// Write your bytes.
bSuccess = WritePrinter(hPrinter, pBytes, dwCount, out dwWritten);
EndPagePrinter(hPrinter);
}
EndDocPrinter(hPrinter);
}
ClosePrinter(hPrinter);
}
// If you did not succeed, GetLastError may give more information
// about why not.
if (bSuccess == false)
{
dwError = Marshal.GetLastWin32Error();
}
return bSuccess;
}
그래서 나는 배열을 보낼 수 있습니다. 그러나 인쇄를 시도하기 전에 프린터를 끄면
인쇄가 실패했습니다. MessageBox. 대신 응용 프로그램이 고정되어 프린터가 켜질 때까지 기다렸다가 대기중인 인쇄 작업이 성공적으로 인쇄되면 응용 프로그램이 고정 해제되고
MessageBox.Show("Text printed")
이됩니다.
응용 프로그램이 정지 상태가 아닌 상태에서 실패한 인쇄 작업을 잡으려는 시도가 잘못되었습니다.
을 사용할 수 있습니다. 작업이 완료되면 Marshal.GetLastWin32Error()가 RunWorkerCompleted 이벤트에서 검사됩니다. 이 경우 항상 0입니다. (그리고'RunWorkerCompleted' 이벤트는 실제 인쇄가 끝난 경우에만 발생하므로 불행히도 도움이되지 않습니다. 감사합니다. 모두 동일합니다 . – rem
GetLastWin32Error가 작동하지 않는 경우가 있습니다. 인쇄 시간이 1 분을 넘는 것처럼 여기에서 속일 수 있습니다. 그러면 문제가 생깁니다. –
OK, Navid. +1 – rem