FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
Cita:
Me resulta extraño que esto falle.. no te prometo, pero si tengo un tiempo lo voy a probar en un W2k sp4 que tengo en un disco removible. Saludos!
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#2
|
||||
|
||||
Cita:
POr otro lado, la descripcion de la funcion getJobs dice que esta soportada por NT, win95, como decis... Voy a ver si consigo algo para w2k UNA CORRECCION: me equivoque en la version de Delphi, Uso Delphi 6 en Win2k Profecional + SP4
__________________
Aprendamos a ser civilizados |
#3
|
||||
|
||||
si a alguien le interesa..., ya lo hice andar..
el codigo es correcto, mi error fue de interpretacion del API jobs(), la variable JobId indica un numero unico (similar a PID de procesos) y yo suponia que era la posicion de la cola de imprecion.
__________________
Aprendamos a ser civilizados |
#4
|
||||
|
||||
A mi me interesaría y muy posiblemente a varios más. ¿Por qué no pones aquí el código final?
// Gracias |
#5
|
||||
|
||||
Codigo de uso de la API32 EnumJobs() (Jobs de cola de imprecion)
Estoy poniendo el código que permite listar los trabajos de la cola de impresión de Windows.
Este código lo he probado en win2k Profesional +SP4, compilándolo con Delphi 6 En este ejemplo retorno solo el formato de JOB_INFO_2 para los trabajos, pero hay otros mas, el ejemplo debería servir para los otros formatos simplemente cambiando los tipos y algunas modificaciones sencillas. Unidades necesarias: Printers , WinSpool,SysUtils,Types Pasos Y Explicacion de Uso: 1- Recuperar el hander de la impresora: la funcion getHandlePrinter(PrinterNumber:word):THandle; realiza este trabajo llamando a la función de API32 OpenPrinter. 2- Recupero los trabajos de la cola de impresión: la función getJobsInfo2(HandleIMP); llama a EnumJobs() dos veces. La primera ves: envía la estructura enumJobInfo_2: TPArrayJOB_INFO_2; con con tamaño de 1000 bytes. Si EnumJobs() falla (OkJobs=false) este retorna en jobNeeded el tamaño de bytes necesarios para almacenar todos los trabajos en la estructura enumJobInfo_2:TPArrayJOB_INFO_2 para luego poder llamar a EnumJobs() por 2da ves y que esta retorne los trabajos en enumJobInfo_2. La cantidad de trabajos es retornado en JobReturned. Tipos que tuve que definir: Código:
const MAXJobs=1000 type TArrayJOB_INFO_2 = array [0..MAXJobs] of JOB_INFO_2; TPArrayJOB_INFO_2 =^TArrayJOB_INFO_2; Código:
function getHandlePrinter(PrinterNumber:word):THandle; var Defaults : TPRINTERDEFAULTS; NombreImpresora : string; Ok : boolean; MangoPrinter : THandle; begin try NombreImpresora := Printer.Printers.Strings[PrinterNumber]; {Eliminamos el "on LPT"} if Pos(' on ',NombreImpresora)<>0 then NombreImpresora:=Copy (NombreImpresora,1,Pos(' on ',NombreImpresora)-1); Defaults.DesiredAccess := PRINTER_ALL_ACCESS; Defaults.pDatatype := nil; Defaults.pDevMode := nil; Ok := OpenPrinter(PChar(NombreImpresora), MangoPrinter, @Defaults); if (Ok) then getHandlePrinter:=MangoPrinter else raise Exception.create('OpenPrinter no pudo recuperar el Handle de la impresora '+NombreImpresora); except end; end; Código:
procedure getJobsInfo2(Handle:THandle); var enumJobInfo_2 :TPArrayJOB_INFO_2; JobInfoNumer :DWord; JobInfo : JOB_INFO_2; JobNeeded :DWORD; JobReturned :DWORD; jobId :Dword; okJobs :boolean; begin GetMem(enumJobInfo_2,1000); JobInfoNumer:=2; OkJobs :=EnumJobs(Handle,0,MAXJobs ,JobInfoNumer,enumJobInfo_2,1000,JobNeeded,JobReturned); if not OkJobs then begin FreeMem(enumJobInfo_2); GetMem(enumJobInfo_2, JobNeeded); OkJobs :=EnumJobs(Handle,0,MAXJobs,JobInfoNumer,enumJobInfo_2,JobNeeded,JobNeeded,JobReturned); end; end;
__________________
Aprendamos a ser civilizados |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
|