下面是一個將數據直接發送到打印機的示例:
記得在文件中加上#include winspool.h
bool Print(char* szPrinterName, char* szBuffer)// szBuffer是我們希望發送到打印機的數據緩沖
{
HANDLE hPrinter; //打印機句柄
int iLen = strlen(szBuffer);// 發送數據的長度
DWORD dwWritten; // 已經向打印機寫了多少
if(OpenPrinter(szPrinterName, &hPrinter, NULL))
//Open打印機並賦給一個句柄(已經保存在hPrinter)
{
DOC_INFO_1 Info;//文檔信息
memset(&Info, 0, sizeof(Info));
Info.pDocName = "My PrintJob";
//文檔名(which is shown in the PrintManager)
Info.pOutputFile = NULL;
//不須要向一個文件寫,設為NULL
Info.pDatatype = "RAW";
//數據以RAW格式發送(Win9x和WinNT都支持RAW和EMF格式,WinNT還支持TEXT格式
if(!StartDocPrinter(hPrinter, 1, (LPBYTE)&Info))//文檔開始
return false;
// 告訴打印機開始新頁
StartPagePrinter(hPrinter);
// 向打印機寫數據
if(!WritePrinter(hPrinter, szBuffer, iLen, &dwWritten))
{
//當發送數據時出現錯誤
//用最後的錯誤指出發生了什麼錯誤
}
EndPagePrinter(hPrinter);//告訴打印機已經完成當前頁
if(!EndDocPrinter(hPrinter))//文檔結束
return false;
ClosePrinter(hPrinter);//關閉打印機
return true;
}
else
{
return false;
}
}
假如你的打印機直接與計算機相連(LPT1-LPT3)或者影射為網絡打印機,那你就可以直接用fopen函數來實現。
eg. fopen("lpt1", "wt") 或 fopen("\\\\MainServer\\MatrixPrinter", "wt")