使用 Win32 API 將原始數據傳送至印表機
本文介紹如何使用 Win32 API 將原始數據傳送至印表機。
原始產品版本: Windows API
原始 KB 編號: 138594
摘要
有時必須直接將印表機特定的數據傳送至印表機,而略過驅動程式。 Win32 API 提供可在本機和網路印表機上運作的功能。 這個方法可用來取代 PASSTHROUGH
舊版 Windows API 中使用的逸出和 SpoolFile()
方法。
程式碼範例
您可以使用下列程式代碼,將原始數據直接傳送至 Windows NT 或 Windows 95 中的印表機。
// RawDataToPrinter - sends binary data directly to a printer
// Params:
// szPrinterName - NULL terminated string specifying printer name
// lpData - Pointer to raw data bytes
// dwCount - Length of lpData in bytes
// Returns: TRUE for success, FALSE for failure.
BOOL RawDataToPrinter(LPSTR szPrinterName, LPBYTE lpData, DWORD dwCount)
{
HANDLE hPrinter;
DOC_INFO_1 DocInfo;
DWORD dwJob;
DWORD dwBytesWritten;
// Need a handle to the printer.
if(!OpenPrinter( szPrinterName, &hPrinter, NULL))
return FALSE;
// Fill in the structure with info about this "document."
DocInfo.pDocName = "My Document";
DocInfo.pOutputFile = NULL;
DocInfo.pDatatype = "RAW";
// Inform the spooler the document is beginning.
if((dwJob = StartDocPrinter(hPrinter, 1, (LPSTR)&DocInfo)) == 0)
{
ClosePrinter(hPrinter);
return FALSE;
}
// Start a page.
if(!StartPagePrinter(hPrinter))
{
EndDocPrinter(hPrinter);
ClosePrinter(hPrinter);
return FALSE;
}
// Send the data to the printer.
if(!WritePrinter(hPrinter, lpData, dwCount, &dwBytesWritten))
{
EndPagePrinter(hPrinter);
EndDocPrinter(hPrinter);
ClosePrinter(hPrinter);
return FALSE;
}
// End the page.
if(!EndPagePrinter(hPrinter))
{
EndDocPrinter(hPrinter);
ClosePrinter(hPrinter);
return FALSE;
}
// Inform the spooler that the document is ending.
if(!EndDocPrinter(hPrinter))
{
ClosePrinter(hPrinter);
return FALSE;
}
// Tidy up the printer handle.
ClosePrinter(hPrinter);
// Check to see if correct number of bytes were written.
if(dwBytesWritten != dwCount)
return FALSE;
return TRUE;
}
下列檔案可供從 Microsoft 下載中心下載:
如需如何下載 Microsoft 支援服務 檔案的詳細資訊,請參閱如何從 線上服務 取得 Microsoft 支援檔案。
Microsoft 已掃描此檔案是否有病毒。 Microsoft 使用了最新的病毒偵測軟體,該軟體可在檔案張貼的日期取得。 檔案會儲存在安全性增強的伺服器上,以協助防止對檔案進行任何未經授權的變更。