我正在尝试从打印机读取状态和其他一些信息,但没有从打印机返回任何数据。我不知道我错过了什么或做错了什么?
我正在使用Qt创建者,其中我已经包含了WinSpool库
附带说明:这是我第一次尝试从硬件中读取数据。
打印机功能的msdn页面包括:设置打印机数据获取打印机数据打开打印机
代码
BOOL status = false;
HANDLE hPrinter = NULL;
PRINTER_DEFAULTS defaults;
defaults.pDatatype = (LPTSTR)__TEXT("RAW");
defaults.pDevMode = 0;
defaults.DesiredAccess = PRINTER_READ;
status = OpenPrinter((LPTSTR)__TEXT("CN551A"),&hPrinter,&defaults);
if(status) {
qDebug() << "Status: OPEN OK";
}
// pValueName found in registry
LPTSTR pValueName = (LPTSTR)"PrinterData";
DWORD type = REG_BINARY;
BYTE pData[2];
pData[0] = 0;
pData[1] = 0;
status = SetPrinterData(&hPrinter,pValueName,type,pData,sizeof(pData));
if(status) {
qDebug() << "Status: SET OK";
}
BYTE buffer[263];
LPDWORD pcbNeeded = 0;
LPDWORD pType = (LPDWORD)REG_BINARY;
status = GetPrinterData(&hPrinter, pValueName,pType,buffer,sizeof(buffer),
pcbNeeded);
if(status) {
qDebug() << "Status: GET OK";
qDebug() << "pType: " << pType;
qDebug() << "pcbNeeded " << pcbNeeded;
qDebug() << "buffer " << *buffer;
/* Prints a bunch of numbers
for(int i =0; i < sizeof(buffer); i++) {
qDebug() << buffer[i];
}
*/
}
ClosePrinter(&hPrinter);
输出
Status: OPEN OK
Status: SET OK
Status: GET OK
pType: 0x3
pcbNeeded 0x0
buffer 1
我正在使用Qt创建者,其中我已经包含了WinSpool库
顺便说一句:这是我第一次尝试做到这一点。
编辑
我找到了一个C#程序,它使用Windows API调用读取PrintLabel.cs
中ReadBytesFromPrinter
函数中的状态和信息,就像我想的那样,但我仍然无法找出我的错误。我想我会把它链接起来,如果有人能发现我的代码和他们的代码相比有什么问题的话。
您误解了GetPrinterData
和SetPrinterData
的返回值。这些呼吁实际上是失败的,而不是成功的。成功的回报值是ERROR_SUCCESS
,我相信你会发现它是零。任何其他值都是需要显示和调查的错误代码。请参阅MSDN中的SetPrinterData条目。