Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.05.26;
Скачать: CL | DM;

Вниз

Перехват начала печати   Найти похожие ветки 

 
Fedor ©   (2003-03-24 13:03) [0]

Здравствуйте.
Как мне уже подсказывали применяю функцию
tmp := FindFirstPrinterChangeNotification(PrinterHandle,PRINTER_CHANGE_JOB,0,nil);
Затем ожидаю изменений
WaitForSingleObject(tmp,INFINITE);

Документов на печать не приходит никаких, а ожидание прерывается с успешным кодом завершения. Как быть?


 
ggsoft ©   (2003-03-24 14:23) [1]

А может быть ты не получаешь верный идентификатор tmp или PrinterHanlde, проверки не видно... Но у меня, следующий код (переписал с VC) работает:


procedure TForm1.Button1Click(Sender: TObject);
const
bRunning: Boolean = True;
var
hPrn, hWaitPrnNotify: THandle;
dwPrnChanges: Cardinal;
PDummy: Pointer;
begin
assert(OpenPrinter(PChar(Printer.Printers[0]), hPrn, nil));
hWaitPrnNotify := FindFirstPrinterChangeNotification(hPrn, PRINTER_CHANGE_JOB, 0, nil);
assert(hWaitPrnNotify <> INVALID_HANDLE_VALUE);
while (bRunning) do begin
case WaitForSingleObject(hWaitPrnNotify, INFINITE) of
WAIT_OBJECT_0 : begin
assert(FindNextPrinterChangeNotification(hWaitPrnNotify, dwPrnChanges, nil, PDummy));
case dwPrnChanges and PRINTER_CHANGE_JOB of
PRINTER_CHANGE_ADD_JOB : ; //Handle job was sent
PRINTER_CHANGE_DELETE_JOB : ; //Handle job was deleted
PRINTER_CHANGE_SET_JOB : ; //Handle job was set
PRINTER_CHANGE_WRITE_JOB : ; //Handle job data was written
end;
end;
WAIT_TIMEOUT : begin
bRunning := False;
// handle error TIMEOUT
end;
WAIT_ABANDONED : begin
bRunning := False;
// handle error, something else (what?)
end;
end;
end;
FindClosePrinterChangeNotification(hWaitPrnNotify);
ClosePrinter(hPrn);
end;


 
Fedor ©   (2003-03-26 12:14) [2]

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


 
Vlad Oshin ©   (2003-03-27 09:07) [3]

assert(OpenPrinter(PChar(Printer. Printers[0]), hPrn, nil));
это вроде первый принтер по списку



Страницы: 1 вся ветка

Текущий архив: 2003.05.26;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.011 c
1-83597
V-A-V
2003-05-14 12:38
2003.05.26
Сохранение ветки реестра в файл


3-83340
diokant
2003-05-05 15:35
2003.05.26
Подскажите по MS SQL 2000, почему так нельзя...


1-83521
$HiC0
2003-05-13 11:22
2003.05.26
2-х цветное изображение... получение, обработка


1-83576
Salvator
2003-05-13 11:49
2003.05.26
Работа с Word через Delphi


14-83738
Sour
2003-05-07 11:12
2003.05.26
Метод Рунге-Кутта