Главная Новые темы Список тем Задать вопрос Поиск  

Форум "Delphi" (архив)


Паскаль, Делфи


 #0 Sergey_S © 28.02.05 16:17:39 - 01.03.05 10:26:51

сообщение WM_SPOOLERSTATUS



Хочу знать, когда на принтер посылают задания, в 98 и Ме отлавливал сообщение WM_SPOOLERSTATUS, но на ХреновоРаботающем это сообщение не отлавливается при посылке на принтер..... Цитата

 #1 Mystic © 28.02.05 16:28:56



Note The WM_SPOOLERSTATUS message is not supported after Windows XP. To be notified of changes to the print queue status, use FindFirstPrinterChangeNotification and FindNextPrinterChangeNotification.
 #2 Sergey_S © 28.02.05 16:34:59

во, блин...
Спасибо  
 #3 Mystic © 01.03.05 09:27:00

Если честно Ты же знаешь название сообщения, судя по всему понимаешь английский... Что мешает получить последнюю справку по этому сообщению???
 #4 Vlad © 01.03.05 09:48:43

> Mystic © 01.03.05 09:27:00
кстати, Андрей, а вот почему такое:
 repeat
     Sleep(100);
     GLAV;
   until false;


где, GLAV =

procedure GLAV;
type
  TJobs = array[0..1000] of JOB_INFO_1;
  PJobs = ^TJobs;
var
  hPrinter: THandle;
  bytesNeeded, numJobs, i: Cardinal;
  pJ: PJobs;
//  s:string;
begin
  hPrinter := GetCurrentPrinterHandle;
  try
    EnumJobs(hPrinter, 0, 1000, 1, nil, 0, bytesNeeded,
      numJobs);
    pJ := AllocMem(bytesNeeded);
    if not EnumJobs(hPrinter, 0, 1000, 1, pJ, bytesNeeded,
      bytesNeeded, numJobs) then
      RaiseLastWin32Error;

   // memo1.Clear;
    if numJobs = 0 then exit

    else
      for i := 0 to Pred(numJobs) do if Czad<(pJ^[i].JobId) then      //&#229;&#241;&#235;&#2­32; &#231;&#224;&#228;&#224­;&#237;&#232;&#229; &#225;&#251;&#235;&#238­; - &#239;&#240;&#238;&#239­;&#243;&#241;&#234;
                             begin    //&#232;&#237;&#224;&#2­47;&#229; &#226;&#238;&#231;&#236­;&#229;&#236; &#226;&#241;&#229; &#232;&#237;&#242;&#229­;&#240;&#229;&#241;&#237­;&#238;&#229; &#232; &#231;&#224;&#239;&#232­;&#248;&#229;&#236;
             czad:=pJ^[i].JobId;
             s:=pJ^[i].pPrinterName+
             string(pJ^[i].pDocument)+'           '+
             pJ^[i].pUserName+'               '+
             inttostr(pJ^[i].TotalPages)+'        '+
             inttostr(pJ^[i].JobId);
             assignfile(f,'c:\prnlog.txt');
             append(f);
             writeln(f,s);
             closefile(f);
                                      end;

  finally
    ClosePrinter(hPrinter);
  end;
end;

где GetCurrentPrinterHandle =
function GetCurrentPrinterHandle: THandle;
var
  Device, Driver, Port: array[0..255] of Char;
  hDeviceMode: THandle;
begin
  Printer.GetPrinter(Device, Driver, Port, hDeviceMode);
  if not OpenPrinter(addr(Device), Result, nil) then
    RaiseLastWin32Error;
end;


Возвращает TotalPage=0 через раз, а иногда правильно дает.
 #5 Mystic © 01.03.05 09:56:14

Ну честно, я с принтером никогда не работал...
 #6 clickmaker © 01.03.05 10:18:05

>
>  #4 Vlad © 01.03.05 09:48:43

TotalPages
Specifies how many pages the document contains. This value may be zero if the print job does not contain page delimiting information.
 #7 Vlad © 01.03.05 10:26:51

>#6 clickmaker © 01.03.05 10:18:05
ясно. Спасибо.

Только вот что непонятно: Неужели ворд не ставит разметку страниц?  Я, правда, тестировал на пустой странице(чтоб бумагу не переводить :)) и там TotalPage=0
А на осмысленной(с текстом) попробовал - правильно. (2 попытки, 1 и 2 стр.)




  • Тема находится в архиве

    Написать ответ

    Имя: Регистрация HTML?
    smiles смайлики
    Потом перейти в:    
    паутина



      ©  webest.net, 2002-2007  

    top.mail.ru
    » Бесплатный счетчик посещений
    » Рейтинг сайтов