Windows 7 I';m在windows 7客户端计算机上获取共享打印机的重复打印作业

Windows 7 I';m在windows 7客户端计算机上获取共享打印机的重复打印作业,windows-7,printing,notifications,network-printers,print-spooler-api,Windows 7,Printing,Notifications,Network Printers,Print Spooler Api,我有一个共享打印机打印作业的pb 我在win server 2008上共享了一台打印机 我正在使用Windows7客户机上的打印机 我正在开发一个应用程序,为所有打印作业写入所有打印机通知 对于打印队列中的一个作业,我收到两个作业的通知,其中两个作业具有两个不同的作业ID和两个不同的机器名 我的问题是,为什么只为发送到打印队列的一个作业创建两个作业?为什么它们如此不同?虚拟作业的机器名为le client,而实际作业的机器名为print server根据我的理解,当客户端机器上的应用程序触发作业

我有一个共享打印机打印作业的pb

我在win server 2008上共享了一台打印机

我正在使用Windows7客户机上的打印机

我正在开发一个应用程序,为所有打印作业写入所有打印机通知

对于打印队列中的一个作业,我收到两个作业的通知,其中两个作业具有两个不同的作业ID和两个不同的机器名


我的问题是,为什么只为发送到打印队列的一个作业创建两个作业?为什么它们如此不同?虚拟作业的机器名为le client,而实际作业的机器名为print server

根据我的理解,当客户端机器上的应用程序触发作业时,FindFirstReplaceNotification会生成通知,并添加到客户端后台处理程序队列中。当客户端后台处理程序队列将打印作业转发到打印服务器时,将生成另一个通知。您可以尝试使用PRINTER_CHANGE_SERVER而不是PRINTER_CHANGE_ALL,并查看是否仍生成了2个通知。

您需要提供更多信息,例如您正在使用的API,一些代码,以便有人帮助您打开API窗口:EnumPrinters、OpenPrinter、FindFirstpInterchangeNotification、WaitForMultipleObjects、WaitForSingleObject、,FindNextPrinterChangeNotification:这是我对windows函数的调用顺序。对于通知标准,您是否使用打印机\u CHANGE\u ALL?是的,我通过了(打印机\u CHANGE\u ALL)作为FindFirstpInterchangeNotification的第三个参数和FindFirstpInterchangeNotification的第四个参数,是PRINTER_NOTIFY_OPTIONS struct=NotificationOptions={2,PRINTER_NOTIFY_OPTIONS_REFRESH,2,Notifications/*我们想要通知的内容*/};我会试试这个,我会回来的谢谢stamhaney,但是这个标志(PRINTER_CHANGE_SERVER)是和服务器上的句柄一起使用的,而不是在打印机上()ok。我想,从这两个通知中提取相关信息,并在您认为合适的时候使用它,可能是本技巧的唯一选择。使用此标志和服务器上的句柄,我将不再接收虚拟作业。但是,它会导致带有Ip打印机的pb被取消选中“在客户端计算机上渲染打印作业”,虚拟作业被取消。但由于通知了real job,我没有得到关于PrintedPage和totalPages的正确信息,甚至状态也不正常,我正在跟踪从通知收到的所有数据,我没有获得正确的值?你知道吗?如何获得正确的值(好像我没有足够的通知?)