а...ааа ап! крокодилы.... бегимоты....
Здравствуйте, tas, Вы писали:
Я делал так (на Delphi, но идея понятна --- использование FindFirstPrinterChangeNotification, WaitForSingleObject, ...):
procedure TPrintNotificationThread.Execute;
var
Handle: THandle;
Change: Cardinal;
NotifyData: Pointer;
const
JobFields: array[0..8] of Word =
(
JOB_NOTIFY_FIELD_STATUS,
JOB_NOTIFY_FIELD_STATUS_STRING,
JOB_NOTIFY_FIELD_DOCUMENT,
JOB_NOTIFY_FIELD_USER_NAME,
JOB_NOTIFY_FIELD_TOTAL_PAGES,
JOB_NOTIFY_FIELD_PAGES_PRINTED,
JOB_NOTIFY_FIELD_SUBMITTED,
JOB_NOTIFY_FIELD_BYTES_PRINTED,
JOB_NOTIFY_FIELD_TOTAL_BYTES
);
Notification: TPrinterNotifyOptionsType = (
wType: JOB_NOTIFY_TYPE;
Reserved0: 0;
Reserved1: 0;
Reserved2: 0;
Count: High(JobFields) - Low(JobFields) + 1;
pFields: @JobFields;
);
NotificationOptions: TPrinterNotifyOptions = (
Version: 2;
Flags: PRINTER_NOTIFY_OPTIONS_REFRESH;
Count: 1;
pTypes: @Notification;
);
begin
Handle := FindFirstPrinterChangeNotification(
Printer,
PRINTER_CHANGE_JOB,
0,
@NotificationOptions);
if (Handle = INVALID_HANDLE_VALUE) then
begin
ShowMessage(IntToStr(GetLastError()));
Exit;
end;
repeat
if WaitForSingleObject(Handle, 1000) = WAIT_OBJECT_0 then
begin
FindNextPrinterChangeNotification(Handle, Change, nil, NotifyData);
PostMessage(Wnd, PM_PRINT_NOTIFY, Change, Integer(NotifyData)); // Мое сообщение
end;
until Terminated;
FindClosePrinterChangeNotification(Handle)
end;
Только количество страниц, посланное на печать в самом начале постоянно растет от 0 до посланного числа страниц.