Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: Как отследить задание на печать в ХР программно?? Добавлено: 26.11.03 03:12  

Автор вопроса:  DanOld

Определение принтера, заданий печати, кол-во страниц......все это определяю с помощью WMI, но как сделать событийную модель.........В данном случае, через определеные моменты времени, запускаю функцию, она опреляет есть задания на печать или нет. Но такой способ, грузит ресурсы комп-ра. В 2000 и ХР нет системного сообщения, которое возникает при посылки заданий на печать (98 и МЕ).

МСДН советует использовать две айпишки, которые определяют состояние принтера, но мне это не подходит, как отследить момент посылки на печать в ХР

Ответить

  Ответы Всего ответов: 2  

Номер ответа: 1
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #1
Добавлено: 26.11.03 09:30
В WMI Я не силён, но, насколько я знаю, там тоже есть какие-то
события.. Сейчас гляну в MSDN.
Гм.. Поиск вести нереально, особенно, если точно не знаешь, что
искать.. Ищем в форуме gotdotnet.ru..
Ага! Нашёл:

-------------------
>Нужно, всего-навсего, отследить добавление заданий на выбранный
принтер.
На API без проблем всё делал, а с WMI только знакомлюсь, очень непонятен
смысл QUERY в примере...

Это строка запроса на языке WQL (расширение SQL для WMI).
часть строки:
SELECT * FROM __InstanceDeletionEvent WITHIN 1

говорит о том, что нас будут интересовать события удаления экземпляров
наблюдаемого класса, причем проверку на удаление необходимо делать
каждую секунду (указывается при помощи WITHIN 1)

Теперь оставшаяся часть строки - условие запроса:
WHERE TargetInstance ISA 'Win32_Process' AND TargetInstance.Name = '" +
APPLICATION_NAME +"'"

Класс __InstanceDeletionEvent является наследником
__InstanceOperationEvent, соответственно он наследует все его поля, в
том числе и TargetInstance, которое является копией удаленного
экземпляра наблюдаемого класса (в том примере это Win32_Process). Исходя
из этого -
WHERE TargetInstance ISA 'Win32_Process'
это требование выбрать те строки, в которых удаляемый экземпляр является
наследником класса Win32_Process (знаете, в ООП отношения между классами
выражают "is a", "has a" ? - здесь мы имеем дело с наследованием - ISA).

Если Вас будут интересовать события изменения состояния (свойств)
каких-то объектов - используйте класс __InstanceModificationEvent, у
которого, в добавок, есть еще и поле PreviousInstance, с копией объекта
перед его изменением.

В части строки
AND TargetInstance.Name = '" + APPLICATION_NAME +"'"
происходит уточнение условия, где говорится что нас интересуют
экземпляры у которых свойство Win32_Process.Name равно APPLICATION_NAME.
Ну и так далее - можно делать уточнений сколько нужно.

Теперь к Вашей задаче - в тот пример вместо __InstanceDeletionEvent
подставьте __InstanceCreationEvent и вместо Win32_Process -
Win32_PrintJob. И конечно отредактируйте/удалите как Вам нужно
оставшуюся часть запроса.
-------------------

Ответить

Номер ответа: 2
Автор ответа:
 DanOld



Вопросов: 2
Ответов: 5
 Профиль | | #2 Добавлено: 30.11.03 16:12

Спасибо, попробую.......

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам