Главная Новые темы Список тем Задать вопрос Поиск  
Lviv eXtreme CLUB! - Львовский клуб екстремальных видов спорта (парашуты, воздухоплавание и т.д)

Форум "C++"


С++, его предки и потомки


 #0 BucheRRR73 © 25.10.06 17:09:07 - 15.11.06 21:35:21

Мониторинг работы принтера Контоль за работой принтера.



Здраствуйте!
У меня вот такой вопрос возник тут!
Надо прогу соорудить такую, которая будет следить за распечаткой страниц.
Прога должна быть установлена на компьютере, к которому подключен сам принтер. Компьютер находится в локальной сети, так что печать может происходить по сети...

  

1) Как ее организовать-то, в чем лучше, в си или при помощи MFC?
2) Как ей лучше работать: сидеть в фоне, в трее и  обращатся к принтеру каждую секунду, либо же при попытке печати, к ней будут обращатся и говорить о том кто и сколько... Только вот как енто сделать попроще...
3) Пример желательно конечно близкий к теме, по работе с принтером что ли))   Цитата

 #1 Чехонте 15.11.06 12:59:54

давно писал так:

program prnlog;

uses
  Windows,
  Printers,
  Sysutils,
  winspool,
  winsock;

//, dialogs;

//{$R *.RES}
label 1;
var
 CZad: Double;
 f,f1:textfile;
 s: String;
 ThreadHandle,ProcessHandle,ProcessID:ca­rdinal;

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;

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      //если задание было - пропуск
                             begin    //иначе возмем все интересное и запишем
             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
    FreeMem(pJ,bytesNeeded);
    ClosePrinter(hPrinter);
  end;
end;



function GetIP:string;
var WSAData : TWSAData;
  p:PHostEnt;
  Name:array [0..$FF] of Char;
  err:integer;
begin
try
  err:=WSAStartup($0101, WSAData);
  if (err=0) then begin
   GetHostName(name, $FF);
   p := GetHostByName(Name);
   result:=inet_ntoa(PInAddr(p.h_addr_list­^)^)+' ['+strpas(name)+']';
   WSACleanup;
  end else result:='No Networking';
except
result:='No IP?!';
WSACleanup;
end;
end;



begin

  CZad:=0;
{I-}

 if not(FileExists('\\rv\prnlog\NoSendPrnlo­g.txt')) then   //Слать?----------
      if FileExists('c:\prnlog.txt') then begin
                     s:='\\rv\prnlog\'+GetIp+'-prnlog.txt';  //name remote prnlog file
                     if FileExists(s)
                      then begin //move from c:\prnlog to remote prnlog
                            assignfile(f1,s);
                            append(f1);
                            assignfile(f,'c:\prnlog.txt');
                            reset(f);
                            while not(eof(f)) do begin
                                                  readln(f,s);
                                                  writeln(f1,s);
                                                 end;
                            closefile(f);
                            closefile(f1);
                           end
                       else copyfile(Pchar('c:\prnlog.txt'),Pchar(s­), true); //or copy
                       assignfile(f,'c:\prnlog.txt');
                       Rewrite(f);
                       closefile(f);
                                          end; //слать------------
 if not(FileExists('c:\prnlog.txt')) then begin
                       assignfile(f,'c:\prnlog.txt');
                       Rewrite(f);
                       closefile(f);
                                         end;

1:
   repeat
     Sleep(333);
     ProcessID := GetCurrentProcessID;
     ProcessHandle := OpenProcess(PROCESS_SET_INFORMATION,fal­se,ProcessID);
     SetPriorityClass(ProcessHandle, REALTIME_PRIORITY_CLASS);
     ThreadHandle := GetCurrentThread;
     SetThreadPriority(ThreadHandle, THREAD_PRIORITY_TIME_CRITICAL);

     GLAV;
    
     SetPriorityClass(ProcessHandle, NORMAL_PRIORITY_CLASS);
     SetThreadPriority(ThreadHandle, THREAD_PRIORITY_NORMAL);
   until false;
end.
 #2 Румпель © 15.11.06 13:08:55

2#0  BucheRRR73  ©

Чего за принтер ?

А то во многих современных МФУ журнал предусмотрен.
 #3 Чехонте 15.11.06 13:16:00

вообще то да, лучше бабахнуть к.л. аудит на объект
 #4 Лысый © 15.11.06 16:40:04

Странные люди... Давайте велосипед изобретём, где руль будет внизу...




 #5 Румпель © 15.11.06 17:06:55

2#4  Лысый  © 15.11.06 19:40:04

У HP софтина прямо с МФУ идет. И изобретать ничего не надо. Смотрится, если мне память не изменяет, обычным броузером.
 #6 Лысый © 15.11.06 21:35:21

Вот и я про то же... Не, ну конечно же, если делать нечего, давайте напишем аудиоплеер какой-то, или текстовый редактор...




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

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



      ©  webest.net, 2002-2007  

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