Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-02-2004
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.939
Poder: 27
delphi.com.ar Va por buen camino
Cita:
Empezado por orfeo
en el api que trae el Delphi 5 dice que es soportado por todos los windws.
Esto es discutible... digamos que cuando salió Delphi 5 creo que Borland lo catalogó como compatible con Win95, Win98 y NT4 (Creo)... ahora, que sea compatible con las versiones futuras ya depende del fabricante del sistema operativo (M$), se supone que W2k es compatible con la aplicaciones compiladas para NT4, pero esto lo garantiza M$!

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.
Responder Con Cita
  #2  
Antiguo 25-02-2004
Avatar de orfeo
orfeo orfeo is offline
Miembro
 
Registrado: may 2003
Posts: 99
Poder: 22
orfeo Va por buen camino
Cita:
Empezado por delphi.com.ar
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!
El codigo es correcto? Es correcto como defino el tamano de la structura jobsInfo2?
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
Responder Con Cita
  #3  
Antiguo 29-04-2004
Avatar de orfeo
orfeo orfeo is offline
Miembro
 
Registrado: may 2003
Posts: 99
Poder: 22
orfeo Va por buen camino
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
Responder Con Cita
  #4  
Antiguo 29-04-2004
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
A mi me interesaría y muy posiblemente a varios más. ¿Por qué no pones aquí el código final?

// Gracias
Responder Con Cita
  #5  
Antiguo 09-05-2004
Avatar de orfeo
orfeo orfeo is offline
Miembro
 
Registrado: may 2003
Posts: 99
Poder: 22
orfeo Va por buen camino
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;
function getHandlePrinter(PrinterNumber:word):THandle;
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;
procedure getJobsInfo2(Handle:THandle);
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
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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 17:28:34.


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