【问题标题】:C++: Reading data from printerC++:从打印机读取数据
【发布时间】:2014-04-09 11:56:35
【问题描述】:

我正在尝试从打印机读取状态和一些其他信息,但是我没有收到打印机返回的任何数据。我无法弄清楚我错过了什么或做错了什么?

我正在使用 Qt 创建器,其中包含了 WinSpool 库

附带说明:这是我第一次尝试从硬件读取数据。

打印机功能的 msdn 页面是: SetPrinterDataGetPrinterDataOpenPrinter

代码

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 库

附带说明:这是我第一次尝试实现这一目标。

编辑

I found a C# program 使用 Windows API 调用读取PrintLabel.csReadBytesFromPrinter 函数中的状态和信息,就像我想的那样,但我仍然无法找出我的错误/错误。我想我会链接它,如果有人能发现我的代码与他们的代码相比有什么问题。

【问题讨论】:

    标签: c++ winapi printing driver


    【解决方案1】:

    您误解了GetPrinterDataSetPrinterData 的返回值。这些电话实际上是失败的,而不是成功的。成功的返回值是ERROR_SUCCESS,我相信你会发现它是零。任何其他值都是您需要显示和调查的错误代码。请参阅MSDN entry for SetPrinterData

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-06
      • 2011-03-29
      • 1970-01-01
      • 2021-03-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多