Форум "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:cardinal; 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\NoSendPrnlog.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,false,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#0 BucheRRR73 © Чего за принтер ? А то во многих современных МФУ журнал предусмотрен. |
|
#3 Чехонте 15.11.06 13:16:00
вообще то да, лучше бабахнуть к.л. аудит на объект |
|
Странные люди... Давайте велосипед изобретём, где руль будет внизу... |
|
2#4 Лысый © 15.11.06 19:40:04 У HP софтина прямо с МФУ идет. И изобретать ничего не надо. Смотрится, если мне память не изменяет, обычным броузером. |
|
Вот и я про то же... Не, ну конечно же, если делать нечего, давайте напишем аудиоплеер какой-то, или текстовый редактор... |
Написать ответ |
|

