遇到一个棘手的问题,请各位帮我看看,完全没思路了。    先说说背景吧,就是一个监控打印机的程序,本来之前是每次只监控单个打印机的,基本功能我实现了,但最近被要求加功能,要求能同时监控多个打印机,我不知道该怎么做了。给大家说说我做监控单个打印机的思路吧:
    EnumPrinter()检测系统中的打印机个数名称(name),将名称显示到界面供用户选择其希望监控的打印机
    OpenPrinter(name,handle)能通过名字获取到该打印机的句柄
    通过HANDLE  hChange=FindFirstPrinterChangeNotification(handle,,,)来获得打印机状态发生变化时候的一个句柄,然后通过事件对象状态的设置,来实现一旦有打印行为发生的时候,就获取打印任务的信息。
    这样实现监控功能,因为将打印机名字(name)传给OpenPrinter()来确定监控的对象是哪台打印机。
现在要实现对系统中所有的打印机进行监控怎么实现呢?多线程监控

解决方案 »

  1.   

    可以用线程来处理,然后用一个List等保存所有打印机对应的handle,name等信息,触发事件的时候就从List中找到对应的打印机
      

  2.   

    OpenPrinter(name,handle,NULL);
    hChange=FindFirstPrinterChangeNotification(handle,,,);
    if(WaitForSingleObject(hChange,0U)==WAIT_OBJECT_0)
    {
      //监控到打印行为
    }触发时间对象就需要打印机的name handle,所以这两个变量在触发之前得确定啊。
      

  3.   

    Quote: 引用 3 楼 xiaohutushen30 的回复:

    Quote: 引用 2 楼 u011581242 的回复:

    Quote: 引用 1 楼 VisualEleven 的回复:

    Quote: 引用 8 楼 u011581242 的回复:

    Quote: 引用 5 楼 shb8845369 的回复:

    Quote: 引用 7 楼 u011581242 的回复:

    Quote: 引用 6 楼 oyljerry 的回复:
    可能我表达有问题吧 现简单的说一下我的问题:
    1.我监控打印行为所触发的事件对象 需要用打印机的名字和句柄,在判断事件对象是否有信号之前这两个变量是得确定的,要不没法触发事件对象。
      所以,好像“只监控打印行为,有打印行为的时候我再去看是哪台打印机打印的”这样实现同时监控多台打印机的思路是不可行的。
    2.不同电脑中连得打印机数量是不一样的,所以“利用循环,将打印机数量设置为变量,创建与打印机数量相同的线程去分别监控每台打印机”这种方案看上去是可行的,除了这种方案之外有没有其他的方法?
      

  4.   

    OpenPrinter(name,handle,NULL);
    hChange=FindFirstPrinterChangeNotification(handle,,,);
    if(WaitForSingleObject(hChange,0U)==WAIT_OBJECT_0)
    {
      //监控到打印行为
    }触发时间对象就需要打印机的name handle,所以这两个变量在触发之前得确定啊。
    WaitForMultipleObjects