Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-11-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Monitorear impresión

¿Existe alguna forma en Windows 2000 de monitorear desde una aplicación Delphi cuando el usuario manda una impresión y saber cuántas hojas manda?

// Gracias

Última edición por roman fecha: 21-11-2003 a las 19:59:25.
Responder Con Cita
  #2  
Antiguo 23-11-2003
Lmas Lmas is offline
Miembro
 
Registrado: jul 2003
Ubicación: España
Posts: 27
Poder: 0
Lmas Va por buen camino
Hola roman.

Que yo sepa, no existen en Windows funciones hook para monitorear la impresión, aunque tal vez se pueda hacer lo que pides por medio de un thread y con las funciones...

FindFirstPrinterChangeNotification, FindNextPrinterChangeNotification y FindClosePrinterChangeNotification

vigilar los cambios de la impresora.

Cuando haya un cambio, con EnumJobs y GetJob, obtener las páginas que se quieren imprimir.

SalU2
__________________
Una cosa es una cosa, y otra cosa es otra cosa...
Responder Con Cita
  #3  
Antiguo 23-11-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Muchas gracias por la respuesta. Le voy a buscar por ahí. No he visto con detalle las funciones que me mencionas aunque parece que me permiten por lo menos detectar en qué momento se agrega un trabajo a la cola de impresión y quizá de ahí ya pueda averiguar información acerca de la impresión.

// Saludos
Responder Con Cita
  #4  
Antiguo 23-11-2003
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Hola Román mira yo tengo estas funciones, que la verdad no las he utilizado mucho, así que mira a ver si te interesan:
Código Delphi [-]


uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls,Printers,WinSpool;
.....
function GetCurrentPrinterHandle: THandle;
var 
  Device, Driver, Port: array[0..255] of Char;
  hDeviceMode: THandle;
begin 
  Printer.GetPrinter(Device, Driver, Port, hDeviceMode);
  if not OpenPrinter(@Device, Result, nil) then 
    RaiseLastWin32Error; 
end; 

function SavePChar(p: PChar): PChar;
const 
  error: PChar = 'Nil'; 
begin 
  if not Assigned(p) then 
    Result := error 
  else 
    Result := p; 
end; 

procedure TForm1.Button1Click(Sender: TObject);
type
  TJobs = array [0..1000] of JOB_INFO_1;
  PJobs = ^TJobs;
var
  hPrinter: THandle; 
  bytesNeeded, numJobs, i: Cardinal; 
  pJ: PJobs; 
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 
      memo1.Lines.Add('No hay trabajos en la cola') 
    else 
      for i := 0 to Pred(numJobs) do 
        memo1.Lines.Add(Format('Printer %s, Job %s, Status (%d): %s', 
          [SavePChar(pJ^[i].pPrinterName), SavePChar(pJ^[i].pDocument), 
          pJ^[i].Status, SavePChar(pJ^[i].pStatus)])); 
  finally 
    ClosePrinter(hPrinter); 
  end; 
end;
Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.

Última edición por rgstuamigo fecha: 08-11-2010 a las 20:53:44.
Responder Con Cita
  #5  
Antiguo 24-11-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Muchas gracias marcos. Da la impresión de que combinando esto con lo que me comenta Lmas puedo obtener lo que quiero, que básicamente es contabilizar el número de hojas que cada usuario de una sala de cómputo imprime.

// Saludos
Responder Con Cita
  #6  
Antiguo 15-01-2005
Avatar de Enan0
Enan0 Enan0 is offline
Miembro
 
Registrado: may 2004
Ubicación: Argentina
Posts: 565
Poder: 20
Enan0 Va por buen camino
Angry no muestra el nº de paginas ni el Usr Name

Cita:
Código Delphi [-]
 memo1.Lines.add(pJ^[i].pUserName);
 memo1.Lines.add(inttostr(pJ^[i].TotalPages));
Agregue estas dos lineas. y el Total PAges me muestra cualquier verdura y el pUserName me imprime (VACIO)
Estoy usando W2000
Responder Con Cita
  #7  
Antiguo 28-06-2005
seicomtko seicomtko is offline
Registrado
 
Registrado: jun 2005
Posts: 1
Poder: 0
seicomtko Va por buen camino
Talking Monitor de Impresiones en red

FindFirstPrinterChangeNotification, FindNextPrinterChangeNotification y FindClosePrinterChangeNotification

¿Alguién me podria dar un ejemplo de como usar estas funciones?

Lo ke pasa es ke necesito hacer un programa ke monitoree las impresiones en red... osea un servidor... La idea es ke al enviar una impresion desde otro pc... el servidor pause la impresion y envie un mensaje ke diga desde ke pc lo estan enviando, la cantidad de paginas, a ke impresora, configuracion de la hoja y toda la informacion ke se pueda obtener... Gracias
Responder Con Cita
  #8  
Antiguo 23-10-2006
david_thecid david_thecid is offline
Registrado
 
Registrado: oct 2004
Posts: 5
Poder: 0
david_thecid Va por buen camino
sisntaxis

esta mal tu sintaxis, por eso te envia error

Código Delphi [-]
mmo1.Lines.Add(Format('usuario : %s',[SavePChar(pJ^[i].pJ^[i].pUserName)]));
de sa forma te imprimiria el susuario que envi la impresion.
Responder Con Cita
  #9  
Antiguo 07-01-2008
Avatar de adonias
adonias adonias is offline
Miembro
 
Registrado: ago 2007
Posts: 45
Poder: 0
adonias Va por buen camino
Cita:
Empezado por marcoszorrilla Ver Mensaje
Hola Román mira yo tengo estas funciones, que la verdad no las he utilizado mucho, así que mira a ver si te interesan:


Código:
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls,Printers,WinSpool;
.....
function GetCurrentPrinterHandle: THandle;
var 
  Device, Driver, Port: array[0..255] of Char;
  hDeviceMode: THandle;
begin 
  Printer.GetPrinter(Device, Driver, Port, hDeviceMode);
  if not OpenPrinter(@Device, Result, nil) then 
    RaiseLastWin32Error; 
end; 

function SavePChar(p: PChar): PChar;
const 
  error: PChar = 'Nil'; 
begin 
  if not Assigned(p) then 
    Result := error 
  else 
    Result := p; 
end; 

procedure TForm1.Button1Click(Sender: TObject);
type
  TJobs = array [0..1000] of JOB_INFO_1;
  PJobs = ^TJobs;
var
  hPrinter: THandle; 
  bytesNeeded, numJobs, i: Cardinal; 
  pJ: PJobs; 
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 
      memo1.Lines.Add('No hay trabajos en la cola') 
    else 
      for i := 0 to Pred(numJobs) do 
        memo1.Lines.Add(Format('Printer %s, Job %s, Status (%d): %s', 
          [SavePChar(pJ^[i].pPrinterName), SavePChar(pJ^[i].pDocument), 
          pJ^[i].Status, SavePChar(pJ^[i].pStatus)])); 
  finally 
    ClosePrinter(hPrinter); 
  end; 
end;
Un Saludo.
Existe alguna manera de ver el NUMERO DE COPIAS ??
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 15:56:07.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi