【问题标题】:Undefined data returned from the the structure PRINTER_NOTIFY_INFO_DATA从结构 PRINTER_NOTIFY_INFO_DATA 返回的未定义数据
【发布时间】:2016-11-24 05:48:50
【问题描述】:

我正在尝试捕获打印机作业的详细信息,并且我的程序运行良好,但在一台机器上除外。 Data.NotifyData.adwData[0] 返回的值是 8208(十进制),它与任何预定义值都不匹配,我对此进行了搜索,找不到任何信息,GetLastError 返回了 0。

 PRINTER_NOTIFY_INFO_DATA &Data = pNotification->aData[x];
    if( Data.Type == JOB_NOTIFY_TYPE )
        {
            switch( Data.Field )
            {
                case JOB_NOTIFY_FIELD_STATUS:

                    printf("Case:JOB_NOTIFY_FIELD_STATUS,adwData[0]:%x\n",Data.NotifyData.adwData[0]);
                    if(Data.NotifyData.adwData[0] == JOB_STATUS_SPOOLING) 
                    {
                        //SetEvent
                    }
                    if(Data.NotifyData.adwData[0] == JOB_STATUS_PRINTING) 
                    {
                        //SetEvent
                    }

                break;
            }
        }

【问题讨论】:

    标签: windows winapi visual-c++


    【解决方案1】:

    工作状态值的documentation 表示:

    此成员可以是以下一个或多个值。

    这是 Microsoft 代码,用于引入通过使用按位 OR 组合位标志而生成的值。

    您的值是 0x2010,它是 Winspool.h 中定义的以下值组合:

    • 0x2000, JOB_STATUS_RETAINED
    • 0x0010, JOB_STATUS_PRINTING

    所以你的价值是JOB_STATUS_RETAINED | JOB_STATUS_PRINTING

    在任何情况下,您都不应该直接测试整个值。您需要按位测试:

    DWORD status = Data.NotifyData.adwData[0];
    if (status & JOB_STATUS_PAUSED) 
        // ... 
    if (status & JOB_STATUS_ERROR) 
        // ... 
    if (status & JOB_STATUS_DELETING) 
        // ... 
    if (status & JOB_STATUS_SPOOLING) 
        // ... 
    if (status & JOB_STATUS_PRINTING) 
        // ... 
    // and so on for each status bit that is of interest
    

    【讨论】:

    • 这里不应该是constants starting with JOB_吗?
    • 但是纸张足够,甚至打印出了文件!
    • JOB_STATUS_RETAINED 也许?还有一个Stack Overflow link
    • 好的,谢谢,我会查找最新的 winspool.h 并返回,我也不确定那台机器上安装的打印机驱动程序,这可能是因为旧/其他驱动程序问题?
    • @KenY-N JOB_STATUS_RETAINED 为 0x2000,但返回值为 0x2010
    猜你喜欢
    • 2016-12-22
    • 2012-12-14
    • 2017-03-11
    • 2021-10-09
    • 2015-06-08
    • 2021-10-15
    • 2015-07-13
    • 2018-09-02
    • 1970-01-01
    相关资源
    最近更新 更多