Как програмно убить задания на принтер?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Alex404
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 109
Зарегистрирован: 22.09.2002 (Вс) 10:58

Как програмно убить задания на принтер?

Сообщение Alex404 » 17.06.2004 (Чт) 9:06

Допустим на принтер отправлено несколько заданий на печать.
Редко но бывает, что чего-то перемыкает и задания болтаются в спуле пока не перегрузишь комп. (ну майкросовтовский режим удаленного десктопа понимаешь)
Вопрос: Можно ли программно убить задания?

_Vasya
Новичок
Новичок
 
Сообщения: 30
Зарегистрирован: 28.02.2004 (Сб) 21:21

Сообщение _Vasya » 17.06.2004 (Чт) 12:27

Sub KillDoc()
Member of VB.Printer
Immediately terminates the current print job.

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 17.06.2004 (Чт) 16:49

Короче говоря, Printer.KillDoc :)
Нет меня больше

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 17.06.2004 (Чт) 17:23

Это не совсем то. KillDoc убивает то задание, которое еще не было отправлено EndDoc (т.е. по сути, отменяет печать). А вот чтобы удалить чужие задания из менеджера печати, надо мучать API (или WMI)
Lasciate ogni speranza, voi ch'entrate.

Alex404
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 109
Зарегистрирован: 22.09.2002 (Вс) 10:58

Сообщение Alex404 » 18.06.2004 (Пт) 5:57

...надо мучать API (или WMI)

Вот вот! В инете полно примеров для обзора свойств принтеров, их состояния, количества заданий ну и т.д. А вот внятных примеров на удаление заданий - увы...

Alex404
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 109
Зарегистрирован: 22.09.2002 (Вс) 10:58

Сообщение Alex404 » 20.06.2004 (Вс) 13:03

Отчет о самостоятельно проделанной работе.
Попытка решить вопрос посредством WMI:
1.Установил на комп WMI tools
2.Подключил к проекту все примочки появившиеся после инсталяции WMI Tools

Итак.Если верить MSDN то классе Win32_Printer есть метод CancelAllJobs. По названию - ну прямо супер. Там же (MSDN) образец его использования (с предупреждением что ниже Win2000 - не работает):
Код: Выделить всё
strComputer = "." ' (тут я вписал имя своего PC)

Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colPrintJobs =  objWMIService.ExecQuery _
    ("Select * from Win32_PrintJob")
For Each objPrintJob in colPrintJobs
    objPrintJob.CancelAllJobs
Next

Ну вот вставляю этот код в модуль формы на Command1.click а прога ругается на строчку :
objPrintJob.CancelAllJobs мол для этого объекта такого свойства или метода не существует.
Подскажите парню - что не так?
Может objPrintJob как нибудь объявить сначала нужно?
Может еще чего? Ну не работал я раньше с WMI...


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

    TopList