Форум: "Система";
Текущий архив: 2002.06.27;
Скачать: [xml.tar.bz2];
ВнизУчёт количества напечатанных страниц. Найти похожие ветки
← →
Gurban (2002-03-25 08:23) [0]Приветствую всех!
Возник такой вопрос. Есть лазерный принтер, есть работники которые хотят много печатать и нет программы которая будет считать кто же потратил весь тонер в картридже. Помогите пожалуйста как можно осуществить учёт напечатанных страниц.
Откуда можно выдернуть данные о заданиях посланных на печать?
Заранее благодарю.
← →
alexadvanser (2002-03-25 09:39) [1]На сайте freeware.ru есть такая прога.
Только не помню как называется, поищи в поиске, что-то типа учет печати, страниц, принтер...
← →
Gurban (2002-03-25 10:19) [2]Хотелось бы самому, интересен сам процесс работы таких программ.
← →
Wizard (2002-03-25 11:04) [3]Если я не ошибаюсь, то это можно сделать с помощью перехватчика IShellExecuteHook, но я могу и ошибаться....
← →
Dzmitry (2002-03-25 14:52) [4]сам занимаюсь этим делом
знаю что надо искать гдето в
FindFirstPrinterChangeNotification, FindNextPrinterChangeNotification, EnumJobs.
через EnumJobs можно узнать что послано на спулер,
но вот не могу разобраться с изменением состояния принтера, если кто может дать пример перехвата состояния, буду благодарен...
← →
Gurban (2002-03-25 15:58) [5]Но эти функции работают только под NT. А надо бы под всеми виндами.
← →
Dzmitry (2002-03-25 18:15) [6]всё, понял почему ничего не работает,
буду искать дальше...
← →
dzmitry (2002-03-28 17:59) [7]кто ищет тот всегда найдёт...
почти три дня поисков привели меня к одному результату...
оказалось достаточно отловить мессагу WM_SPOOLERSTATUS, которая появляется при добавлении и убирания заданий в очередь, затем апи-функцию EnumJobs узнаём что в спулере...
информация выужена из хелпа по апи под вижуал-бейсик 1997 года...
странно то что этот вопрос периодически появляется и абсолютно никто конкретно не ответил...
← →
Gurban (2002-03-30 11:37) [8]Поздравляю с находкой.
Если не сложно не мог бы ты выслать отрывок кода, где идёт перехват сообщения и вытаскиваются данные из спулера.
Заранее благодарен.
← →
Teapot (2002-03-31 17:08) [9]dzmitry © (28.03.02 17:59)
Меня также очень интересует эта проблема.
Буду весьма признателен, если и мне вышлешь фрагмент кода.
Спасибо!
← →
dzmitry (2002-04-01 18:21) [10]//ушло в нетмейл
//Gurban c (30.03.02 11:37)
//Teapot c (31.03.02 17:08)
// я уже думал это никого более не заинтересует...
// в Win32.hlp это есть, но попробуй найти то, не зная какими словами
// это выразить
// вот мой тестовый кусок кода
[skip]
uses [skip]
{!} WinSpool, Printers {!};
type
TForm1 = class(TForm)
[skip]
private
{!}procedure WMSpooler(var Msg: TMsg); message WM_SPOOLERSTATUS;{!}
end;
[skip]
procedure TForm1.WMSpooler(var Msg: TMsg);
var
Handle: THandle;
pcbNeeded, pcReturned: DWORD;
JobInfo: array[0..9] of _JOB_INFO_1;
i: integer;
F: TextFile;
s: string;
begin
if Msg.wParam<>1 then Exit;
// что это сообщение вызвало Msg.wParam
// 0 - удаление из очереди
// 1 - добавить в очередь
// узнать какие принтеры есть Printer.GetPrinters и убрать оттуда порт
// я пока у себя жестко принтер прописал...
OpenPrinter("Oki ML 321 Elite (dzmitry_)",Handle,nil);
if EnumJobs(Handle,0,succ(High(JobInfo)),1,@JobInfo,SizeOf(JobInfo),pcbNeeded,pcReturned) then
for i:=0 to pred(pcReturned) do
begin
AssignFile(F,"printer.log"); Append(F);
with JobInfo[i] do
WriteLn(F,pPrinterName,"[skip]document:",pDocument,"[skip] pages:",{!}TotalPages{!},"[skip]");
CloseFile(F);
end;
ClosePrinter(Handle);
end;
end.
// по вопросу данной дискуссии надо смотреть JobInfo[i].TotalPages
// если есть пару ошибок извините... код пока не прилизан...
// и проверте как работает в NT, на одной тачке пошло,
// на другой нет
Страницы: 1 вся ветка
Форум: "Система";
Текущий архив: 2002.06.27;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.008 c